Category: Nginx

  • Under reverse proxy

    예전에 시도했을 때에는 잘 안되었다. 이번에는 성공했다.

    내가 시도한 환경은 도커 컨테이너에서 Grafana와 PostgreSQL, NGINX를 이용하여 80번 포트로 접속하도록 하는 것이다. 다른 경우로 사용할 것을 대비하여 subfolder에 연결되도록 했다.

    /etc/grafana/grafana.ini 파일에서 [server] 부분을 수정한다.

    [server]
    domain = dorm.welovedoctor.com
    root_url = http://dorm.welovedoctor.com/grafana/
    serve_from_sub_path = true

    /etc/nginx/sites-available/default 파일에서 다음과 같이 수정한다.

    map $http_upgrade $connection_upgrade {
      default upgrade;
      '' close;
    }
    
    upstream grafana {
      server localhost:3000;
    }
    
    server {
      listen 80 default_server;
      listen [::]:80 default_server;
      root /var/www/html;
      server_name dorm.welovedoctor.com;
      location /grafana/ {
        proxy_set_header Host $host;
        proxy_pass http://grafana;
      }
    
      location /grafana/api/live/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_pass http://grafana;
      }
    
    }
  • Goaccess

    nginx 로그 뷰어 중에서 goaccess가 있다. 보통 실행시에 log 파일 위치를 지정해야 한다. 환경 설정 파일을 들여다보니 기본으로 지정할 수 있었다. log-file 항목을 찾아서 주석을 삭제하고 파일 위치를 입력해준다.

    log-file /var/log/nginx/access.log
  • HTTP/3 nginx

    QUIC을 사용할 수 있도록 nginx 를 컴파일 했으면 실제로 이용할 수 있도록 설정한다.

    QUIC은 TCP와 UDP를 사용한다. 방화벽에서 UDP 부분도 추가한다.

    server {
       server_name www.welovedoctor.com;
       listen 443 quic reuseport;
       listen 443 ssl; 
       http2 on;
       ssl_certificate ../fullchain.pem;
       ssl_certificate_key ../privkey.pem;
       include /etc/letsencrypt/options-ssl-nginx.conf;
       ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
       add_header Alt-Svc 'h3=":$server_port"; ma=86400';
       add_header X-protocol $server_protocol always;
    }
    • QUIC reuseport 를 지정한다.
    • 이전 버전에서는 listen 443 ssl http2 로 설정했는데, 버전이 바뀌면서 분리하도록 권고하고 있다고 한다.
    • HTTP/3를 이용하고 있다고 헤더를 추가한다. server 블록에 넣어도 되고, location 블록에 넣어도 된다.

    HTTP/3가 제대로 설정되어 있는지 확인하는 곳은 위와 같다.

    실제로도 확인할 수 있다.

  • QuicTLS 설치

    nginx에서 http/3를 지원하는 방법은 별도의 binary 로 설치하거나 컴파일 해야 한다. 그리고 BoringSSL, QuicTLS, Libressl을 이용해야 한다.

    그런데 라즈레리파이용 binary는 없었다. 그래서 컴파일 하는 방법으로 시도해 보기로 했다. BoringSSL은 무엇인가 오류가 발생해서 nginx 컴파일에서 오류가 생긴다. Libressl도 마찬가지.

    QuicTLS를 이용해서 설치해 보았다. QuicTLS은 git으로 설치한다. 혼란을 막기 위해서 openssl 폴더를 quictls 로 변경한다. ./Configure 로 설치해야 한다.

    git clone https://github.com/quictls/openssl
    mv openssl quictls
    cd quictls
    ./Configure
    make 
    make install

    nginx 소스를 받아서 압축을 풀고 폴더로 이동한다.

    기본 설정을 그대로 유지하려면 다음과 같이 컴파일 한다. 그리고 make, make install 로 설치한다.

    ./configure \
        --with-debug \
        --prefix=/usr/share/nginx \
    	--sbin-path=/usr/sbin/nginx \
    	--conf-path=/etc/nginx/nginx.conf \
    	--error-log-path=/var/log/nginx/error.log \
    	--http-log-path=/var/log/nginx/access.log \
        --pid-path=/run/nginx.pid \
        --lock-path=/run/lock/subsys/nginx \
        --user=www-data \
        --group=www-data \
        --with-threads \
        --with-http_ssl_module \
        --with-http_v2_module \
        --with-http_v3_module \
        --with-cc-opt="-I../quictls/build/include" \
        --with-ld-opt="-L../quictls/build/lib"