Note for nginx
转发header
- server 设置转发原始IP
1
2
3proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host; - 如果 header name 中包含下划线,在 http 部分增加 underscores_in_headers on; 配置
配置优化
- 隐藏nginx版本:
1
server_tokens off;
- 启用ssl_stapling, 让服务器验证证书状态返回浏览器,加快验证过程:
1
2ssl_stapling on;
ssl_stapling_verify on; - 启用正向代理,增加解析的成功率:
1
2resolver 114.114.114.114 114.114.115.115 119.29.29.29 119.28.28.28 223.5.5.5 223.6.6.6 1.1.1.1 1.0.0.1 valid=60s;
resolver_timeout 2s; - 优化TCP连接, 在一个包中发送全部头文件、不缓存数据:
1
2tcp_nopush on;
tcp_nodelay on; - 启用压缩:
1
2
3
4
5gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml; - X-Frame-Options响应头收紧为仅相同域名; 防止XSS攻击; 防止内容类型探嗅; 仅当协议降级(如HTTPS页面引入HTTP资源)时不发送Referrer信息; 激活内容安全策略
1
2
3
4
5add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always; - 激活HSTS
1
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
- nginx日志启用logrotate
websocket
现象:failed: Error during WebSocket handshake: Unexpected response code: 404
1 | proxy_http_version 1.1; |
其中第一行是告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议。第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。
Note for nginx