nginx做tomcat代理出现css或js静态资源加载失败 4000 或加载一半的问题
2018-10-25 20:31
1071 查看
Web服务器经常会使用nginx作前置路由,在使用nginx配置Web服务器负载均衡、动静分离,会碰到设置反向代理后导致前端资源无法加载的问题
nginx反向代理的tomcat服务器导致前端资源css或js加载失败大概可以分为:端口丢失、真实ip或端口获取错误、js或者css太大加载失败等情形
端口丢失
之前笔者也有文章单独介绍,可参考http://flyflyfish.com/2018/02/24/nginx%E8%BD%AC%E5%8F%91%E4%B8%A2%E5%A4%B1%E7%AB%AF%E5%8F%A3%E9%97%AE%E9%A2%98/
反向代理获取真实ip(域名)、端口、协议
nginx反向代理后,servlet应用通过request.getRemoteAddr()取到的IP是nginx的IP,并非客户端的真实IP;通过request.getRequestUrl()获取的ip(域名)、端口、协议都是nginx对应的参数。
- 比如nginx的配置:
[code]http { upstream backend { server 127.0.0.1:8080; #server backend1.example.com wight=5; #server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; #server backup1.example.com backup; } server { listen 80; server_name your.domain.com; location /test { proxy_pass http://backend/test; } ... } }
在浏览器打开http://your.domain.com/test访问servlet应用,获取客户端IP和URL:
[code]log.info("RemoteAddr:{}, URL:{}", request.getRemoteAddr(), request.getRequestURL()); //输出结果 RemoteAddr:127.0.0.1, URL:http://127.0.0.1:8080/test
- 针对tomcat+nginx的解决方案:
nginx添加如下配置,:
[code]proxy_set_header Host $http_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;
如果不知道如何添加,可参考nginx转发丢失端口的问题。添加完后,输出结果如下:
[code]//输出结果 RemoteAddr:127.0.0.1, URL:http://浏览器的ip地址/test
发现RemoteAddr仍然获取不正确,解决方案如下:
- 方案一:通过
request.getHeader("X-Forwrad-For")
或request.getHeader("X-Real-IP")
获取到nginx配置的Header。 -
方案二: 配置tomcat,通过
Servlet API
的request.getRemoteAddr()
方法获取客户端的IP。Tomcat的server.xml,在Host元素内最后加入:
[code]<Valve className="org.apache.catalina.valves.RemoteIpValve" />
JS或css无法完全加载
nginx的代理缓存区,默认较小导致部分文件出现加载不全的问题,比较典型的如jQuery框架,可以通过配置调整nginx的缓存区即可。
最终完整配置如下:
[code]http { # http_proxy proxy_buffer_size 128k; proxy_buffers 32 128k; proxy_busy_buffers_size 128k; upstream backend { server 127.0.0.1:8080; } server { listen 80; server_name your.domain.com; location /test { proxy_pass http://backend/test; # proxy_params proxy_set_header Host $http_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; } ... } ... }
关于nginx的http_proxy模块参数含义:
阅读更多
相关文章推荐
- 关于nginx+tomcat搭建反向代理时加载静态资源找不到的问题
- tomcat服务器下使用nginx实现最简单的动静分离--解决css、js不加载的问题
- 使用Tomcat部署项目在浏览器中访问的时候JS和CSS等静态文件无法加载的问题
- nginx做反向代理但是图片,css,js等静态资源加载出错
- springmvc出现页面引用的js,css等静态资源访问出现404问题
- struts2框架下Tomcat不能加载css、js和图片等静态资源的解决办法
- 出现js、css、png、gif等静态资源无法加载解决
- 解决使用SpringMVC时,css、js、image等静态资源无法加载的问题
- apache代理tomcat无法加载css,js,图片等资源的解决方法
- 解决Nginx做主服务器与Tomcat整合下无法加载JSP中静态资源的问题
- spring MVC js css图片等静态资源无法加载问题
- tomcat服务器下使用nginx实现最简单的动静分离--解决css、js不加载的问题
- nginx做静态代理时css加载不出问题解决
- 解决Tomcat无法加载css和js等静态资源文件
- Tomcat无法加载css和js等静态资源文件的解决思路
- spring MVC 跳转js css图片等静态资源无法加载问题
- node中加载静态资源css,js等不显示问题
- 解决springMVC 跳转js css图片等静态资源无法加载的问题
- nginx反向代理时通过rewrite解决后端资源css/js/img 写了绝对路径的问题
- tomcat 无法加载js和css 等静态文件的问题