1

我刚刚将一个站点转移到了 Forge 提供的 DO 服务器。我安装了 SSL 证书并注意到导航到https://www.example.com会导致服务器未找到错误,而http://example.com返回 200。我试图在 Nginx 配置文件中强制使用非 WWW但似乎无法使任何工作。每次尝试后我也重新启动了 Nginx。

这是我当前的 Nginx 配置文件:

server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}

server {
listen 443 ssl;
server_name .example.com;
root /home/forge/default/current/public;

# FORGE SSL (DO NOT REMOVE!)
ssl_certificate /etc/nginx/ssl/default/56210/server.crt;
ssl_certificate_key /etc/nginx/ssl/default/56210/server.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

index index.html index.htm index.php;

charset utf-8;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

access_log off;
error_log  /var/log/nginx/default-error.log error;

error_page 404 /index.php;

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}
}

服务器设置为默认站点 - default,而不是 example.com。在将站点投入生产并安装 SSL 证书后,我意识到了这一点,我试图通过事后更改它来避免任何停机时间。我不确定被称为默认站点的站点在这里是否有任何不同,但这是要注意的关键。

因此,https:// 或http://example.com可以正常工作。www.example.com 在我测试过的所有浏览器上都返回服务器未找到错误。我还注意到 /etc/nginx/sites-enabled 中有一个 www.default 文件,我尝试将其更改为以下内容并重新启动 nginx:

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

无论如何,仍然收到未找到服务器。这是 Chrome 上的错误:

找不到 www.example.com 的服务器,因为 DNS 查找失败。DNS 是将网站名称转换为其 Internet 地址的网络服务。此错误最常见的原因是没有连接到 Internet 或网络配置错误。它也可能是由无响应的 DNS 服务器或阻止 Google Chrome 访问网络的防火墙引起的。

4

1 回答 1

0

好吧,显然我只是需要休息一下。吃完午饭后,我突然想到 Chrome 一直在给我答案——这是一个 DNS 问题。我在 Digital Ocean 上为 www 添加了一条指向我的 IP 地址的 A 记录,问题解决了。

我相信 Laravel Forge 提供的 DO 服务器上默认缺少 www。

于 2016-02-24T21:24:56.197 回答