У меня есть установка Hudson / Jenkins, которая работает на порту 443, поэтому я могу получить к ней доступ с помощью https://ci.mydomain.com
. У меня нет веб-сервера, работающего на порту 80, например Apache Httpd, но я хочу, чтобы пользователь вводил http://ci.mydomain.com
он должен быть перенаправлен на https://...
Я пробовал это с iptables
:
/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 443
/sbin/iptables-save
chkconfig --level 35 iptables on
Но браузер сообщает мне, что соединение не удалось. Поэтому я не хочу устанавливать веб-сервер Apache, я хочу только перенаправление с http://ci.mydomain.com
к https://ci.mydomain.com
.
iptables НЕ ЯВЛЯЕТСЯ то, что вы хотите здесь - вы отправляете браузер, который ожидает передачи простого старого HTTP (просто скучного обычного текста), на сервер, который передает HTTPS (зашифрованный и ОЧЕНЬ запутанный для вашего браузера).
Вы хотите Перенаправление серии 300 выданный вашим веб сервер чтобы отправить клиента по соответствующему URL https: //. Если вы используете Apache, вы можете комбинировать это с SSLRequireSSL
директива (Ручной ввод), чтобы ваши клиенты не могли получить доступ к ресурсам, которые должны быть зашифрованы по незашифрованным каналам.
HTTP и HTTPS - это разные протоколы уровня приложения, поэтому вы не можете просто перенаправить на транспортном уровне. Вы должны настроить Apache или Nginx или что-то еще на порту 80, чтобы выполнить правильное перенаправление HTTP с использованием Location
заголовок.
Настройте относительно пустой VirtualHost, прослушивающий 80, который ничего не делает, кроме
RewriteEngine On
RewriteRule (. *) https://foo.com1 доллар
Переход с http на https - это больше, чем просто переключение портов. Это два разных протокола, и ваша установка Hudson / Jenkins ищет https, а не http.
Я не знаю, как сделать то, что вы хотите, без установки чего-то вроде Apache для прослушивания порта 80.
Вы, вероятно, зашли в тупик, поскольку http и https достаточно различаются, и простое перенаправление порта не сработает.
Если это продолжение этот вопрос, проблема в том, что вы пытаетесь запустить Jenkins на привилегированном порту (<1024). Вы смешиваете здесь порт 80 и 443 в своем вопросе.
Запустите Jenkins на порту 8443 (что обычно для непривилегированного порта HTTPS) и используйте iptables
для перенаправления с / на 443 и 8443.
Для перенаправления с http://
к https://
, Apache и mod_rewrite
это хороший выбор, как предлагали другие. В качестве альтернативы любой крошечный веб-сервер должен иметь возможность отправлять перенаправление (статус HTTP 301 или 302) с Location
заголовок.