每次配 Nginx 都要翻文档,干脆把常用片段整理成一份笔记。

基础反向代理

server {
    listen 80;
    server_name example.com;

    location / {
  proxy_pass http://127.0.0.1:3000;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
    }
}

HTTPS 配置

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

WebSocket 支持

location /ws/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;
}

静态资源缓存

location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff2?)$ {
    root /var/www/site;
    expires 30d;
    add_header Cache-Control "public, immutable";
}

几个容易忽略的点

  • proxy_set_header Host $host 不写的话,后端拿到的 Host 可能是 127.0.0.1:3000,会导致重定向出错。
  • client_max_body_size 默认只有 1M,上传文件一定要调大。
  • 改完配置记得先 nginx -t 测试语法,再 nginx -s reload