Nginx返回400作为proxy_pass的外部URL

时间:2019-08-29 10:18:48

标签: nginx

我试图在我的Nginx中创建一条路由,该路由会将请求代理到外部https资源。我的配置如下:

server {
    listen 443 ssl;
    server_name x.x.com;

    location / {
        resolver 8.8.8.8;
        proxy_pass https://y.y.com$request_uri;
        proxy_ssl_server_name on;
    }
}

现在,每当我尝试调用URL时,我都会立即得到400。

在Nginx日志上足够奇怪的是,起初我没有任何理由选择400。仅在1分钟后,我会收到一条超时消息。 (我的错误日志级别设置为info)

nginx_1_e6b52cd440fd | 999.999.99.999 - - [29/Aug/2019:10:05:27 +0000] "GET / HTTP/1.1" 400 226 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
nginx_1_e6b52cd440fd | 2019/08/29 10:06:27 [info] 67#67: *30 client timed out (110: Connection timed out) while waiting for request, client: 999.999.99.999, server: 0.0.0.0:8080

我的Nginx使用Nginx:1.17作为docker容器运行

1 个答案:

答案 0 :(得分:1)

对于遇到类似问题的任何人,我最终都通过添加

解决了该问题
proxy_set_header Host y.y.com;
proxy_set_header X-Forwarded-For $remote_addr;

由于某种原因,服务器不喜欢具有默认x.x.com主机头的请求,并使用400拒绝了该请求,该请求可能来自服务器端的某些Web服务器配置。