Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
77 lines
3.9 KiB
Plaintext
77 lines
3.9 KiB
Plaintext
# @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;
|
|
}
|