nginx反向代理tomcat,由于客户端输入的端口不一致造成网页basehref错误的问题及解决办法
2016-08-09 10:46
856 查看
由于端口限制的原因,外网开放的端口是8080,而nginx监听的端口是80,通过端口映射,是外网8080映射至nginx所在主机的80端口上(假设nginx所在主机的ip是192.168.0.1,外网域名是domain.com)。这就导致通过外网访问,浏览器输入的地址是domain.com:8080,而在内网访问则是192168.0.1:80,也就是说,客户端发给nginx的请求的头域中HOST的值可能有两种端口80和8080.而nginx在代理客户端向tomcat发请求时,请求头中的HOST的端口默认是80。因此,tomcat接收到请求后,抓取到的端口号是80。因此,如果jsp中设置了basehref,就会造成无论客户端输入的端口号是80还是8080,basehref中写入的端口号一定是80。因此如果客户端输入的地址是192.168.0.1:8080,客户端可以获取到页面,但是网页中所有src都错误,如图片,外链css、js,iframe等等,以及超链接也都错误,因为jsp中的basehref中的端口是80。
http请求头中并不包含port(端口)一项,端口是和地址一起在写HOST里的。nginx可以通过配置文件设置代理发请求时host的值。host中包含的端口信息nginx只能设置为三种:默认(也就是80)、变量(nginx监听的端口或浏览器占用的端口)、常量(比如12345),也就是说,nginx并不能提取出客户端发来请求中的端口信息作为变量设置。因此,当客户端请求的host中端口可能有多个时,nginx无法通过变量提取到端口号。
另外port_in_redirect off只能让浏览器不做重定向,并不能改变nginx发请求时的端口号。
解决办法:
1.把base href去掉,如果没有basehref,浏览器会自动按照当前地址来定位,需要注意的是,如果去掉base href,那么网页中的链接就成了相对路径,如果网页在子目录的话就会出现链接错误。
2.一般这个问题不太常见,因为一般能通过外网访问的,无需再通过内网访问。但是如果有此需要,可以通过配置主机名来设置固定端口解决。在nginx的配置文件中,加一个server配置,其中server_name设置为:192.168.0.1,然后设置host $host:8080.这样一来,如果客户端输入的地址是通过内网ip192.168.0.1:8080来访问的,nginx在发请求时就会将请求头的host中端口号设置为8080.
http请求头中并不包含port(端口)一项,端口是和地址一起在写HOST里的。nginx可以通过配置文件设置代理发请求时host的值。host中包含的端口信息nginx只能设置为三种:默认(也就是80)、变量(nginx监听的端口或浏览器占用的端口)、常量(比如12345),也就是说,nginx并不能提取出客户端发来请求中的端口信息作为变量设置。因此,当客户端请求的host中端口可能有多个时,nginx无法通过变量提取到端口号。
另外port_in_redirect off只能让浏览器不做重定向,并不能改变nginx发请求时的端口号。
解决办法:
1.把base href去掉,如果没有basehref,浏览器会自动按照当前地址来定位,需要注意的是,如果去掉base href,那么网页中的链接就成了相对路径,如果网页在子目录的话就会出现链接错误。
2.一般这个问题不太常见,因为一般能通过外网访问的,无需再通过内网访问。但是如果有此需要,可以通过配置主机名来设置固定端口解决。在nginx的配置文件中,加一个server配置,其中server_name设置为:192.168.0.1,然后设置host $host:8080.这样一来,如果客户端输入的地址是通过内网ip192.168.0.1:8080来访问的,nginx在发请求时就会将请求头的host中端口号设置为8080.
相关文章推荐
- 关于nginx+tomcat搭建反向代理时路径和端口问题
- 反向代理使用https协议,后台tomcat使用http,redirect时使用错误协议的解决办法
- nginx反向代理tomcat应用,struts2网站程序redirect时导致请求地址错误的解决方法
- Windows10下启动nginx反向代理服务器失败的解决方法(重在解决:80端口被PID为4的System占用问题)
- 解决采用nginx反向代理tomcat时JSP动态页面不刷新问题
- nginx反向代理多个tomcat 配置.解决因404问题js css无法加载问题
- Nginx反向代理端口域名无法访问问题解决
- 解决Linux下ArcGIS Server的Tomcat不稳定问题,nginx配置反向代理时的一个小问题
- Nginx反向代理端口域名无法访问问题解决
- idea端口被占用,启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
- (转)IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- 服务器部署_nginx的host not found in upstream "tomcat_www.bojinne" 错误解决办法
- IIS中预览错误问题的解决办法(HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射 )
- 解决Nginx+Tomcat下客户端https请求跳转成http的问题
- Nginx反向代理关于端口的问题
- IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- nginx反向代理服务器端口问题
- nginx反向代理服务器端口问题
- 利用Nginx反向代理功能解决WEB网站80端口被封的解决方法
- tomcat 端口冲突问题的解决办法