nginx ipv6 SSL 服务器块响应基本 http 端口 80 连接

nginx ipv6 SSL 服务器块响应基本 http 端口 80 连接

遇到了一个我以前从未见过的问题。

在我的 nginx 配置中,我为单个子域设置了一个服务器块,该子域仅在端口 443(ssl)上监听。

但是,当我使用端口 80 测试连接时,它仍然有响应。现在非常令人困惑。

例如,curl http://blog.omgtrolls.com不应该能够连接,但它确实连接了,并且输出了站点 html 等。以详细模式运行curl -v显示它确实正在完成 80 上的连接。

curl -v http://blog.omgtrolls.com
*   Trying 2607:f8b0:4005:814::200e...
* Connected to blog.omgtrolls.com (2607:f8b0:4005:814::200e) port 80 (#0)
> GET / HTTP/1.1
> Host: blog.omgtrolls.com
> User-Agent: curl/7.79.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx
< Date: Fri, 28 Apr 2023 01:02:17 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET
< Strict-Transport-Security: max-age=31536000;
< 
* Connection #0 to host blog.omgtrolls.com left intact
<html>blah blah</html>

curl https://blog.omgtrolls.com当然可以按预期工作。

这是我的设置的简化版本:

我最近_default.nginx在标准设置中添加了一个新配置。(我有一个配置存储库,部署到几个不同的服务器。_default.nginx部署到所有服务器。此配置旨在防止指向同一服务器 IP 的域名被其他托管站点提供服务。

我想也许这可能与这个新问题有关。

# _default.nginx
# default server config to prevent undefined domains from returning responses.
server {
  listen 80 default_server;
  server_name _;
  return 404;
}

接下来,我为有问题的子域准备了一个不同的 nginx 配置文件。以下是简单版本(更改了域名以保护无辜者):

# omgtrolls.nginx
upstream nodejs_upstream{
  server 127.0.0.1:3000;
}

server {
  server_name blog.omgtrolls.com;

  listen [::]:443 ssl;

  root /usr/local/apps/omgtrolls/;

  add_header Strict-Transport-Security "max-age=31536000;" always;

  # required for LetsEncrypt
  location ~ /.well-known {
    allow all;
  }

  ssl_certificate /etc/letsencrypt/live/omgtrolls.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/omgtrolls.com/privkey.pem;

  location / {
    proxy_redirect off;
    proxy_set_header Connection "";
    proxy_http_version 1.1;
    proxy_cache off;
    proxy_cache_key sfs$request_uri$scheme;
    proxy_pass http://nodejs_upstream;
  }
}

请注意我有一个服务器块来捕获端口 80 请求并将其升级到 443。一旦我注意到此问题,我就专门禁用了该位。

什么应该发生的情况是,我只能通过 https/443 进行连接,否则连接将失败。

我的设置有什么问题_default.nginx导致了这种情况吗?

相关内容