1. 程式人生 > >Nginx反向代理的目錄訪問問題

Nginx反向代理的目錄訪問問題

從昨天就開始糾結了,在做實驗的時候,遇到目錄訪問的問題,如下

 

前端nginx vhost的設定如下,代理訪問後端的192.168.0.37

    
server    {            listen  80;            server_name  www.proxy.com;            index index.php index.html index.htm;            location /test/ {                proxy_next_upstream http_502 http_504 error timeout invalid_header;                proxy_pass http:
//192.168.0.37;                proxy_set_header Host 192.168.0.37;                proxy_set_header X-Forwarded-For $remote_addr;                proxy_redirect http://192.168.0.37/test/ /test/;            }             access_log /data/logs/weblog/proxy_server.access.log;}
   

後端的192.168.0.37在根目錄下是有test目錄的,該目錄下有個index檔案,內容為“192.168.0.37 proxy test OK!”

 

現在的問題是如果在訪問www.proxy.com/test/的時候是可以訪問的,如下

    
[[email protected]_node ~]# curl -I http://www.proxy.com/test/HTTP/1.1 200 OKServer: nginxDate: Wed, 24 Apr 2013 04:22:40 GMTContent-Type: text/html; charset=utf-8Content-Length: 28Connection: keep-aliveLast-Modified: Wed, 24 Apr 2013 03:09:13 GMTAccept-Ranges: bytes
     

但是如果訪問www.proxy.com/test的話就會301

    
[[email protected]_node ~]# curl -I http://www.proxy.com/testHTTP/1.1 301 Moved PermanentlyServer: nginxDate: Wed, 24 Apr 2013 04:25:01 GMTContent-Type: text/htmlContent-Length: 178Location: http://www.proxy.com/test/Connection: keep-alive
     

我剛開始以為是我前端的proxy_redirect設定有問題,後來修改proxy_redirect多次,均無法達到要求,最後突發奇想,把前端的nginx設成了這樣

    
server    {            listen  80;            server_name  www.proxy.com;            index index.php index.html index.htm;            location /test {                proxy_next_upstream http_502 http_504 error timeout invalid_header;                proxy_pass http://192.168.0.37/test/;                proxy_set_header Host 192.168.0.37;                proxy_set_header X-Forwarded-For $remote_addr;                #proxy_redirect http://192.168.0.37/test/ /test/;            }            location / {                proxy_next_upstream http_502 http_504 error timeout invalid_header;                proxy_pass http://192.168.0.37/;                proxy_set_header Host 192.168.0.37;                proxy_set_header X-Forwarded-For $remote_addr;            }             access_log /data/logs/weblog/proxy_server.access.log;}
     

這樣的話,訪問www.proxy.com/test就沒問題了

    
[[email protected]_node vhosts]# curl www.proxy.com/test192.168.0.37 proxy test OK!