配置Nginx反向代理(作为负载均衡与SSL终端,上游后端无SSL)
配置Nginx反向代理(作为负载均衡与SSL终端,上游后端无SSL)
看起来你已经搭好了基础的配置框架,我来帮你补全细节并解释关键要点,确保这个反向代理+负载均衡的配置能正常运行:
完整的Nginx配置示例
# 定义上游后端服务器组,实现负载均衡策略 upstream backend { ip_hash; # 基于客户端IP的会话保持,确保同一用户请求落到同一后端 server 192.168.178.11; # 无SSL的后端服务器1 server 192.168.178.12; # 无SSL的后端服务器2 } server { root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name example.com; # 替换成你的实际域名 # 核心反向代理配置块 location / { proxy_pass http://backend; # 将HTTPS请求解密后转发到上游HTTP后端 # 补充必要的代理请求头,让后端获取真实客户端信息 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; # 注释掉原有的try_files,因为我们要转发所有请求到后端,而非本地文件 # try_files $uri $uri/ =404; } # SSL相关配置(由Certbot自动生成,保留即可) listen [::]:443 ssl ipv6only=on; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # 补充Certbot默认生成的DH参数配置 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } # 可选:添加HTTP到HTTPS的强制重定向 server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; }
关键配置说明
upstream backend块:使用ip_hash实现会话粘性,适合有用户会话状态的应用;如果不需要会话保持,可以换成默认的round_robin轮询,或者least_conn(优先转发到连接数最少的后端)。- SSL终端功能:Nginx在443端口处理客户端的HTTPS请求,解密后以普通HTTP方式转发到上游后端,后端无需配置SSL,完全由Nginx承担加密解密工作。
- 代理请求头补充:
X-Real-IP、X-Forwarded-For能让后端获取到真实的客户端IP,X-Forwarded-Proto告诉后端请求原本是HTTPS协议,避免后端生成错误的链接。 - HTTP重定向:额外添加的80端口server块,会把所有HTTP请求自动跳转到HTTPS,提升站点安全性和用户体验。
配置验证与生效
完成配置后,先检查语法是否正确:
sudo nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,就可以重启Nginx让配置生效:
sudo systemctl restart nginx
备注:内容来源于stack exchange,提问作者hasanbozkurt
相关产品推荐
相关产品推荐

