Nginx:无法通过 SSL 访问非 www 网站(连接被拒绝)

Nginx:无法通过 SSL 访问非 www 网站(连接被拒绝)

我正在尝试使用 Ubuntu 14.04 上的 nginx 来获取通过 SSL 保护的站点。

以下是我的服务器块文件的样子:

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

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;


    root /var/www/html;

    index index.php;

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

    location = /robots.txt { log_not_found off; access_log off; allow all; }

    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }

    location / {
        #try_files $uri $uri/ =404;
        #index index.php index.html index.htm index.nginx-debian.html;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~ /.well-known {
        allow all;
    }
}

第三个块是“主”块,它使用 https 为 www url 提供服务(工作正常)。第一个块将所有 http 和非 www 请求重定向到第三个块(工作正常)。

第二个块不起作用。我在这里试图实现的是将所有 https 和非 www 请求定向到第三个块,但尝试以这种方式访问​​该网站会产生“example.com 拒绝连接”的结果(与 Chrome 所称的 ERR_CONNECTION_REFUSED 不同,因为请求的“网络”选项卡中没有显示任何错误,它只是一个空请求)。

我尝试了很多方法,但仍然不知道为什么会出现这种情况。

附加信息:访问块 2 url(不带 www 的 https)时,nginx 访问日志显示 200/OK 响应,但响应为空。

答案1

解决——这是一次因魔法而失败的案例。

域名注册商控制面板有一个 www/no-www 便利设置,它会导致重定向覆盖 DNS 设置。

禁用便利设置(即选择“无首选项”)可使实际 DNS 设置正常工作。

相关内容