# @MAIL_HOST@ 가 Cloudflare 프록시(주황 구름) 뒤에 있을 때의 443 설정. # Cloudflare 오리진 인증서(@CF_CERT@)를 써서 웹 화면과 웹훅을 바로 제공합니다. # POP3·IMAP·SMTP 는 프록시를 지나지 못하므로, 메일 프로그램을 쓰려면 DNS 를 회색 구름으로 바꾸고 # Let's Encrypt 발급 후 setup.sh 로 mail.conf 로 교체합니다. server { listen 80; listen [::]:80; server_name @MAIL_HOST@; location /.well-known/acme-challenge/ { root @ACME_WEBROOT@; } location / { return 301 https://@MAIL_HOST@$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name @MAIL_HOST@; ssl_certificate @CF_CERT@; ssl_certificate_key @CF_KEY@; ssl_protocols TLSv1.2 TLSv1.3; server_tokens off; charset utf-8; client_max_body_size 32m; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy no-referrer always; add_header X-Frame-Options DENY always; add_header X-Robots-Tag "noindex, nofollow" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always; add_header Cache-Control "no-store, no-transform" always; # 대용량 첨부파일 업로드(0.9.5): 본문 크기 제한을 두지 않고(크기는 Node 가 관리자·시스템 설정으로 거부) 버퍼링 없이 바로 흘려보냅니다. # 예전에는 server 블록의 client_max_body_size 32m 에 걸려 32MB 가 넘는 파일이 nginx 의 413(HTML)으로 끊겼고 화면에는 일반 오류만 보였습니다. # 버퍼링을 끄는 이유: 켜 두면 nginx 가 1GB 를 임시 파일에 다 받은 뒤 넘기므로 브라우저의 진행률은 100% 인데 서버 저장은 한참 뒤에 끝나고 디스크를 두 번 씁니다. location = /api/files { client_max_body_size 0; proxy_request_buffering off; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_pass http://127.0.0.1:@PORT@; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Prefix ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header CF-Connecting-IP $http_cf_connecting_ip; proxy_no_cache 1; proxy_cache_bypass 1; } # 대용량 첨부파일 다운로드 링크: 큰 파일을 오래 흘려보내므로 응답 버퍼링을 끄고 시간 제한을 넉넉히 둡니다. location /dl/ { proxy_buffering off; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_pass http://127.0.0.1:@PORT@; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Prefix ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header CF-Connecting-IP $http_cf_connecting_ip; proxy_no_cache 1; proxy_cache_bypass 1; } location / { proxy_pass http://127.0.0.1:@PORT@; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Prefix ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header CF-Connecting-IP $http_cf_connecting_ip; proxy_read_timeout 180s; proxy_no_cache 1; proxy_cache_bypass 1; } access_log /var/log/nginx/@APP_NAME@.access.log; error_log /var/log/nginx/@APP_NAME@.error.log; }