如何将非 www 重定向到具有多个站点的 www? (Nginx 和清漆)

How to Redirect a non-www to www with Mutiple Sites? (Nginx and Varnish)

首先我想澄清一下,我搜索了很多关于这个问题,但我还没有找到解决方案。

我在同一个 Nginx(端口 8080)和 Varnish(端口 80)下配置了 2 个 Wordpress 站点。

这是我的实际设置:

map $http_host $blogid {
 default 0;
 www.site1.com 1;
 www.site2.com 2;
}
server {
 listen 8080;
 server_name www.site1.com site1.com;
 root /var/www/site1.com;
 ...
}
server {
 listen 8080;
 server_name www.site2.com site2.com;
 root /var/www/site2.com;
 ...
}

我想做的是为 site2 配置从非 www 到 www 的重定向。示例:http://site2.com -> http://www.site2.com

我添加了另一个带有重定向的'server'配置,只让'www.site2.com'在其他 'server_name'.

map $http_host $blogid {
 default 0;
 www.site1.com 1;
 www.site2.com 2;
}
server {
 server_name www.site1.com site1.com;
 root /var/www/site1.com;
 ...
}
server {
    listen 8080;
    server_name site2.com;
    return 301 http://www.site2.com$request_uri;
}
server {
 server_name www.site2.com;
 root /var/www/site2.com;
 ...
}

修改上面的配置并重启Nginx后,访问“http://site2.com" (without www) it is loading the content from "http://site1.com" (url continues site2.com without www). Acessing "http://www.site2.com”显示正确的内容。

我做错了什么?

我认为重定向不起作用,因为我试图重定向到 Google.com,但它没有重定向。它一直在 "site2.com".

中加载 "site1.com" 内容
return 301 http://www.google.com

我在下面尝试了这段代码,但结果相同:

rewrite ^(.*) http://www.site2.com permanent;

我的完整 Nginx 配置http://codepad.org/TfPHS0jH

您的网站不是由 Nginx 提供服务,而是由 Varnish 提供服务。

当您导航到 http://www.siteX.com or http://siteX.com, you are going to http://www.siteX.com:80 or http://siteX.com:80 中的任何一个时,根据您的解释,Varnish 会侦听端口 80,而不是 Nginx。

没有真正的理由必须将两者一起使用(尽管您可能已经在某些网站上阅读过),您应该摆脱其中一个或另一个,并专注于您决定保留的那个。

经过很长时间,这是我的解决方案:

http://www.softprayog.in/troubleshooting/how-to-redirect-non-www-urls-to-www-in-varnish