首先,我对 nginx 还很陌生。我正尝试为我们的网站进行预渲染,这涉及执行重写和 proxy_pass,但我无论如何也想不出是什么导致它失败。
下面我使用的配置仅用于故障排除,但 60 秒后仍然会出现连接超时的情况。我可以将其指向任何 IP 或主机,它都会失败。使用 wget 检索任何 IP 或主机上的页面都可以正常检索页面,例如http://www.google.com或者我试图访问的服务器,http://service.prerender.io,所以这与 nginx 如何执行 proxy_pass 有关。
服务器内部位于 10.3.3.91。奇怪的是,我可以将 proxy_pass 指向 10.3.3.92(另一个 nginx 服务器)并检索页面。
我很困惑。如能得到任何帮助我将不胜感激。
worker_processes 4;
worker_rlimit_nofile 65000;
events {
worker_connections 2048;
}
http {
# Logging Settings
access_log /var/log/nginx/test1-access.log;
error_log /var/log/nginx/test1-error.log;
server {
listen 80;
# location / {
# try_files $uri $uri/ /index.php?$args;
# }
location / {
proxy_set_header X-Prerender-Token OUR_TOKEN;
#resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
resolver 8.8.8.8;
set $prerender "service.prerender.io";
rewrite .* /$scheme://$host$request_uri? break;
proxy_pass http://$prerender;
break;
}
}
}
我在错误日志中看到的示例:
2016/08/26 10:03:12 [error] 3635#0: *249 upstream timed out (110: Connection timed out) while connecting to upstream, client: 10.103.11.151, server: , request: "GET /something.php HTTP/1.1", upstream: "http://54.225.208.171:80/http://10.3.3.91/something.php", host: "10.3.3.91"
答案1
我们的网络团队为几个不同的域名设置了 Web 代理例外,例如 purple.com 进行测试,我将 proxy_pass 改为 purple.com,结果成功了。据我所知,proxy_pass 无法理解来自 Web 代理的响应,而 wget 和 curl 等 CLI 命令则无法理解。