Nginx 反向代理
- 2025-08-22 18:13:00
- 丁国栋
- 原创 80
这一个非常典型和通用的 Nginx 代理配置:
location / { proxy_redirect off; 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; proxy_pass_request_headers on; proxy_pass http://127.0.0.1:8080; }
其中:
- Host 主机头是为了让后端服务能正确处理该请求,根据 Host 来判断应该路由给哪一个虚拟主机或者服务。
- X-Real-IP 和 X-Forwarded-For 的目的是一样的,都是为了让后端服务获取真实的IP地址。
- X-Forwarded-Proto 则是为了让后端服务识别到用户使用的协议,是 HTTPS 还是 HTTP。值得注意的是目前市面上还有不少服务会根据这个主机头判断请求是否合法,例如 HTTP Referer 和 X-Forwarded-Proto 的协议以及Host如果不一致会中断请求或者拒绝服务,在一定程度上可以抵御部分 CSRF 攻击(Cross-Site Request Forgery “跨站请求伪造”)。
完整示例:
upstream jumpserver { server 127.0.0.1:8080; } server { listen 80; server_name jms.thedf.cc; return 301 https://jms.thedf.cc$request_uri; } server { listen 443 ssl; server_name jms.thedf.cc; ssl_certificate /root/.acme.sh/thedf.cc_ecc/fullchain.cer; ssl_certificate_key /root/.acme.sh/thedf.cc_ecc/thedf.cc.key; charset utf-8; access_log /var/log/nginx/access-jms.thedf.cc.log; error_log /var/log/nginx/error-jms.thedf.cc.log; location / { proxy_pass http://jumpserver; proxy_redirect off; 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; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 0; client_body_buffer_size 128k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } }
--
发表评论