我突然遇到了一个奇怪的问题,我很确定我已经排除了应用程序是罪魁祸首,但我本质上不是服务器管理员,所以我可能是错的。
- https://launchwestco.com
- 利诺德
- Ubuntu 14.04.4 LTS
- Nginx 1.10.1
- Laravel 5.2
从我的家里、办公室和其他网络,它加载得很好。在 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
缺少一行......而且我不知道这对这个特定问题是否重要。)
即使我插入像die('DEBUGGING');
应用程序前端控制器中的第一行这样的代码(应该运行的第一个执行的 PHP 行),错误仍然会发生,并且我无法获得应用程序预期的输出。
我很难排除故障。应用程序确实内置了重定向,但这些重定向似乎不是罪魁祸首,因为它们在大多数 ISP 上的表现都符合预期。只有 Verizon Mobile 才会出现此问题(无论如何我们都知道)。
有什么想法可能导致我们的问题吗?
答案1
您遇到的问题是,您的网站通过 IPv4 访问时可以正常运行,但通过 IPv6 访问时会返回太多重定向。
解决此问题:
你的 nginx 配置有错误应该导致其加载失败。
具体来说,您已ipv6only=off
在 IPv6listen
指令中指定,但listen
同时还指定了 IPv4 指令。对此的预期响应是 nginx 返回错误98 Address already in use
并退出(或拒绝重新加载配置)。如果 nginx 仍在运行,则很可能使用的是旧配置。
您应该首先ipv6only=off
从每个listen
指令中删除,因为它是多余的和不必要的。
然后,您应该将 IPv6 指令添加到缺少它们的块listen
中。server