NGINX SSL 连接超时

NGINX SSL 连接超时

我正在尝试在我们拥有的一些 ARM 机器上运行 Web 服务器软件。使用 HTTP 时,我能够让 NGINX 完全按预期工作,但当我尝试切换配置以使用 HTTPS 时,连接超时。

ARM 盒子使用的是 Linux 2.6(我知道……)并且没有太多内存,因此如果有资源需求,使用 SSL 完全是不可行的。

以下是 /etc/nginx/sites-available/mysite 的相关部分(符号链接到 sites-enabled/mysite):

server {
    #listen *:443 ssl default_server;
    listen *:80 default_server;

    server_name <box IP address>;

    root /var/www/myserver;

    proxy_buffering off;

    #ssl on;

    #ssl_session_cache shared:SSL:10m;

    #ssl_protocols TLSv1.2;
    #ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    #ssl_prefer_server_ciphers on;

    #ssl_certificate /etc/nginx/ssl/myserver.crt;
    #ssl_certificate_key /etc/nginx/ssl/myserver.key;

    location /htdocs {
            autoindex on;
            try_files $uri $uri/ =404;
    }
}

/etc/nginx/nginx.conf 大多具有默认值:

user  www-data;
worker_processes  auto;

error_log  /var/log/nginx/error.log debug;

pid        /run/nginx/nginx.pid;

events {
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    include /etc/nginx/sites-enabled/*;
}

使用上述配置后,我能够通过 IP 地址访问该框,并且它正确地提供 /var/www/myserver/htdocs/ 中的文档。但是,当我取消注释 sites-available/mysite 中的每一行注释并注释掉该listen *:80 default_server行时,所有 HTTPS 连接尝试都会超时。错误和访问日志中没有超时连接的条目。我目前使用的是自签名证书,但我认为这没什么区别。来自另一台主机的 wget 和 curl 请求也会超时。

没有活动的防火墙,因此端口 443 没有被阻止。我可以看到 NGINX 绑定到 ARM 盒上的端口 443。我还可以在 netstat 中看到从我的计算机到盒上的端口 443 的连接尝试已建立。

我使用的是从源代码构建的 NGINX 1.12.2。这些是配置参数:

--prefix=/usr --conf-path=/etc/nginx/nginx.conf --pid-path=/run/nginx/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11 --with-http_ssl_module --with-stream --user=www-data --group=www-data --with-http_v2_module

ARM 盒已安装 OpenSSL 1.0.2l,也是我从源代码构建的。

是否有明显的罪魁祸首导致 NGINX 在 SSL 连接上超时?如果不明显,我可以采取哪些步骤来调试连接?

更新:

当我手动运行 NGINX 时(添加daemon off;到配置后),我得到了一些奇怪的行为,这可能是一个提示。这些是我遵循的步骤:

  1. 在 ARM 机器上启动 NGINX ( sudo nginx)
  2. 在另一台机器上使用 Curl 尝试发出请求(curl -v -k https://<box IP>/htdocs/css/main.css
  3. 在 ARM 框上按 Ctrl+C 终止 NGINX

在步骤 2 中,curl 等待响应,但什么也没发生。然后,在步骤 3 中,curl 输出请求的文件。就好像 Nginx 的响应正在缓冲,并且直到 NGINX 进程结束时才会刷新该缓冲区。这也表明 NGINX 正在完成 SSL 握手,但它只是没有发送响应。

相关内容