我的nginx配置如下
upstream backend {
server backendserver01.example.com;
}
server
{
listen 8097;
listen [::]:8097;
server_name mynginxproxy.domain.local;
location /
{
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://backend;
}
}
我运行下面的curl命令。
curl -v -g -H "Accept: application/json" -H "Content-type: application/json" -H "X-API-KEY: some-guid" --URL "http://mynginxproxy.domain.local:8097/path/api/v1/getData?exported=false&component[name]=somecomponent"
我收到了一个来自nginx的404。
直接对着backendserver01.example.com运行命令完全正常,有什么办法吗?
这是因为你使用了不正确的配置。
server_name _;
因为你是用的curling mynginxproxy.domain.local
这意味着你使用的是服务器名指示,比如将主机头传递给Nginx,而Nginx目前还没有配置为接受请求,在 mynginxproxy.domain.local
虚拟主机。
将此行改为。
server_name mynginxproxy.domain.local;
删除不必要的一行 proxy_ssl_server_name on;
因为你代理的是http而不是https。
而且要确保 mynginxproxy.domain.local
FQDN在Nginx主机上正确解析。
好了,我已经找到了解决方法。
设置
proxy_set_header Host backendserver01.example.com;
proxy_set_header X-Forwarded-For $remote_addr;
解决了我的问题。