Blog

  • 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" 
  • Telegram으로 그림 파일 보내기

    Telegram Bot으로 그림 파일을 보내면 이미지를 손실 압축해서 전송된다. 그래서 화질이 나빠진다. 이미지 그 자체를 보내는 것으로 처리해야 한다.

    img = open(filename, 'rb')
    response = requests.post(
    	f'https://api.telegram.org/bot{TOKEN}/sendDocument',
    	data = {'chat_id' : CHAT_ID,
    		   'document' : 'attach://file'},
    	f'https://api.telegram.org/bot{TOKEN}/sendPhoto?chat_id={CHAT_ID}',
    	files={'file':img},
    	timeout=5)
  • File browser

    회사 내부에서 파일을 USB로만 이동하는게 상당히 번거롭다. 가장 번거로운 것은 내 컴퓨터에서 USB가 인식이 제대로 안된다는 것이다. 그래서 웹으로 파일을 공유하는 방법을 찾아 보았다.

    정말 여러 방법이 있을 것이다. 그 중에서 TrueNAS scale의 App에서 File Browser를 이용해 보기로 했다.

    처음에는 파일을 읽을 수만 있을 뿐 삭제나 생성이 되지 않았다. 결국 해결한 방법은 누구나 읽고 쓸 수 있는 dataset을 pool에 하나 생성해서 여기에 File Browser를 연결하는 것이다.

    Add Dataset을 클릭해서 사용할 것을 하나 만든다.

    App에서 여기에 Host path를 연결한다.