今天给客户做需求,基本的nginx+tomcat,tomcat之前就有,8081端口的,现在客户有了域名,希望可以用域名直接访问,那就只有两种方法:改tomcat端口,8081改为80,要么就是用第三方web转发,比如使用nginx,这次我就给客户使用nginx,结果客户在访问一个注册页面tMallUser!toRegistPage.action报错404
我有单独用tomcat测试了页面,可以打开,没问题,那问题一定就是nginx配置转发有问题。
server { listen 80 default; server_name 域名; index index.html index.htm index.jsp; root /www/default; location ~ \.jsp$ { proxy_pass http://127.0.0.1:8080; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } access_log /www/log/nginx/access/default.log; }
我之前用的公司脚本跑的,主要是为了省事,访问主页,登录页是没有问题,就是访问注册页面tMallUser!toRegistPage.action报错,哎,现在知道了,省事就是费事!
仔细看了其他资料,发现配置有问题,按照上图配置,他就单纯的把jsp页面转发给tomcat处理,但是注册页面不是jsp的,是一个action请求,所以,没有转给tomcat处理,就报错404了。
#location ~ \.jsp$ { #proxy_pass http://127.0.0.1:8081; #} location / { index index.html index.htm index.jsp; proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
把原来注释掉,新字段意思是把网站目录下的都转发给tomcat处理,包括静态页面HTML。
之前尝试过静态页面分离的做法,但是不知道如何区分,让action的页面转给tomcat处理,索性,图个简单,就把所有转发给到tomcat处理。如果,有了解这个配置的同学,可以邮件我,相互交流,相互学习,谢谢!
本文出自 “运维空间” 博客,请务必保留此出处http://drinkboy.blog.51cto.com/10606290/1770183
nginx+tomcat 对于action请求返回404页面
原文地址:http://drinkboy.blog.51cto.com/10606290/1770183