Nginx

Nginx:無法通過 SSL 訪問非 www 站點(連接被拒絕)

  • March 15, 2017

我正在嘗試使用 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 響應,但響應只是空的。

已解決——這是一個因魔法而失敗的案例。

域名註冊商控制面板有一個 www/no-www 便利設置,它會導致重定向覆蓋 DNS 設置。

禁用便利設置(即選擇“無偏好”)使實際的 DNS 設置起作用。

引用自:https://serverfault.com/questions/838251