我试图在我的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容器运行
答案 0 :(得分:1)
对于遇到类似问题的任何人,我最终都通过添加
解决了该问题proxy_set_header Host y.y.com;
proxy_set_header X-Forwarded-For $remote_addr;
由于某种原因,服务器不喜欢具有默认x.x.com主机头的请求,并使用400拒绝了该请求,该请求可能来自服务器端的某些Web服务器配置。