user booquiz;

events {
  worker_connections 1024;
}
http {
     include mime.types;

     server {
       listen 80;
       return 301 https://$host$request_uri;
     }

     server {
         listen 443 ssl;
         ssl_certificate /etc/letsencrypt/live/booquiz.kro.kr/fullchain.pem;
         ssl_certificate_key /etc/letsencrypt/live/booquiz.kro.kr/privkey.pem;

        # Disable SSL
        ssl_protocols TLSv1.2 TLSv1.3;

        # 통신과정에서 사용할 암호화 알고리즘
        ssl_prefer_server_ciphers off;

        # Enable HSTS
        # client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다.
        # 이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다.
        add_header Strict-Transport-Security "max-age=31536000" always;

        # SSL sessions
				ssl_session_cache shared:SSL:50m;
				ssl_session_timeout 1h;

        # /api 경로를 백엔드 서버로 프록시
        location /api {
            rewrite ^/api/?(.*)$ /$1 break;
            proxy_pass <http://10.0.1.6:3000>;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # 정적 파일 서빙 설정
        location / {
            root /static;
            index index.html;
            try_files $uri $uri/ /index.html;
        }

     }
     server {
       listen 80;
       return 301 https://$host$request_uri;
     }

1. ssl_prefer_server_ciphers 설정 최적화


ssl_prefer_server_ciphers off;

현재 ssl_prefer_server_ciphers on;로 설정되어 서버가 선호하는 암호화 알고리즘을 우선하게 되어 있는데, 대부분의 경우 최신 브라우저의 암호화 알고리즘을 우선하는 것이 더 나은 성능과 보안을 제공합니다.

2. SSL 세션 캐시와 타임아웃 값 조정


ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1h;

SSL 세션 캐시를 10m로 설정하였지만, 세션 캐시를 더 넉넉하게 50m 정도로 지정하는 것이 좋습니다. ssl_session_timeout10m에서 1h로 늘려서 성능을 향상시킬 수 있습니다.

3. Strict-Transport-Security

브라우저가 처음 HTTPS로 사이트에 접속할 때, 서버는 Strict-Transport-Security 헤더를 응답에 포함합니다.

참고 자료

https://jun-codinghistory.tistory.com/651