我正在使用 Nginx 为在端口 3000 上运行的 nodejs 提供代理请求。这是我的配置:
server {
listen 80;
server_name example.com;
root /home/example/app;
access_log /home/example/access.log;
error_log /home/example/error.log;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
当我在浏览器中访问该网站时,我可以看到服务器的初始响应是一个框架集,然后加载页面。所有这些对于用户来说都是不可察觉的,直到您将鼠标悬停在链接上并看到 IP 地址而不是实际 URL。这是初始响应(其中 1.1.1.1 是我的服务器的实际 IP 地址):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>My cool site</title>
</head>
<frameset rows="100%,*" border="0">
<frame src="http://1.1.1.1" frameborder="0" />
<frame frameborder="0" noresize />
</frameset>
<!-- pageok -->
<!-- 06 -->
<!-- -->
</html>
下一个请求是针对实际内容的。我通过使用在端口 3000 上运行的 php 内置服务器启动一个简单的 php 脚本,从而将 node js 从方程式中剔除。我遇到了同样的问题。
我正在运行 nginx/1.4.6(Ubuntu)。
答案1
问题不在于服务器。而是设置了 DNS 屏蔽的域名。我通过 dig 检查了实际域名指向的位置,发现它没有指向我的服务器。它指向的是 GoDaddy 服务器,该服务器提供内联框架,进而加载实际页面。我要求客户删除域名屏蔽,现在一切正常。