nginx+resin配置web服务器 访问url不带项目名称,怎么办?

testzhang 发布于 2015/01/18 13:45
阅读 3K+
收藏 0

最近工作中遇到一难题,因为一服务器有多个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 工程名称。请各位大侠过来瞧一瞧

 


加载中
0
testzhang
testzhang
希望大家给给思路!谢谢了
jay_
jay_
同样问题 请问你搞定了吗
0
你小舅子爱空姐
你小舅子爱空姐
 location / {
        proxy_pass http://backend_vv/zhishiku/;
}
testzhang
testzhang
还是不行,报404
0
你小舅子爱空姐
你小舅子爱空姐



curl -vv http://127.0.0.1:88/ 

curl -vv http://127.0.0.1:88/zhishiku/
的结果分别是什么?


nginx 开启 error log,调到 info 然后访问 nginx,看看error log输出


testzhang
testzhang
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所以。。
0
你小舅子爱空姐
你小舅子爱空姐
那  location / {         proxy_pass http://backend_vv/zhishiku/; } 这样配置就没错,最后需要有 /
0
testzhang
testzhang
如果把resin服务器http端口改为80 ,那直接访问aaa.ccc.eee(不带项目名zhishiku)没问题
0
Feng_Yu
Feng_Yu

这种情况可能比较复杂,需要你看一下返回的页面源码。Rewrite通常只对响应的URL进行重写,但是返回的页面内容并未重写,这点从页面源码就可以看到,所以会出现404。不嫌麻烦的话写RewriteHtml规则吧,不清楚nginx是否有这个功能,apache是有这个模块的,可以对反向代理之后返回的html内容进行重写。

这个功能我以前做过,非常麻烦,即使重写了,也无法保证所有的页面不出问题,有些页面的URL是通过js生成的,不在页面a标签中,这种重写的话会更麻烦。

返回顶部
顶部