Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143046
  • 博文数量: 68
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 20:01
文章分类

全部博文(68)

文章存档

2015年(68)

我的朋友

分类: LINUX

2015-08-31 17:03:17

一、结构

很简单,前面一个nginx做代理,后端webserver为tomcat,tomcat下有一与ROOT目录同级的名为solr的目录

     

二、nginx 配置

server {

        listen       7070;

        server_name  172.16.2.7;

        charset utf-8;

        access_log  logs/access.log  main;

        location / {

            proxy_pass />       }

}

三、问题

访问带目录的URLl不加斜线“/”时失败,如下图



如果加上斜线刚可以正常访问

四、问题处理过程

根据以前的经验,出现这种情况,可以用一些如httpwatch、frirebug等工具来看看在请求与响应该之间发生什么事情,我用了更方便的curl:

C:\>curl.exe -I

HTTP/1.1 302 Moved Temporarily

Server: nginx

Date: Fri, 16 Sep 2011 06:05:35 GMT

Connection: keep-alive

Location:


看到当访问时被重定向到了;google了一下,原来当 URL 指向一个目录并且在最后没有包含/时ginx会自动在请求的最后加上一个/;通过上面的curl输出可以得知这个/是通过重定向来加上的,但按理说应该重定向到/才对,为什么重定向时会少了端口号呢?行,既然没有,那我就手动给你加上吧,于是在location下加上了这一段:

if (-d $request_filename) {

      rewrite ^/(.*)([^/])$ permanent;

}

测试:


C:\>curl.exe -I

HTTP/1.1 302 Moved Temporarily

Server: nginx

Date: Fri, 16 Sep 2011 06:28:07 GMT

Connection: keep-alive

Location:


还是重定向到了 。等等,我在nginx上设置的是permanent永久重定向,返回的http code应该是301才对,但上面的curl返回却是302,莫非这个重定向的响应不是nginx而是后端的tomcat返回的?这得测测:

nginx:

C:\>curl.exe -I

HTTP/1.1 301 Moved Permanently

Server: nginx/1.1.3

Date: Fri, 16 Sep 2011 06:42:01 GMT

Content-Type: text/html

Content-Length: 184

Location: /

Connection: keep-alive

tomcat:

C:\>curl.exe -I

HTTP/1.1 302 Moved Temporarily

Server: Apache-Coyote/1.1

Location: /

Transfer-Encoding: chunked

Date: Fri, 16 Sep 2011 06:40:12 GMT


果然,nginx返回的是301,而tomcat返回的是302,可以确定这个重定向的响应是后端的tomcat返回组客户端的了,只要nginx把端口正确的传递给后端的tomcat,访问就会正常的重定向了:

server {

        listen       7070;

        server_name  172.16.2.7;

        charset utf-8;

        access_log  logs/access.log  main;

        location / {

            proxy_pass

            proxy_set_header        Host $host:$server_port;

            proxy_set_header        X-Real-IP $remote_addr;

            proxy_set_header        User-Agent $http_user_agent;

            proxy_set_header        Referer $http_referer;

        }

}

测试:


C:\>curl.exe -I

HTTP/1.1 302 Moved Temporarily

Server: nginx/1.1.3

Date: Fri, 16 Sep 2011 06:44:46 GMT

Connection: keep-alive

Location: /


可以看到已经可以正常访问

阅读(6639) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:http vary引起的多个版本缓存问题

给主人留下些什么吧!~~