Category: Nginx

  • Nginx, WebDav, RaiDrive

    요즘 제공되는 nginx는 –with-http_dav_module 옵션이 기본으로 들어가 있어 RaiDrive로 그냥 연결이 되는 줄 알았다. 그런데 자꾸 접속이 되지 않았다. 그래서 nginx의 access_log를 보니 PROPFIND 항목이 보였다. 이것은 dav_ext_methods 에서 설정을 해주어야 한다. 그러기 위해서는 nginx 를 설치할 때 nginx-full로 해야 한다.

    apt install nginx-full

    server 블록의 location 은 다음과 같이 해주면 적어도 읽기는 항상 가능하다.

    location / {
    	autoindex on;
    	autoindex_localtime on;
    	dav_access user:rw group:rw all:r;
    	auth_basic "Restricted";
    	auth_basic_user_file /etc/nginx/sites-available/auth;
    	dav_methods PUT DELETE MKCOL COPY MOVE;
    	dav_ext_methods PROPFIND OPTIONS;
    }
  • NGINX error log level

    과도한 로그는 없는 것만 못하다. 나의 블로그 error log에 보면 error 항목이 가장 많다. 집과 직장, 기숙사 IP 주소만 allow 상태기 때문에 생긴다. 그래서 이를 줄여보기로 한다. crit 로 뜨는 것이 몇 개 있다. 정확한 이유는 알지 못하지만 너무 오래된 OS나 웹으로 접속할 때 발생하는 것 같다.

    NGINX의 로그 레벨은 다음과 같다.

    debug, info, notice, warn, error (default), crit, alert, emerg

    다음과 같이 crit 이상부터 기록하도록 한다.

    error_log /var/log/nginx/error.log crit;
  • Log, IP

    remote_addr 의 주소에 따라서 log 여부를 설정하는 방법을 이용했다.

    http 블럭 내에서 map을 이용해 remote_addr에 따른 그룹을 지정한다.

    http {
        map $remote_addr $log_true {
    	default yes;
    	192.168.88.199 no;
    	192.168.88.162 no;
    	211.48.203.66 no;
        }
    }

    다음은 server 블록에서 다음과 같이 지정한다.

    server {
        location / {
    	if ($log_true = 'no') {
                access_log off;
    	}
        }
    }

    이게 사실 제대로 동작하지 않았다. 그래서 좀 더 시도해 보았다. http 블럭에서 다음과 같이 설정한다.

     map $remote_addr $log_true {
                    default 1;
                    192.168.88.154 0;
                    192.168.88.180 0;
                    192.168.88.162 0;
                    192.168.88.199 0;
            }
            log_format compression '$remote_addr - $remote_user [$time_local] '
                               '"$request" $status $body_bytes_sent '
                               '"$http_referer" "$http_user_agent" "$gzip_ratio"';
    
            access_log /var/log/nginx/access.log compression;

    server 블럭에서 다음과 같이 해준다.

    access_log /var/log/nginx/access.log compression if=$log_true;
  • /? filtering

    예전부터 블로그를 www로 운영해 왔다. 그랬더니 웹에서 접근이 있다. 그래서 서브 도메인을 blog로 바꾸었다.

    www.welovedoctor.com/?p=1202 이런 식으로 접근을 해오는 경우가 있다. 해당 주소는 없기 때문에 무시해도 좋지만 200 응답보다는 403을 응답하게 해주고 싶었다.

    문제는 / 다음에 ? 는 정규식으로 처리되는 것 같다. 그래서 location 지시어를 제대로 적용할 수 없었다. 고민하다 다음의 방법을 이용하면 지정된 파일이 없을 경우 403 이 응답되는 것을 확인했다. 몇 일 로그를 지켜보면 결과를 알 수 있을 것이다.

    location / {
    	try_files $uri =403;
    }

    그런데 이렇게 하면 https://www.welovedoctor.com/ 을 입력했을 때 index.html 을 불러오지 못한다.