nginx 不提供静态网站的 www 版本

nginx 不提供静态网站的 www 版本

我无法配置 nginx 来为我的网站的 www 版本提供服务(重定向?)。非 www 版本运行正常。我怀疑这是 DNS 问题,但我的经验不足,无法知道这一点。这是我的工作虚拟主机文件,可以正确为网站的非 www 版本提供服务。

server {
 listen 80;
 server_name  mysite.me;
 index index.html;
 root /opt/www/mysite.me/_site;

}

另外,当运行任何程序时,sudo commands我都会收到此错误

sudo:无法解析主机 www.mysite.com

我也尝试过添加这个块,但它对我来说也不起作用

server {
 listen 80;
 server_name  mysite.me;
 return 301 $scheme://www.mysite.me$request_uri;

}

答案1

来自文档:

server {
    listen       80;
    server_name  example.org;
    return       301 http://www.example.org$request_uri;
}

server {
    listen       80;
    server_name  www.example.org;
    ...
}

答案2

其他人有针对 Nginx 的答案,但就调试而言,我的建议是使用curl可以-I选择查看每个域的标头。正如文档curl-I解释的那样:

(HTTP)在输出中包含 HTTP 标头。HTTP 标头包括服务器名称、文档日期、HTTP 版本等内容...

例如,执行curl -Itogoogle.com将返回以下内容:

curl -I google.com

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Wed, 09 Apr 2014 00:45:23 GMT
Expires: Fri, 09 May 2014 00:45:23 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic

您可以从中获得两个关键信息,一个是HTTP/1.1响应代码,即301 Moved Permanently,另一个Location:是 与响应代码相连HTTP/1.1并将新位置 URL 设置为http://www.google.com/。现在,让我们curl -Iwww.google.com这样执行 :

curl -I www.google.com

HTTP/1.1 200 OK
Date: Wed, 09 Apr 2014 00:47:28 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=79631a82c2c7cf67:FF=0:TM=1397004448:LM=1397004448:S=z010eeEdNjG129tJ; expires=Fri, 08-Apr-2016 00:47:28 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=e9j_a0lvogCKF-Mt-OdZKlRoMwaGJXis7yA0i0l1zKuh2mz_P5MUCsyzvPVhz9yBY2Wi04XzY2tn8UlqaT2i-rvVHGIAb1l1FwXm4wxvLtNTmSvREavLD6qDLeDBar2r; expires=Thu, 09-Oct-2014 00:47:28 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic
Transfer-Encoding: chunked

请注意,HTTP/1.1响应代码是200 OK,这意味着 URL 良好并且将从此时开始加载。

curl -I mysite.me因此,在您的情况下,比较标题输出curl -I www.mysite.me,然后您就可以调试正在发生的事情。

答案3

dig mysite.com检查和的输出dig www.mysite.com。如果它们都没有返回服务器的 IP 地址,则说明 DNS 设置有误,需要A record为缺失的域创建适当的条目。

之后,您可以使用@Midimo 示例让服务器显示正确的页面。

答案4

我遇到了 DNS 问题。我向 CNAME 记录添加了一个 catchall 路由 ( * ),现在它正常工作了。这是我的服务器块。

server {
 listen 80;
 server_name www.mysite.me;
 root /opt/www/mysite.me/_site;
 return 301 $scheme://mysite.me$request_uri;
}
server {
 listen 80;
 server_name  mysite.me;

 root /opt/www/mysite.me/_site;

相关内容