Note for nginx

转发header

  • server 设置转发原始IP
    1
    2
    3
    proxy_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; 配置

配置优化

  1. 隐藏nginx版本:
    1
    server_tokens off;
  2. 启用ssl_stapling, 让服务器验证证书状态返回浏览器,加快验证过程:
    1
    2
    ssl_stapling on;
    ssl_stapling_verify on;
  3. 启用正向代理,增加解析的成功率:
    1
    2
    resolver 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;
  4. 优化TCP连接, 在一个包中发送全部头文件、不缓存数据:
    1
    2
    tcp_nopush on;
    tcp_nodelay on;
  5. 启用压缩:
    1
    2
    3
    4
    5
    gzip 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;
  6. X-Frame-Options响应头收紧为仅相同域名; 防止XSS攻击; 防止内容类型探嗅; 仅当协议降级(如HTTPS页面引入HTTP资源)时不发送Referrer信息; 激活内容安全策略
    1
    2
    3
    4
    5
    add_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;
  7. 激活HSTS
    1
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
  8. nginx日志启用logrotate

websocket

现象:failed: Error during WebSocket handshake: Unexpected response code: 404

1
2
3
proxy_http_version 1.1;    
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

其中第一行是告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议。第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。

作者

Sony Dog

发布于

2022-07-31

更新于

2023-12-26

许可协议

CC BY-NC-SA 4.0