将 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的主要内容,如果未能解决你的问题,请参考以下文章