무엇을 하나
Ubuntu 의 /etc/nginx/sites-available/ 에 넣을 server 블록을 만듭니다. 정적 파일과 리버스 프록시 중에서 고르고, HTTPS · 업로드 크기 · 압축 · 로그 · 보안 헤더 · 요청 수 제한을 더합니다. log_format · limit_req_zone · 웹소켓용 map 처럼 http 블록에만 둘 수 있는 줄은 /etc/nginx/conf.d/ 파일로 따로 내고, 이름에 사이트 이름을 붙여 사이트를 여러 개 올려도 겹치지 않게 합니다.
예시
| 고른 것 | 들어가는 줄 |
|---|---|
| 리버스 프록시 | proxy_pass http://127.0.0.1:3000; + Host · X-Forwarded-For · X-Forwarded-Proto 헤더 |
| 웹소켓 | proxy_set_header Upgrade $http_upgrade; · Connection 은 map 으로 |
| HTTP → HTTPS | 80 포트 블록에 return 301 https://$host$request_uri; |
| 업로드 20MB | client_max_body_size 20m; (기본 1m, 넘으면 413) |
| 요청 수 제한 | limit_req_zone … rate=10r/s; (conf.d) + limit_req zone=… burst=20 nodelay; |
| 시간이 든 로그 | rt=$request_time uct=… urt=$upstream_response_time |
흔한 실수
log_format·limit_req_zone을 server 블록에 넣기 —nginx -t가 「directive is not allowed here」로 거부합니다. 이 두 줄은http블록(Ubuntu 에서는conf.d/*.conf)에 둡니다.- 인증서보다 설정을 먼저 켜기 —
ssl_certificate파일이 없으면nginx -t가 실패합니다. 인증서를 먼저 받거나 HTTPS 를 끈 설정으로 시작합니다. server_name _와 Ubuntu 기본 사이트 — 기본 사이트(sites-enabled/default)도_를 써서 「conflicting server name」 경고가 납니다. 기본 받기로 쓸 거라면 기본 사이트의 링크를 지웁니다.burst=0— nginx 는 0 을 거부합니다. 몰림을 허용하지 않으려면burst를 아예 빼면 됩니다(이 도구는 0 이면 뺍니다).
어떻게 확인했나
공개 전에 Ubuntu 24.04 의 nginx 1.24 패키지를 풀어 nginx -t 로 옵션 조합 52개를 검사했습니다(데몬은 띄우지 않음). http 블록은 Ubuntu 의 nginx.conf 와 같은 줄에서 경로만 바꿨고, 인증서는 시험용 자체 서명, 일부 조합은 Ubuntu 기본 사이트와 함께, 사이트 3개를 한 서버에 올린 경우도 넣었습니다. 경고([warn])까지 0 이어야 통과로 셌습니다 — 모두 66번. 문법 검사이므로 앱이 실제로 응답하는지는 따로 확인해야 합니다.
자주 묻는 것
sites-available 과 sites-enabled 는 무엇이 다른가요?
Ubuntu 의 nginx.conf 는 sites-enabled/ 만 읽습니다. 설정은 sites-available/ 에 두고 ln -s 로 sites-enabled/ 에 링크를 걸어 켭니다. 링크만 지우면 파일은 남긴 채 끌 수 있습니다.
바꾼 뒤 restart 와 reload 중 무엇을 하나요?
sudo nginx -t 로 검사한 뒤 sudo systemctl reload nginx 를 씁니다. reload 는 새 설정으로 워커를 바꾸면서 접속 중인 연결을 끊지 않고, 설정에 문제가 있으면 예전 설정으로 계속 돕니다.
입력한 값이 서버로 가나요?
아니요. 설정은 브라우저 안에서 만듭니다. 도메인 · 경로 · 업스트림 주소는 서버로 보내지 않고, 이 사이트가 쓰는 방문 통계와 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.