52 错误:www 未在 Edge/Chrome/Mobile 中重定向:`ERR_EMPTY_RESPONSE`
Posted
技术标签:
【中文标题】52 错误:www 未在 Edge/Chrome/Mobile 中重定向:`ERR_EMPTY_RESPONSE`【英文标题】:52 error: www not redirecting in Edge/Chrome/Mobile: `ERR_EMPTY_RESPONSE` 【发布时间】:2020-06-08 19:20:39 【问题描述】:更新:确定罪魁祸首:
从第 4 行到最后一行,ssl
应该被删除。不知道为什么。如果有人可以解释原因,请添加您的答案。谢谢!
目标系统信息:
我使用的是 Debian 10 Buster,使用的是 nginx 1.42、certbot latest-stable 和 php 7.3。 有两个域名服务于同一个IP地址和端口;所以,example.com 和 example1.com(example.com.conf 如下所示)。 一切都是原始的,开箱即用:nginx.conf 未更改,php的配置文件未更改。 除了 LEMP 和 Certbot,什么都没有安装。不良行为:
Chrome:将http://example.com 重定向到https://example.com(好);和http://www.example.com 和https://www.example.com 返回"ERR_EMPTY_RESPONSE"
。
Pale Moon(如 Firefox):将 http://www、https://www 和 http:// 正确重定向到 https://example.com;全部正确完成(通常)。
Edge:正确重定向https://www.example.com;其他一切都返回Hmmm...can’t reach this page
。
卷曲(最重要):
WolfPack'08@NV89501:/# curl www.example.com curl: (52) Empty reply from server WolfPack'08@NV89501:/# curl http://example.com curl: (52) Empty reply from server WolfPack'08@NV89501:/# curl http://www.example.com curl: (52) Empty reply from server WolfPack'08@NV89501:/# curl https://www.example.com WolfPack'08@NV89501:/# curl https://example.com <!DOCTYPE html>
最佳尝试,特定于站点的配置:见评论 (###):
server
set $base /var/www/example.com;
root $base/public;
access_log /var/log/nginx/example.com/access.log;
error_log /var/log/nginx/example.com/error.log;
index index.php;
server_name www.example.com example.com;
location /
try_files $uri $uri/ /index.php?$args;
location ~ \.php$
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.example.com example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
### SECTION INTENDED TO HANDLE WWW-to-NON_WWW REDIRECTS: ###
server
if ($host = www.example.com)
return 301 https://$host$request_uri;
if ($host = example.com)
return 301 https://$host$request_uri;
listen [::]:80;
listen 80 ssl; ### REMOVE SSL HERE TO FIX. ###
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
我尝试过的其他东西:
将 301 放在其他位置(如顶部,索引 index.php; 下)。 使用 302 而不是 301。 正在删除listen 80 ssl;
。
使用 return 301 https://$host$request_uri;
而不是 example.com。
从已启用的站点中删除所有其他符号链接。
当然,我每次都重新启动 nginx,并且我没有收到任何错误。
【问题讨论】:
【参考方案1】:尝试以下配置,它基本上将 HTTP 流量重定向到已定义域的 HTTPS,并仅处理 www.example.com example.com 的 https;
server
listen 80 default_server;
server_name _;
return 301 https://example.com$request_uri;
server
listen 80;
server_name www.example.com
return 301 https://$host$request_uri;
server
listen 80;
server_name example.com
return 301 https://$host$request_uri;
server
listen 443 ssl http2 default_server;
server_name www.example.com example.com;
set $base /var/www/example.com;
root $base/public;
access_log /var/log/nginx/example.com/access.log;
error_log /var/log/nginx/example.com/error.log;
index index.php;
server_name www.example.com example.com;
location /
try_files $uri $uri/ /index.php?$args;
location ~ \.php$
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
您必须在添加上述配置后重新加载 Nginx 配置并在 chrome 和 firefox 的私有窗口中进行测试(最好使用此 curl 命令curl --head http://zzz
进行测试)
【讨论】:
这个配置不起作用,也没有解释。话虽如此,我很感激你的努力。 我不能对你。老实说,在我弄清楚如何解决它之后,我不得不放弃它。我会在月底之前回来,让你知道问题是什么,并让你的答案排队等待接受。以上是关于52 错误:www 未在 Edge/Chrome/Mobile 中重定向:`ERR_EMPTY_RESPONSE`的主要内容,如果未能解决你的问题,请参考以下文章
HTMLMeta中添加X-UA-Compatible和IE=Edge,chrome=1有啥作用
“'Microsoft.ACE.oledb.12.0'提供程序未在本地计算机上注册”的在线错误。
当它引用 IE=edge,chrome=1 时,啥是 X-UA-Compatible?