我一直在到处寻找为什么我的 nginx 服务器在一个域上导致 301 重定向,而另一个域上没有。我在这个服务器上以 apache 样式 (sites-available) 配置了两个站点。假设 domain1.com 和 domain2.com。我也在运行 PHP-FPM。以下是配置
域名1.com
server {
listen 80; ## listen for ipv4; this line is default and implied
server_name domain1.com www.domain1.com;
root /var/www/domain1.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
Domain2.com
server {
listen 80; ## listen for ipv4; this line is default and implied
server_name domain2.com www.domain2.com;
root /home/mike/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
您会注意到,除了 server_name 和 root 之外,这些基本上完全相同。否则,它们是相同的。现在情况是这样的。domain1.com 运行良好,没有问题。当 domain2.com 的 DNS 未更改为服务器时,使用 listen 8000 对 domain2 的站点进行了一次测试。当将其作为 IP:8000 进行测试时,它运行良好,因此我将其更改为域,将端口更改为 80,并更改了 DNS。此后,服务器已完全关闭电源,nginx 和 php5-fpm 已重新启动大约 100 次。
如果我在浏览器中访问 domain2.com,它会自动重定向到 domain2.com:8000。如果我使用 web-sniffer.net 并查看 HTTP 标头,它会返回 301 重定向。我从未设置重定向,并且此服务器上的任何地方都没有设置 301。真正让我烦恼的是,如果我访问 www.domain2.com,当我将其从 server_name 下的 nginx 配置文件中删除后,我会看到默认的 nginx 页面,这意味着它运行良好。一旦我将 www.domain2.com 添加到配置中的 server_name 指令,就会再次启动 301 重定向。
我也在 nginx.conf 中的 http 部分下添加了 port_in_redirect off,但它似乎没有任何作用。
有人知道这里发生了什么吗?
编辑:curl-vhttp://domain2.com
* About to connect() to domain2.com port 80 (#0)
* Trying 162.243.XXX.XXX... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: domain2.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.1.19
< Date: Mon, 13 Jan 2014 17:37:07 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/5.3.10-1ubuntu3.9
< X-Pingback: http://162.243.XXX.XXX:8000/xmlrpc.php
< Location: http://domain2.com:8000/
<
* Connection #0 to host domain2.com left intact
* Closing connection #0
答案1
如果没有看到服务器的实际输出,猜测起来会有些困难,我建议使用curl -v http://example2.com/
来查看实际返回的内容,但我猜你的浏览器已经缓存了重定向。我以前见过这种情况。
使用不同的浏览器是否会显示相同的重定向?
更新:根据您的诊断输出,很明显这是由 Wordpress 发出重定向而不是引起的nginx
。