Nginx监听非80端口反向代理80端口出现跳转错误
来源:互联网 发布:mac充电灯不亮但能充电 编辑:程序博客网 时间:2024/05/17 22:59
今天遇见这样一个问题,nginx默认监听端口被https请求占用,而http请求 访问项目会代理到 80端口该怎么解决那?
有一个example.com域名,在web服务器(简称web-server,假定服务器的ip为8.8.8.8)上使用nginx反向代理本地的tomcat服务(8080端口),配置信息如下:
- http {
- upstream tdt_tomcat_server {
- server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s;
- }
- server {
- listen 80;
- server_name example.com *.example.com;
- location / {
- proxy_next_upstream http_502 http_504 error timeout invalid_header;
- 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_pass http://tdt_tomcat_server;
- proxy_redirect off;
- }
- }
- }
又有一台反向代理服务器(proxy-server),因为特殊原因这台服务器对外只能使用非80端口,通过这台服务器反向代理上面的web-server,配置信息如下:
- http {
- upstream tdt_web_server {
- server 8.8.8.8:80 weight=1 max_fails=3 fail_timeout=30s;
- }
- server {
- listen 9000;
- server_name example.com *.example.com;
- location / {
- proxy_next_upstream http_502 http_504 error timeout invalid_header;
- 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_pass http://tdt_web_server;
- proxy_redirect off;
- }
- }
- }
首先将example.com域名通过hosts文件绑定ip到proxy-server上面,然后访问http://example.com:9000的时候会调整到80端口上面:
[root@proxy-server ~]# curl -I http://example.com:9000/
HTTP/1.1 302 Found
Server: nginx/1.12.0
Location: http://example.com/
Google了一下查到需要将proxy_set_header Host 设置成主机+端口的形式,即将 proxy_set_header Host $host; 修改成 proxy_set_header Host $host:$server_port;
这个时候再次访问http://example.com:9000的时候就正常了,不过还有一个问题,就是当访问 http://example.com:9000/userinfo 的时候需要用户登录才能访问,这个时候系统应该自动跳转到 http://example.com:9000/login 才对,但是确是跳转到了 http://example.com/login :
[root@proxy-server ~]# curl -I http://example.com:9000/userinfo
HTTP/1.1 302 Found
Server: nginx/1.12.0
Location: http://example.com/login
但是直接访问 http://example.com:9000/login 也是正常的。一开始想到是tomcat服务器的问题,但是如果反向代理服务器直接设置成web-server上的8080端口的话则是正常的,因此断定问题出在了nginx反向代理的设置上面,后来查阅到nginx和Tomcat集成后发生的重定向问题分析和解决这篇文章,可以通过proxy_redirect进行设置,修改后的proxy-server配置信息如下:
- http {
- upstream tdt_web_server {
- server 8.8.8.8:80 weight=1 max_fails=3 fail_timeout=30s;
- }
- server {
- listen 9000;
- server_name example.com *.example.com;
- location / {
- proxy_next_upstream http_502 http_504 error timeout invalid_header;
- proxy_set_header Host $host:$server_port;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_redirect http://$host http://$host:$server_port;
- proxy_redirect off;
- }
- }
- }
这个时候再访问 http://example.com:9000/userinfo 就自动跳转到 http://example.com:9000/login 了:
[root@proxy-server ~]# curl -I http://example.com:9000/userinfo
HTTP/1.1 302 Found
Server: nginx/1.12.0
Location: http://example.com:9000/login
最后还有一个问题需要特别注意,就是web-server中nginx的配置信息中一定不要这样设置:proxy_set_header Host $host:$server_port;,而是要设置成 proxy_set_header Host $host;,即不加端口号,否则自动跳转会失败。
- Nginx监听非80端口反向代理80端口出现跳转错误
- 解决nginx反向代理django应用非80端口,跳转错误的问题
- Nginx代理非80端口
- Nginx代理非80端口
- Nginx代理非80端口
- Centos配置nginx反向代理8080端口到80端口
- Nginx反向代理设置从80端口转向其他端口
- nginx配置ssl协议https +tomcat 非80/443端口反向代理的配置方式
- 利用Nginx反向代理解决服务器80端口被封
- Nginx反向代理的端口总是80的问题
- nginx反向代理,网站访问地址默认80端口
- Nginx反向代理80端口,实现同一台服务器多个80端口
- Windows下Nginx学习历程_Nginx反向代理设置从80端口转向其他端口
- [Nginx]反向代理Node将3000端口访问转换成80端口
- Nginx实现反向代理(同一服务器下不同端口服务映射到80端口)
- Nginx作为正向代理访问非80端口问题
- Nginx代理非80端口设置及相关参数说明
- Nginx代理非80端口设置及相关参数说明
- json基本使用
- web前端案例-js开发智能鼠标感知遮罩层
- postgres访问认证配置文件pg_hba.conf
- makefile多目录的.c 格式.cpp混合编译
- Java_GC(三) ----不同gc的使用命令
- Nginx监听非80端口反向代理80端口出现跳转错误
- CodeForces-489f
- BIGEMAP地图下载器对比优势(水经注)
- sql之null、空字符串、0的区别
- nodejs
- 多个checkbox复选框触发点击事件
- Linux进程间通信方式总结
- hdu-2492-Ping pong(树状数组)
- 图片选择器