我有一个网站,其中包含一些网址(http://位置:端口/) 并希望使用 NGINX 来代理它。
我有另一个网站,位于 (http://位置2:端口2) 并且也想代理它,这样。
http://main.com
站点 1 可通过以下方式访问:http://main.com/site2
站点 2 可通过其所有子链接访问
我的尝试失败了。
server {
listen 80;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://landing-page:5000;
proxy_redirect off;
}
location /insights {
return 302 $uri/;
}
location /insights/ {
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
rewrite ^/insights/?(.*) /$1 break;
proxy_pass http://ghost:2368/;
# proxy_redirect off;
}
}
附加信息
我在 Docker 上运行 NGINX,并且必须在 Mac 上将端口 80 映射到 8080。
我发现的是这个:
http://localhost:8080/insights
http://localhost/insights/
在浏览器中将URL 设置为http://localhost:8080/insights/ghost
将 URL 设置为http://localhost:8080/ghost/
http://localhost:8080/insights/
将 URL 设置为http://localhost:8080/insights/
http://localhost:8080/insights/ghost/
将 URL 设置为http://localhost:8080/insights/ghost/
任何以斜线结尾的 URL 似乎都可以正常工作。为什么?
答案1
您的location /
块应位于文件末尾。位置块按顺序处理,第一个匹配的块将被执行。由于location /
匹配每个请求,因此它将始终被执行。
一般来说,您应该首先拥有最具体的块,然后是不太具体的块,最后location /
以所有其他请求结束。
你的文件应该这样布局:
server {
listen 80;
index index.html;
location /insights/ {
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
rewrite ^/insights/?(.*) /$1 break;
proxy_pass http://ghost:2368/;
# proxy_redirect off;
}
location /insights {
return 302 $uri/;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://landing-page:5000;
proxy_redirect off;
}
}