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'提供程序未在本地计算机上注册”的在线错误。

D7 多个多值字段未在视图中正确显示

当它引用 IE=edge,chrome=1 时,啥是 X-UA-Compatible?

由于此处不允许 AccessFileName,Apache 未在 XAMPP 上启动

Oracle Forms 10.1.2 在 EDGE/CHROME 中运行