Nginx 反向代理配置详解

概述

使用 Nginx 反向代理实现 HTTPS 访问内网服务(如活字格应用),适用于内网服务器无法直接暴露到公网的场景。

完整配置

server {
    listen 443 ssl;
    server_name www.hgos.top;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 反向代理到本地端口
    location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8081;
        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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
    }
}

关键配置说明

指令说明
proxy_pass转发目标地址,指向本地服务端口
proxy_set_header Host传递原始域名,后端应用可识别
X-Real-IP传递客户端真实 IP
X-Forwarded-For代理链 IP 记录
Upgrade / ConnectionWebSocket 支持,活字格实时推送必须

HTTP 自动跳转 HTTPS

server {
    listen 80;
    server_name www.hgos.top;
    return 301 https://$server_name$request_uri;
}

多站点反向代理

server {
    listen 443 ssl;
    server_name app1.hgos.top;
    location / { proxy_pass http://127.0.0.1:8081; }
}

server {
    listen 443 ssl;
    server_name app2.hgos.top;
    location / { proxy_pass http://127.0.0.1:8082; }
}

注意事项

  • 生产环境建议仅开启 TLSv1.2+,提升安全性
  • 如果后端是 PHP 应用,需删除原有的 PHP rewrite 规则
  • 建议使用 Let's Encrypt 免费证书配合 acme.sh 自动续期
  • 活字格必须配置 WebSocket 代理头,否则实时通知失效

标签: