nginx+resin配置web服务器 访问url不带项目名称,怎么办?
最近工作中遇到一难题,因为一服务器有多个resin服务,所以考虑用nginx作代理,监听80端口,再按照serverName转发服务到个resin上。现在问题是,虽然nginx起到了代理转发作用,不过在浏览器上访问需要带上相应的项目名才能访问,这让我很不爽,有什么办法可以去掉项目名吗,比如用aaa.ccc.eee而不是aaa.ccc.eee/zhishiku(项目名)就可以访问。以下是我配置文件内容重要部分 ,nginx.conf::
http {
upstream backend_vv {
server 127.0.0.1:88;
}
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name aaa.ccc.eee;
charset UTF-8;
access_log logs/access.log;
root /usr/local/resin/webapps/zhishiku;
index indexxx.html;
# root /home/webuser/zhishiku;
location / {
# if (!-e $request_filename) {
proxy_pass http://backend_vv;
# }
}
location ~ .(jsp|do|xtp|action|htm)$ {
proxy_pass http://backend_vv;
}
location /WEB-INF {
deny all;
}
location /logs {
deny all;
}
resin.conf 主要部分为::
<http address="*" port="88"/>
<host id="aaa.ccc.eee" root-directory="webapps/">
<web-app id="/" document-directory="zhishiku"/>
</host>
其中zhishiku是我java 工程名称。请各位大侠过来瞧一瞧
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这种情况可能比较复杂,需要你看一下返回的页面源码。Rewrite通常只对响应的URL进行重写,但是返回的页面内容并未重写,这点从页面源码就可以看到,所以会出现404。不嫌麻烦的话写RewriteHtml规则吧,不清楚nginx是否有这个功能,apache是有这个模块的,可以对反向代理之后返回的html内容进行重写。
这个功能我以前做过,非常麻烦,即使重写了,也无法保证所有的页面不出问题,有些页面的URL是通过js生成的,不在页面a标签中,这种重写的话会更麻烦。
如果把resin服务器http端口改为80 ,那直接访问aaa.ccc.eee(不带项目名zhishiku)没问题
curl -vv http://127.0.0.1:88/ 是resin的欢迎页 curl -vv http://127.0.0.1:88/ zhishiku 是zhishiku这个项目的欢迎页 nginx error.log 日志没输出,access.log就报404错误了,访问路径少了zhishiku所以。。
curl -vv http://127.0.0.1:88/
或
curl -vv http://127.0.0.1:88/zhishiku/
的结果分别是什么?
nginx 开启 error log,调到 info 然后访问 nginx,看看error log输出
还是不行,报404
location / {
proxy_pass http://backend_vv/zhishiku/;
}
同样问题 请问你搞定了吗
希望大家给给思路!谢谢了