我有一个域,其中有一个通配符 A 记录到 IP(61.61.61.61)(不受我的控制)。
因为我想控制域中的某些页面,所以我认为通过 nginx 代理所有数据很容易。但看起来这不是相同的行为。相反,当我尝试加载之前正确显示的站点主索引时,它现在将我重定向到另一个站点。
我认为这是因为 nginx 没有代理所有数据或没有转发某些标头。
我这样配置了 nginx
server {
server_name test.com;
root /var/www/test.com/;
index index.html index.htm index.php;
merge_slashes on;
location /landers {
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
}
location / {
proxy_pass http://61.61.61.61:80;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
# edit below to fix config display
fastcgi_param SCRIPT_FILENAME /var/www/test.com$fastcgi_script_name;
}
}
第三方服务器无法识别该请求,这可能是它将我重定向到该服务器上的另一个站点的原因。
[编辑]
更清楚一点。我希望 URL /landers 托管在我的计算机上。这就是为什么我在 nginx 中为此设置了不同的位置。
对 test.com 的其余请求应该发送到正确的 IP 地址(并由第三方服务器处理)。
当我将 IP 地址作为 A 记录时,一切都运行正常。但现在 nginx 代理请求,我得到了 301 重定向(来自 IP 为 61.61.61.61 的服务器)。
通常情况下,我不应该得到 301 返回,而应该得到代理页面。这就是为什么我猜测对 61.61.61.61 服务器的请求与直接访问(使用 A 记录而不是代理到该服务器)有些不同。这让我认为代理 HTTP 请求与非代理版本有些不同,因此 61.61.61.61 服务器无法匹配其服务器上的正确虚拟主机。
希望这能让事情更清楚一点。