【发布时间】:2022-01-29 18:33:49
【问题描述】:
我的 nginx 配置中有以下服务器块:
server {
listen 80; #default_server;
listen [::]:80; #default_server;
client_max_body_size 20M;
client_header_timeout 600;
client_body_timeout 600;
keepalive_timeout 600;
server_name example1-proxy.in;
location / {
proxy_pass http://example1.in;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_set_header X-Forwarded-For "";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
server {
listen 80; #default_server;
listen [::]:80; #default_server;
client_max_body_size 20M;
client_header_timeout 600;
client_body_timeout 600;
keepalive_timeout 600;
server_name example2-proxy.in;
location / {
proxy_pass http://example2.in;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_set_header X-Forwarded-For "";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
我想在另一个 nginx 配置中将 example1-proxy 和 example2-proxy 配置为代理 pass,所以我做了以下操作:
server {
listen 80; #default_server;
listen [::]:80; #default_server;
client_max_body_size 20M;
client_header_timeout 600;
client_body_timeout 600;
keepalive_timeout 600;
server_name example5.in;
location /temp1/ {
proxy_pass http://example1-proxy.in;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_set_header X-Forwarded-For "";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
location /temp2/ {
proxy_pass http://example2-proxy.in;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_set_header X-Forwarded-For "";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
当我点击 url http://example5.in/temp2 时,应该调用 http://example2-proxy.in 但我收到以下错误:
{
"timestamp": 1643470058798,
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/temp2/some path to api "
}
我不明白为什么上述配置不起作用,请提出任何解决方案。
【问题讨论】:
-
看起来您的后端不理解那些
/temp1或/temp2URI 前缀。将您的proxy_pass指令更改为proxy_pass http://example1-proxy.in/;和proxy_pass http://example2-proxy.in/;。阅读this问题/答案了解更多信息。 -
实际上问题是,当我通过邮递员触发example1-proxy/temp1 时,它可以工作,我认为第一个服务器块正在工作,因为当我颠倒服务器块的顺序时,example2-proxy/temp2 正在工作。我不知道默认情况下为什么它只需要第一个服务器块而不是第二个服务器块。
标签: linux nginx nginx-reverse-proxy nginx-config