nginx 在端口 80 上请求时下载空文件(而不是重定向到端口 443)

nginx 在端口 80 上请求时下载空文件(而不是重定向到端口 443)

我的 nginx 网络服务器没有做它应该做的事情。所有对服务器的 http:// 请求都应使用 http 301 重定向到 https://,它在过去几天里运行良好,直到它停止工作而没有任何变化。

Nginx 返回一个类型为“application/octet-stream”的空文件,内容如下(在 sublime 中可读):

0000 1204 0000 0000 0000 0300 0000 8000
0400 0000 0000 0500 ffff ff00 0004 0800
0000 0000 7fff 0000 0000 0807 0000 0000
0000 0000 0000 0000 01

首先我尝试删除该行

default_type application/octet-stream;

来自我的 nginx.conf,但它没有帮助。

http-response 标头返回

Status: �����

我的服务器块从 http:// 到 https:// 的 301 重定向如下所示

server {
   listen 80;
   listen [::]:80;
   server_name my.tld www.my.tld;
   return 301 https://$server_name$request_uri;
}

当 Nginx 收到 http:// 请求时,它不会记录任何内容。(/var/log/nginx/error.log | /var/log/nginx.access.log)。还有 PHP7.0-fpm。

所需的一切都已安装、更新和升级。重新启动服务和服务器本身没有帮助。

以下是 curl -v 的输出http://my.tld/

* Connected to my.tld (123.123.123.123) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: my.tld
> Accept: */*
> 
< HTTP/1.1 200 OK
< Mime-Version: 1.0
< Date: Thu, 06 Oct 2016 06:10:53 GMT
< X-Transformed-From: HTTP/0.9
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
* Connection #0 to host my.tld left intact

为什么 nginx 应该返回 301 永久重定向却返回 200 OK?

我没有改变任何东西,它使用相同的配置工作...我希望有人可以帮助我:-(。可能是 DNS 问题吗?

最好的,Unkn0wn0x

答案1

我已经解决了这个问题。这是一个来自子域的配置文件,该子域配置了自己的根目录。来自子域的配置文件有

listen 80 http2;
listen [::]:80 http2

这影响了整个 Web 服务器,没有任何错误/日志文件或类似内容(nginx -t 也是正面的)。在我重新安装 nginx 并逐步备份配置文件后,我发现了错误。

感谢您的支持。

最好的,Unkn0wn0x

答案2

添加这个只是因为这是谷歌搜索相关主题时显示的唯一页面之一。

我遇到了同样的问题,最后发现解决方案与您概述的相同。

显然,http2使用listen 80(no ssl) 进行指定并不好。而且这更令人困惑,因为这会避开所有 nginx 配置检查。

答案3

X-Transformed-From头看起来很可疑。使用命令检查netstat -lnpnginx 是否确实在监听端口 80,或者是否有其他程序在监听该端口。

您的系统可能已遭入侵。在这种情况下,您需要从备份中恢复并更新系统,然后再将其上线。

答案4

我没有找到与X-Transformed-From标头相关的任何内容。我的 nginx 正在监听以下端口:

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10282/nginx -g daem tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 10282/nginx -g daem tcp6 0 0 :::443 :::* LISTEN 10282/nginx -g daem tcp6 0 0 :::80 :::* LISTEN 10282/nginx -g daem

如果我请求 https:// my.tld 然后是 http:// my.tld ,它运行起来非常顺畅。在移动设备上,如果我在隐身/私人标签中请求http://my.tld它会立即重定向到 https://。

我尝试了“HTTP 查找”工具http://mxtoolbox.com/使用我的域名时,它会返回一个错误:

HTTP connect The server committed a protocol violation. Section=ResponseStatusLine (http://my.tld)

我检查过是否有某些防火墙规则(ufw)或类似的东西阻止了端口 80 上的请求,但事实并非如此。

ufw 状态

80                         ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
443                        ALLOW       Anywhere
443 (v6)                   ALLOW       Anywhere (v6)

my.tld 上只有几个 html 文件,没有 php 或类似的文件。

mxtoolbox 错误提示无法连接到我的服务器 (http:// / 端口 80),但这是可以的。DNS 设置也很好。

我很茫然 :-(

问候,Unkn0wn0x

相关内容