Ubuntu

無法連接到某些 ISP 上的網站(重定向過多)

  • September 23, 2016

我突然遇到了一個奇怪的問題,我很確定我已經將應用程序作為罪魁禍首消除了,但我本質上不是伺服器管理員,所以我可能是錯的。

從我的家、辦公室和其他網路可以正常載入。在 Verizon 上,它沒有載入,給出了太多重定向的錯誤。在我的手機或連接到手機的筆記型電腦上傳入時確實如此。

這個問題似乎是昨晚出現的,或者至少是我們注意到它的時候。

我懷疑它在伺服器配置中,但我的 Nginx 配置似乎是正確的:

server {
   listen 80;
   listen [::]:80 ipv6only=off;

   server_name launchwestco.com *.launchwestco.com;
   rewrite ^ https://$host$request_uri? permanent;
}

server {
   listen 443 ssl;
   listen [::]:443 ssl ipv6only=off;

   server_name launchwestco.com *.launchwestco.com;
   root /home/forge/envoyer/com.launchwestco/current/public;
   client_max_body_size 55M;
   underscores_in_headers on;

   # FORGE SSL (DO NOT REMOVE!)
   ssl_certificate [...]/server.crt;
   ssl_certificate_key [...]/server.key;

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

   index index.html index.htm index.php;

   charset utf-8;

   location ~* /auth/(.+) {
       return 301 /authentication/$1;
   }

   # FORGE CONFIG (DOT NOT REMOVE!)
   include forge-conf/launchwestco.com/server/*;

   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/launchwestco.com-error.log error;

   error_page 404 /index.php;

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

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

upstream discourse { server 127.0.0.1:85; }
server {
   listen 443 ssl;
   server_name community.launchwestco.com;
   return 301 http://community.launchwestco.com$request_uri;
}

server {
 listen 80;
 server_name community.launchwestco.com;

   # FORGE CONFIG (DOT NOT REMOVE!)
   include forge-conf/launchwestco.com/server/*;

 location / {
   access_log off;
   proxy_pass http://discourse;
 }
}

netstat -tlp顯示以下內容(截斷為僅 http/s 輸出):

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:http                  *:*                     LISTEN      4880/nginx -g daemo
tcp        0      0 *:https                 *:*                     LISTEN      4880/nginx -g daemo
tcp6       0      0 [::]:https              [::]:*                  LISTEN      4880/nginx -g daemo

(我不確定為什麼[::]:http缺少一行 for ……而且我不知道這對這個特定問題是否重要。)

即使我die('DEBUGGING');在應用程序的前端控制器中插入像第一行這樣的程式碼(應該執行的 PHP 的第一行),錯誤仍然會發生,並且我沒有從應用程序中獲得預期的輸出。

我遇到了最困難的故障排除時間。應用程序中肯定內置了重定向,但這些似乎並不是罪魁禍首,因為它們在大多數 ISP 上的行為都符合預期。僅在 Verizon Mobile 上才會出現問題(無論如何我們都知道)。

任何想法可能導致我們的問題?

您遇到的問題是您的網站在通過 IPv4 訪問時可以工作,但在通過 IPv6 訪問時返回太多重定向。

要解決它:

您的 nginx 配置有錯誤,應該會導致它無法載入。

特別是,您已ipv6only=off在 IPv6listen指令中指定,但同時也指定了 IPv4listen指令。對此的預期響應是 nginx 返回錯誤98 Address already in use並退出(或拒絕重新載入配置)。如果 nginx 仍在執行,則可能是舊配置。

您應該首先ipv6only=off從每個listen指令中刪除,因為它是多餘且不必要的。

然後,您應該將 IPv6listen指令添加到server缺少它們的塊中。

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