如何将端口80转发到同一计算机上的另一个端口?


39

如何将来自端口80的请求转发到同一Linux机器上的另一个端口?

我曾经通过更改来完成此操作nat.conf,但是我正在使用的这台计算机没有NAT。有什么选择?


没有NAT或没有nat.conf?您是否尝试过使用NAT的任何iptables规则?
Ben Swinburne

Answers:


47

您可以使用iptables完成重定向:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

+1。作为多年这样
亚历山大Pogrebnyak

1
在Windows Server上如何?
卢克

噢,伙计,这正是我要的东西,赞!
Neurosnap

起初对我没有用,但使用时很好sudo
mdiscenza

1
如果没有eth0接口怎么办?为什么不使用环回接口?
harschware

15

只是在这个问题中发现自己,找不到简单的方法。不想在我的机器上安装Nginx来执行此简单的端口转发。

Rinetd不适用于我,没有适用于我的发行版的软件包。我去了socat。超级简单:

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

必须运行su以能够在端口上侦听80


我认为Rinetd设置比较容易。
johnshen64

socat完美运作!
viv

10

您应该考虑使用反向代理,例如Nginx。例如,您可以在nginx.conf文件中放入以下内容:

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}


2
为什么?我并不一定不同意,但是有充分的理由让您不希望这种情况在网络堆栈中发生吗?
奥利

@Oli这种反向代理方法不会影响服务器上的许多其他虚拟主机,如果iptables这样做,则会发生这种情况,因为iptables不了解虚拟主机。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.