将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80

Posted

技术标签:

【中文标题】将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80【英文标题】:Redirect web server from port 5000 to port 80 on localhost (Fedora) 【发布时间】:2017-10-07 08:47:09 【问题描述】:

在 Fedora 24 上,Web 服务器 (Node.js) 在端口 5000 上运行(独立,没有 apache/others)。试图使其在端口 80 上可访问。

http://localhost:5000 有效

试过这个:

systemctl stop firewalld
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 5000

http://localhost 不起作用

试过了

systemctl restart firewalld
firewall-cmd --add-service=http --permanent
firewall-cmd --zone=external --add-masquerade 
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=5000 
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000 
firewall-cmd --list-all
FedoraWorkstation (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp3s0
  sources: 
  services: mdns ssh dhcpv6-client samba-client https http
  ports: 1025-65535/tcp 1025-65535/udp
  protocols: 
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=5000:toaddr=
  source-ports: 
  icmp-blocks: 
  rich rules: 

其他信息 试过这些

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -t nat --list

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 5000
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:https redir ports 5000

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

ifconfig 
enp0s25: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ip route 
default via 192.168.1.1 dev wlp3s0  proto static  metric 600 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.4  metric 600

对于其他人来说,它只是工作: Best practices when running Node.js with port 80 (Ubuntu / Linode)

在端口 80 上以 root 身份运行节点有效。注意,没有 IPv4:

netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:4433            0.0.0.0:*               LISTEN      3977/deluge-gtk     
tcp        0      0 0.0.0.0:51157           0.0.0.0:*               LISTEN      3977/deluge-gtk     
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      900/postgres        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      3203/dropbox        
tcp        0      0 127.0.0.1:17600         0.0.0.0:*               LISTEN      3203/dropbox        
tcp        0      0 127.0.0.1:17603         0.0.0.0:*               LISTEN      3203/dropbox        
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::4433                 :::*                    LISTEN      3977/deluge-gtk     
tcp6       0      0 :::51157                :::*                    LISTEN      3977/deluge-gtk     
tcp6       0      0 :::5432                 :::*                    LISTEN      900/postgres        
tcp6       0      0 :::17500                :::*                    LISTEN      3203/dropbox        
tcp6       0      0 :::34017                :::*                    LISTEN      10532/code          
tcp6       0      0 :::5858                 :::*                    LISTEN      30394/node          
tcp6       0      0 :::5000                 :::*                    LISTEN      30394/node     

【问题讨论】:

【参考方案1】:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000 --permanent

#make port forwarding work on localhost
iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 5000

【讨论】:

【参考方案2】:

你应该避免使用iptables 来处理这样的事情,但是在 Fedora 上你需要适当地设置防火墙。这个问题也与Node.js无关

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

相关:https://unix.stackexchange.com/questions/39216/cannot-connect-to-fedora-on-port-80

【讨论】:

谢谢,编辑删除 nodejs。 # firewall-cmd --add-service=http --permanent FirewallD is not running 我尝试启动它,运行这些,然后再次运行 iptables,仍然无法正常工作。然后再次停止防火墙。 也试过了:firewall-cmd --add-service=http --permanent firewall-cmd --zone=external --add-masquerade firewall-cmd --zone=external --add-forward -port=port=80:proto=tcp:toport=5000 firewall-cmd --reload 当时的解决方案是什么? 查看其他答案

以上是关于将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80的主要内容,如果未能解决你的问题,请参考以下文章

Nginx反向代理:将所有http请求重定向到https

django admin 在保存时重定向到错误的端口

从一个烧瓶应用程序重定向到本地主机上的另一个烧瓶应用程序[重复]

nginx动态重定向url

透明重定向到端口 8080

Plesk:如何将域端口 80 和 443 重定向到我的 Docker 容器?