【问题标题】:I installed an SSL certificate in nginx but writing the url in the browser tells me: ERR_CONNECTION_REFUSED我在 nginx 中安装了 SSL 证书,但在浏览器中写入 url 告诉我:ERR_CONNECTION_REFUSED
【发布时间】:2019-07-15 05:13:18
【问题描述】:

我有一个侦听端口 3000 的 Node js 应用程序。我安装了 nginx 并对其进行了配置,以便它使用以下行将数据从端口 80 重定向到 3000:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

我还有一个分配的域名:okium.fun。最后我买了一个 SSL 证书并配置了文件/etc/nginx/sites-aviable/default 来尝试让它工作。我的默认文件如下所示:

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  listen 443 ssl;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;

  server_name  okium.fun;

  ssl_certificate /root/okium.fun.chained.crt;
  ssl_certificate_key /root/okium.fun.key;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

  location / {
    try_files $uri $uri/ =404;
  }
}

在浏览器中写入http://okium.funhttp://www.okium.fun 时,应用程序显示正确,但在输入https://okium.funhttps://www.okium.fun 时,我收到以下消息“okium.fun 页面已拒绝连接。ERR_CONNECTION_REFUSED”。

对可能发生的事情有什么想法吗?

【问题讨论】:

    标签: javascript node.js ssl nginx ubuntu-18.04


    【解决方案1】:

    你知道 https 是 443 端口,但你设置了 listen 433 ssl;..

    433 不是 443 .. 只是一个错字

    【讨论】:

    • 感谢您的回答,我刚刚更正了它,但我得到了同样的错误
    • [root@ns397628 ~]# telnet okium.fun 443 Trying 134.209.14.125... telnet:连接到地址 134.209.14.125:连接被拒绝 telnet:无法连接到远程主机 [root@ns397628 ~]#
    • 请重启 nginx .. 否则是防火墙问题
    • 抱歉更像不是 nginx 问题,因为您将目标端口 80 转发到您的应用程序,因此您也必须为 443 执行此操作或执行 nginx 代理传递。如果不是 nginx fastcgi pass,那么在 3000 上运行的 node.js 应用程序能否提供 SSL: location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:3000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;包括 fastcgi_params; }
    【解决方案2】:

    在默认文件中写入端口号有一个错字。

    我认为在 ssl cert 的配置中端口应该是443 而不是433

    【讨论】:

    • 感谢您的回答,我刚刚更正了它,但我得到了同样的错误...
    • 之后你需要通过“sudo service nginx restart”重启你的nginx机器
    【解决方案3】:

    一些建议:

    1) 移除 iptables 重定向,您可能希望 nginx 处理重定向,而不是 iptables。

    -D 标志将撤消 iptables 规则:

    sudo iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
    

    2) 检查您的 iptables 配置,尤其是Chain INPUT 部分,它应该允许传入连接到 443 端口。

    以下是启用它的方法:iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

    3) 确保 nginx 已启动并正在运行 systemctl status nginx。看起来您与端口 80 的连接以前由 iptables 直接重定向到您的 node.js 应用程序。

    4) 确保 nginx 读取您的配置。 查看 nginx 配置文件 (less /etc/nginx/nginx.conf),很可能会有这样的行:

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    

    如果是这种情况,默认情况下不会读取文件夹 sites-aviable,您需要创建指向自定义配置文件的符号链接:

    sudo ln -s /etc/nginx/sites-aviable/default /etc/nginx/sites-enabled/default
    

    5) 更新您的 /etc/nginx/sites-aviable/default 配置以包含 proxy_pass 规则:

    server {
        server_name okium.fun;
    
        listen 80;
        listen [::]:80;
        listen 443 ssl;
        listen [::]:443 ssl;
    
        # your ssl configuration here
        # ...
    
        location / {
            proxy_pass http://127.0.0.1:3000;
        }
    }
    

    6) 测试您的 nginx 配置:sudo nginx -t。 如果一切正常,您将看到如下消息:

    the configuration file /etc/nginx/nginx.conf syntax is ok
    

    7) 重新加载 nginx sudo nginx -s reload 并检查是否可以通过 https 连接。

    8) 如果您仍然收到 ERR_CONNECTION_REFUSED,请重新访问 iptables 配置 sudo iptables -nL 并确保 nginx 正在侦听 443 端口 sudo lsof -i

    【讨论】:

    • 我已达到第 6 步,但在撰写本文时 sudo nginx -t 它返回给我:nginx: [emerg] open() "/etc/nginx/sites-enabled/default" failed (2: No such file or directory) in /etc/nginx/nginx.conf:62 nginx: configuration file /etc/nginx/nginx.conf test failed。我去了路线/etc/nginx/sites-enabled/defaultdefault 文件存在但为空...
    • 看起来像是符号链接的问题。仔细检查 sites-available 目录中配置文件的名称确实是 default: cd /etc/nginx/sites-available; ls -la; 并尝试重新创建符号链接。您也可以直接在 /etc/nginx/sites-enabled 目录中创建配置文件,甚至无需使用符号链接。
    • 好的,我已经完成了所有步骤,现在我收到以下错误:ERR_CONNECTION_CLOSED。当我编写命令 sudo iptables -nL 时,它返回给我的其中一行如下所示:ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
    • 我假设 nginx 已经启动并运行,您可以通过 http 连接到 nodejs 应用程序,那么这可能是由于配置文件不完整(sites-available/default)造成的,例如缺少ssl on; 声明或类似的东西。请验证您的配置文件,here is good example
    • 还要仔细检查 nginx 是否监听 https sudo lsof -i 并检查 nginx 日志(less /var/log/nginx/error.logless /var/log/nginx/access.log
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多