我们在一台服务器上的不同端口上运行多节点应用程序。我们尝试使用 nginx 作为反向代理,根据请求 URI 中字符串的匹配情况将请求路由到不同的应用程序。
我们正在使用location
指令来匹配该字符串并相应地进行路由。如果我们返回与 location 指令中的字符串匹配的某个值,则它可以正常工作。但是一旦使用它,proxy_pass
我们只会看到 402 错误。我们做错了什么?
我们的配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name abc.xyz.co;
include snippets/ssl-qaapp.xyz.co.conf;
include snippets/ssl-params.conf;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload; always';
location /
{
root /var/www/html/abc;
}
location ~ 3000
{
# proxy_pass https://127.0.0.1:3000;
return 403;
}
location ~ 3001
{
# proxy_pass https://127.0.0.1:3001;
return 502;
}
}
答案1
根据您的配置,您只有准确查询才能到达您的位置https://abc.xyz.co/3000或者https://abc.xyz.co/3001。
当你输入匹配的位置时,nginx 会将你的请求代理到后端(=上游)的某个 URL 上https://127.0.0.1:3000或者https://127.0.0.1:3001。
如果您收到 HTTP 应答代码 402,则意味着相应的后端返回了它。
换句话说,如果你查询https://abc.xyz.co/3000或者https://abc.xyz.co/3001从您的 nginx 服务器手动使用 wget 或 curl 您将获得相同的返回代码。