每当我在浏览器中尝试foobar.com/test时,nginx似乎都会将客户端redirect到(301)foobar.com/test/。 这种行为是不可接受的。 代理服务器是一个远程的Apache Web服务器。 我已经尝试了直接调用Apache服务器(没有代理),它不redirect客户端。
考虑到下面的nginx服务器configuration,任何想法我应该如何解决这个问题?
server { listen 80; server_name fooBar.com; location /test { proxy_redirect off; proxy_pass http://1.1.1.1:80/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /test/ { proxy_redirect off; proxy_pass http://1.1.1.1:80/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
根据文档,此场景有一种特殊的处理方式:
如果某个位置由以斜杠字符结尾的前缀string定义,并且请求由proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass或memcached_pass中的一个进行处理,则会执行特殊处理。 为了响应URI等于这个string的请求,但没有结尾的斜杠,带有代码301的永久redirect将被返回到所请求的URI,并附有斜线。 如果不需要,可以像这样定义URI和位置的精确匹配:
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }( http://nginx.org/en/docs/http/ngx_http_core_module.html#location )