我有一个侦听端口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.fun或http://www.okium.fun时,应用程序显示正确,但在键入https://okium.fun或https://www.okium.fun时,我收到以下消息“okium.fun页面已拒绝连接.ERR_CONNECTION_REFUSED”。
对可能发生的事情的任何想法?
几点建议:
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
。
如你所知,https是端口443,但你设置listen 433 ssl; ..
433不是443 ..只是一个错字
在默认文件中写入端口号有一个拼写错误。
我认为在ssl cert的配置中应该将端口称为443
而不是433