Каков правильный способ перенаправления портов на одном хосте?

Я установил jenkins на amazon ec2, ubuntu 16.04. jenkins на порт 9090. Я хотел перенаправить порт 80 (http) на порт 9090 и получить доступ к jenkins с помощью http://ci.mymachine.com/. Я следил за Running Jenkins на порту 80 или 443, используя iptables и правила настройки в iptables для перенаправления портов с 80 до 9090. Ниже приведены правила.

sudo iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9090 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8443 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 127.0.0.1 state NEW tcp dpt:8080 Chain OUTPUT (policy ACCEPT) num target prot opt source destination

и правила перенаправления

sudo iptables -t nat -L -n --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 9090 2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 8443 Chain INPUT (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination

В любом случае, когда я получаю доступ к jenkins, используя url http://ci.mymachine.com/, я получаю 502-страницу отказа от отказа. Но я могу получить доступ к jenkins с помощью http://ci.mymachine.com:9090/. что мне здесь не хватает?

0
задан 8 September 2017 в 13:47

4 ответа

я смог подключиться к порту 80 С конфигурациями iptable упоминается в документе Дженкинс, упомянутых в вопросе(что правильно настройки работает для Ubuntu 16.04, несмотря на то, что документация говорит, что они не тест, который для Ubuntu 16.04).

проблема в том, что эта машина инстанс Amazon ec2 как упомянуто в вопрос. Нет правила для входящих подключений, созданные для http-порт(80) для этой машины в консоли Amazon. После создания правила для входящих подключений с помощью консоли Amazon, теперь я могу получить доступ к URL-адрес http://ci.mymachine.com без каких-либо проблем.

0
ответ дан 18 July 2018 в 07:13

Я предлагаю вам установить nginx для пересылки HTTP-запросов со стандартного порта 80 на страницу Jenkins. Вот небольшой пример настройки для файла nginx.conf (он отлично подходит для меня). На моей машине Ubuntu я отредактировал файл /etc/nginx/sites-available/default (вместо этого вставил свой ip-адрес):

location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. #try_files $uri $uri/ =404; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.56.103:8080; proxy_redirect http://192.168.56.103:8080/ $scheme://$host:8080/ }

Также мне пришлось прокомментировать строку '#try_files $ uri $ uri / = 404;' 'cos иначе я получаю ошибку 404. Перезапустите nginx sudo /etc/init.d/nginx restart. Теперь, если вы укажете свой браузер на http://ci.mymachine.com, вы должны быть перенаправлены на страницу Jenkins. Нажмите Ctrl+F5 для «жесткого» обновления страницы. Надеюсь, это поможет. Вот ссылка на обсуждение.

1
ответ дан 18 July 2018 в 07:13

Я смог подключиться к порту 80 с iptable конфигурациями, упомянутыми в документе jenkins, упомянутым в вопросе (эта конфигурация работает правильно для ubuntu 16.04, хотя в документации указано, что они не тестировали это для ubuntu 16.04).

Проблема заключалась в том, что эта машина представляет собой экземпляр ecazon ec2, как указано в вопросе. Не было правил входа, созданных для http-порта (80) для этого аппарата в консоли amazon. После создания входящего правила с помощью консоли amazon теперь я могу получить доступ к URL http://ci.mymachine.com без каких-либо проблем.

0
ответ дан 24 July 2018 в 18:45

Я предлагаю вам установить nginx для пересылки HTTP-запросов со стандартного порта 80 на страницу Jenkins. Вот небольшой пример настройки для файла nginx.conf (он отлично подходит для меня). На моей машине Ubuntu я отредактировал файл /etc/nginx/sites-available/default (вместо этого вставил свой ip-адрес):

location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. #try_files $uri $uri/ =404; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.56.103:8080; proxy_redirect http://192.168.56.103:8080/ $scheme://$host:8080/ }

Также мне пришлось прокомментировать строку '#try_files $ uri $ uri / = 404;' 'cos иначе я получаю ошибку 404. Перезапустите nginx sudo /etc/init.d/nginx restart. Теперь, если вы укажете свой браузер на http://ci.mymachine.com, вы должны быть перенаправлены на страницу Jenkins. Нажмите Ctrl+F5 для «жесткого» обновления страницы. Надеюсь, это поможет. Вот ссылка на обсуждение.

1
ответ дан 24 July 2018 в 18:45
  • 1
    Спасибо за предложение. Да. Это можно сделать. Я планировал пойти на это, если iptable-подход не работает. Во всяком случае, когда это делается, для nginx есть накладные расходы. Поэтому дженкинсы также рекомендуют пойти на iptable-подход. не знаю, почему перенаправление iptable работает не так, как ожидалось. – lakshman 8 September 2017 в 13:27
  • 2
    Пожалуйста. Я добавил еще 3 строки, если вы хотите увидеть правильный URL-адрес в своем браузере. – M. Dm. 8 September 2017 в 13:31

Другие вопросы по тегам:

Похожие вопросы: