我有一个运行在端口443上的Hudson / Jenkins安装,所以我可以通过https://ci.mydomain.com访问它。 我没有像Apache Httpd一样在端口80上运行的Web服务器,但我想如果用户键入http://ci.mydomain.com它应该被redirect到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 Web服务器,我只想从http://ci.mydomain.comredirect到https://ci.mydomain.com 。
iptables 是不是你想在这里 – 你正在发送一个浏览器,希望谈论简单的HTTP(只是无聊的普通文本)到一个服务器,谈论HTTPS(encryption,并非常混淆你的浏览器)。
您希望由您的Web服务器发布的300系列redirect将客户端发送到相应的https:// URL。 如果您正在运行Apache,则可以将其与SSLRequireSSL指令( 手动input )结合使用,以确保您的客户端无法访问应通过未encryption通道encryption的资源。
HTTP和HTTPS是不同的应用程序级别的协议,因此您不能仅在传输级别上redirect。 您应该在端口80上设置Apache或Nginx或其他东西,以使用Location标头执行正确的HTTPredirect。
在80上设置一个相对空白的VirtualHost监听,除此之外什么都不做
RewriteEngine On
RewriteRule(。*) https://foo.com $ 1
从http到https更多的只是交换端口。 这是两个不同的协议,你的哈德森/jenkins安装是寻找HTTPS而不是HTTP。
我不知道如何在没有安装类似Apache的端口上侦听端口80的情况下做你想做的事。
你可能在这里陷入僵局,因为http和https是不相似的,一个简单的端口redirect不起作用。
如果这是这个问题的一个后续问题 ,那么问题在于你试图在特权端口(<1024)上运行Jenkins。 你在这里把你的问题与端口80和443混合起来。
在端口8443上运行Jenkins(通常为非特权的HTTPS端口),并使用iptables将其从/redirect到443和8443。
正如其他人所build议的,要从http://redirect到https:// ,Apache和mod_rewrite是一个不错的select。 或者,任何小型Web服务器都应该能够发送redirect(HTTP 301或302状态)与Location标题。