前言
在之前的文章博客服务器迁移过程中介绍了footprint
打造旅行地图,然后使用Nginx反向代理,将ff.cn/travel
指向127.0.0.1:886
,原本访问一切正常,但是昨天碰到了一个新的问题:css/js/png等文件请求301重定向过多,花了蛮久才解决问题,所以记下来提醒自己。
复现
在网站/travel/
目录下创建hello.js
文件,请求ff.cn/travel/hello.js
,显示ff.cn 将您重定向的次数过多
。
在开发者模式下查看网络请求,发现服务器将ff.cn/travel/hello.js
重定向给自身,导致出现死循环。
解决
- 清除cookie (无效)
当相应网页尝试对您进行重定向的次数过多时,您就会看到这条错误消息。
有时,网页打不开是因为 Cookie 出问题了。要修正该错误,请尝试清除 Cookie。
- 刷新DNS/更换DNS (无效)
重定向过多可能发生了DNS劫持,可以刷新DNS或者换一个DNS地址。
- SSL证书问题 (无效)
如果开启了强制访问HTTPS或者SSL证书更换,可能导致前后端接口不一致,陷入反复跳转,造成重定向过多,可以重置SSL证书或者重启强制访问HTTPS。
分析
查看Nginx日志,发现浏览器发出请求ff.cn/travel/hello.js
时,本应该转给127.0.0.1:886/hello.js
,然而日志中显示回应请求的链接是127.0.0.1:80/travel/hello.js
,怀疑是代理设置出现问题。
查看ff.cn
的配置文件如下:
configuration1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| server { listen 80; listen 443 ssl http2; server_name ff.cn; index index.php index.html index.htm default.php default.htm default.html; root /ff.cn; if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; }
location ~ /purge(/.*) { proxy_cache_purge cache_one $host$1$is_args$args; } include /www/server/panel/vhost/nginx/proxy/ff.cn/*.conf;
include enable-php-00.conf; include /www/server/panel/vhost/rewrite/ff.cn.conf; location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } location ~ \.well-known{ allow all; } access_log /www/wwwlogs/ff.cn.log; error_log /www/wwwlogs/ff.cn.error.log; }
|
configuration1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| location ~* \.(php|jsp|js|css|png|cgi|asp|aspx)$ { proxy_pass http://127.0.0.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; } location /travel/ { proxy_pass http://127.0.0.1:886/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; add_header Cache-Control no-cache; }
|
可以发现,问题出现在了代理配置中的location ~* \.(php|jsp|js|css|png|cgi|asp|aspx)$
这一块。当接受到ff.cn/travel/hello.js
请求时,根据代理配置进行转发,js/css/png等文件匹配上了第一条规则,于是请求被发往127.0.0.1:80/travel/hello.js
,也就刚好是ff.cn/travel/hello.js
自身,造成了死循环。将这一片段或者js|css|png
删除即可解决
后记
宝塔确实有点诡异,上一秒还好好访问的,结果突然就重定向了。以后碰到问题多看日志,更容易发现问题所在的地方。