是啥导致了这个 301 重定向? [关闭]

Posted

技术标签:

【中文标题】是啥导致了这个 301 重定向? [关闭]【英文标题】:What is causing this 301 redirect? [closed]是什么导致了这个 301 重定向? [关闭] 【发布时间】:2012-02-27 06:42:20 【问题描述】:

我的服务器重定向 http://www.mylesgray.com:8080/ -> http://www.mylesgray.com/ 时遇到问题。

这是我的 nginx defaultfastcgi_params 配置文件:

https://gist.github.com/1745271

https://gist.github.com/1745313

这很麻烦,因为我正在尝试运行 Nginx w/cachingVarnish w/caching on Nginx 的基准测试,看看是否有任何一种优于另一种的性能优势。

因此,我在端口8080 上有直接的 Nginx 带缓存侦听和在端口 80 上的清漆,它将任何非缓存请求转发到 localhost:8080 上的 Nginx,所以显然我想要做的是运行一个 @在http://www.mylesgray.com:8080/http://www.mylesgray.com/ 上进行987654330@ 基准测试以查看差异。

这是curl -I 在各个地址上的结果。

# curl -I http://www.mylesgray.com:8080

HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.65
Date: Sun, 05 Feb 2012 12:07:34 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: php/5.3.2-1ubuntu4.7ppa5~lucid1
X-Pingback: http://www.mylesgray.com/xmlrpc.php
Location: http://www.mylesgray.com/

# curl -I http://mylesgray.com

HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.65
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/5.3.2-1ubuntu4.7ppa5~lucid1
X-Pingback: http://www.mylesgray.com/xmlrpc.php
Location: http://www.mylesgray.com/
Content-Length: 0
Date: Sun, 05 Feb 2012 12:15:51 GMT
X-Varnish: 1419774165 1419774163
Age: 15
Via: 1.1 varnish
Connection: keep-alive

# curl -I http://mylesgray.com:8080

HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.65
Date: Sun, 05 Feb 2012 12:16:08 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.3.2-1ubuntu4.7ppa5~lucid1
X-Pingback: http://www.mylesgray.com/xmlrpc.php
Location: http://www.mylesgray.com/

然后运行curl -I http://www.mylesgray.com 给出:

# curl -I http://www.mylesgray.com

HTTP/1.1 200 OK
Server: nginx/0.7.65
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/5.3.2-1ubuntu4.7ppa5~lucid1
X-Pingback: http://www.mylesgray.com/xmlrpc.php
Content-Length: 5132
Date: Sun, 05 Feb 2012 12:07:29 GMT
X-Varnish: 1419774133 1419774124
Age: 30
Via: 1.1 varnish
Connection: keep-alive

如您所见,80 由 Varnish 提供服务,8080 由 Nginx 提供服务,但我在 anywhere 找不到任何执行 301 重定向的内容,而不是在 nginx.conf 或 @987654340 中@ 文件,我不相信它是由 Wordpress 本身引起的,但非常容易纠正。

请帮忙,这让我发疯了!

迈尔斯

【问题讨论】:

【参考方案1】:

您应该在 URL 的末尾添加一个“/”。此外,如果您运行 ab http://foo.com,它将返回“ab: invalid URL”错误。如果你执行“ab -t 10 http://example.com/”,一切都会正常。您应该始终在您的 URL 中使用“/”,否则您的网络服务器会尝试自动将页面重定向到主页,这会在服务器上产生不必要的额外负载,并在网络上产生一些额外的字节。

你的网络服务器告诉你它做了什么:

'/' 丢失,端口号有问题

# curl -I http://www.mylesgray.com:8080
HTTP/1.1 301 Moved Permanently
[...]
======> Location: http://www.mylesgray.com/

缺少“www”和“/”

# curl -I http://mylesgray.com
HTTP/1.1 301 Moved Permanently
[...]
=======> Location: http://www.mylesgray.com/
[...]

'/' 和 'www' 不见了

# curl -I http://mylesgray.com:8080
HTTP/1.1 301 Moved Permanently
[...]
========> Location: http://www.mylesgray.com/

'希望有帮助:)

【讨论】:

【参考方案2】:

X-Powered-By: PHP 标头的存在意味着 wordpress 正在发出 301。这是由于 wordpress 强制 www.mylesgray.com 造成的。当您使用非标准端口时,用户代理通常会在 Host: 标头中包含该端口。尝试添加

fastcgi_param HTTP_HOST $host;

与您的其余 fastcgi_param 指令(或与您的“包含 fastcgi_params;”一起),它应该可以解决这个问题。

【讨论】:

我已将此添加到我的 /etc/nginx/fastcgi_params 并重新启动所有服务,但 curl 仍显示除 http://www.mylesgray.com 之外的所有服务的 301。 这是我的default 站点配置文件和我的fastcgi_params 文件:gist.github.com/1745271 和gist.github.com/1745313 你运行的是哪个版本的 nginx?似乎直到 0.8.40 才添加使用 fastcgi_param 覆盖请求标头。 啊......可能是这样 - 我正在运行 10.04 附带的任何内容,我将使用 1.0.11 重新安装,看看情况如何...... 你就是男人!非常棒 - 现在完美运行!

以上是关于是啥导致了这个 301 重定向? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 301 重定向会导致重定向到错误的 url?

301重定向:为啥连接关闭?

在 CakePHP 中 301 重定向页面的最佳方法是啥?

在 asp.net 中更推荐的 301 重定向方式是啥?

如果没有斜杠,Nginx 会导致 301 重定向

301将index.html重定向到/或/index.php