我在nginx中安装了SSL证书,但在浏览器中写入url告诉我:ERR_CONNECTION_REFUSED

问题描述 投票:0回答:3

我有一个侦听端口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
3个回答
1
投票

几点建议:

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


0
投票

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.