首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ip表条目后的端口80不再侦听

ip表条目后的端口80不再侦听
EN

Server Fault用户
提问于 2019-12-03 09:52:34
回答 1查看 171关注 0票数 0

我已经创建了一个nodeJS应用程序,它是部署在linux机器上的。为了只允许在整个应用程序中使用HTTPS,我创建了一些IP表规则,将所有不可执行的请求重定向到443 => 3000 (3000 ===应用程序端口)。

我想要达到的目标:

1)用户输入http域=> https =>端口3000 (应用程序)

2)用户进入https域=>端口3000 (应用程序)

我已经做了什么:

将所有传入的流量路由到https!

代码语言:javascript
复制
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 443
iptables -t nat -I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 443

iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3000
iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 3000

iptables-save

已经起作用的东西:

目前,只有场景2起作用。

要将端口80上的所有传入流量重定向到443 (https),然后重定向到端口3000 (应用程序端口),我必须做什么?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2019-12-03 10:18:38

您不能只做一个端口80到端口443前进。

您需要返回一个HTTP重定向(HTTP状态代码301或302),以便浏览器知道它在谈论HTTPS,而不是HTTP。

您不能用iptable来实现这一点,最好的方法是使用nginx或apache之类的工具为应用程序代理。这也意味着代理可以处理HTTPS证书处理,这在应用程序中可能也不会更好。

下面是nginx配置的开始:

代码语言:javascript
复制
server {
    listen 80;
    listen [::]:80;

    server_name www.example.com;

    return 301 https://www.example.com$request_uri;
}

server {
     listen 443;
     listen [::]:443;

     server_name www.example.com;

     //SSL cert stuff goes here
     ....

     location / {
           proxy_pass http://nodejs.server:3000/;
     }
}
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/994106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档