Как перенаправить порт 80 на другой порт на той же машине?


39

Как переслать запросы, поступающие через порт 80, на другой порт на той же машине с Linux?

Раньше я делал это, меняясь nat.conf, но у этой машины, которую я использую, нет NAT. Какая альтернатива?


Нет NAT или нет nat.conf? Вы пробовали какие-либо правила iptables, используя NAT?
Бен Суинберн

Ответы:


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. Делать это годами
Александр Погребняк

1
Как насчет Windows Server?
Люк

О, чувак, это именно то, что я искал, слава!
нейроснап


1
что делать если нет интерфейса eth0? почему бы не использовать петлевой интерфейс?
Инвентарь

15

Просто оказался в этом вопросе и не смог найти легкий путь. Не хочу устанавливать Nginx на мою машину, чтобы сделать эту простую переадресацию портов.

Rinetdне работал для меня, нет рабочего пакета для моего дистрибутива. Я пошел socatвместо этого. Супер просто:

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

Должен быть запущен, suчтобы иметь возможность прослушивать порт 80.


Настройка Rinetd проще, я думаю.
johnshen64

Сокат работает отлично!
Львы

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 ничего не знает о виртуальных хостах.
ясень
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.