nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx location配置proxy_pass转发时斜线‘/‘导致404

解决Nginx location中配置proxy_pass转发时斜线‘/‘导致404问题

作者:空山苦水禅人

这篇文章主要介绍了解决Nginx location中配置proxy_pass转发时斜线‘/‘导致404问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

nginx location配置proxy_pass转发时斜线‘/‘导致404

在Nginx location通用匹配规则中配置proxy_pass转发时

假设有如下location配置:

	location /test {
		proxy_pass http://localhost:8080/test;
		proxy_redirect off;
		proxy_set_header X-Real-IP          $remote_addr;
		proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
		proxy_set_header Host $host:$server_port;
		proxy_set_header X-Forwarded-Proto "https";
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header X-Real-IP $remote_addr;
	}

如果我请求 http://localhost/test/a.jsp,则会将url根据匹配规则“/test”截取,然后将“/test”后面的内容(此处为“/a.jsp”)拼接到proxy_pass的后面,然后转发,也就是最后实际请求地址为:proxy_pass http://localhost:8080/test/a.jsp。

所以,如果location的匹配规则最后不加斜线'/',则proxy_pass的最后也不要加斜线,或者都加上斜线,不然就不能正确访问实际地址,导致404 not found错误。

注:正则匹配不适用,关于location的匹配规则,可以参考其他资料。

nginx反向代理中proxy_pass后面带\和不带\的坑

1. proxy_pass中带\和不带\的问题

(1)在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;

(2)如果没有/,则会把匹配的路径部分也给代理走。

2. 举例

下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。

(1)

location /proxy/ {
     proxy_pass http://127.0.0.1:81/;
}

由于port后面有/ ,则不会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/test.html

(2)

location /proxy/ {
     proxy_pass http://127.0.0.1:81;
}

由于port后面没有/ , 则会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/proxy/test.html

(3)

location /proxy/ {
     proxy_pass http://127.0.0.1:81/ftlynx/;
}

由于port后面有/ ,则不会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/ftlynx/test.html

(4)

location /proxy/ {
     proxy_pass http://127.0.0.1:81/ftlynx;
}

由于port后面有/ , 则不会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/ftlynxtest.html

心得:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文