nginx初始配置如下
server { listen 6087; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站运行目录在/etc/www下,则填写/etc/www。 #允许跨域请求的域,* 代表所有 add_header 'Access-Control-Allow-Origin' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET/POST/PUT/DELETE add_header 'Access-Control-Allow-Methods' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *; root /data/java/formula-vue/dist; try_files $uri $uri/ /index.html; index index.html index.htm; } location /stage-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:6088; } }
例如请求
http://ip:6087/stage-api/get/zip 代理到http://ip:6088/get/zip
就是去掉stage-api这层在转发到对应服务器地址
但是由于**proxy_pass http://localhost:6088;**配置时候少加了个/
造成了nginx则会把匹配的路径部分也给代理走,即stage-api这层也代理走
实际代理路径变成了http://ip:6088/stage-api/get/zip
修改后成功:
server { listen 6087; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站运行目录在/etc/www下,则填写/etc/www。 #允许跨域请求的域,* 代表所有 add_header 'Access-Control-Allow-Origin' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET/POST/PUT/DELETE add_header 'Access-Control-Allow-Methods' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *; root /data/java/formula-vue/dist; try_files $uri $uri/ /index.html; index index.html index.htm; } location /stage-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:6088/; } }
nginx路径匹配规则
首先location进行的是模糊匹配
1)没有“/”时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等
2)而有“/”时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
下面四种情况 http://ip:6087/stage-api/get/zip 进行访问
下面四种情况分别用http://192.168.126.8/proxy/test.html 进行访问。
第一种:
location /stage-api/ { proxy_pass http://127.0.0.1:6088/; }
结论:会被代理到http://127.0.0.1:6088/get/zip 这个url
第二种(相对于第一种,最后少一个 /)
location /stage-api/ { proxy_pass http://127.0.0.1:6088; }
结论:会被代理到http://127.0.0.1:6088/stage-api/get/zip 这个url
第三种:
location /stage-api/ { proxy_pass http://127.0.0.1:6088/test/; }
结论:会被代理到http://127.0.0.1:6088/test/get/zip 这个url
第四种(相对于第三种,最后少一个 / ):
location /stage-api/ { proxy_pass http://127.0.0.1:6088/test; }
结论:会被代理到http://127.0.0.1:6088/testget/zip 这个url