Ubuntu Apache配置:将所有HTTP请求重定向到HTTPS,排除Jenkins
解决方案
要实现“所有HTTP请求重定向到HTTPS,仅Jenkins请求除外”的需求,你需要用Apache的mod_rewrite模块添加条件判断(替换原有的全局Redirect指令,因为它无法设置例外规则),具体操作如下:
1. 启用mod_rewrite模块
在Ubuntu上执行以下命令启用模块,然后重启Apache:
sudo a2enmod rewrite sudo systemctl restart apache2
2. 修改HTTP虚拟主机配置
将原有的<VirtualHost *:80>配置替换为以下内容:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com # 开启Rewrite引擎 RewriteEngine On # 规则:根据Jenkins的访问方式设置例外 # 情况1:Jenkins通过80端口的特定路径访问(如http://www.example.com/jenkins) # 添加条件:请求路径不以/jenkins开头时,才执行重定向 RewriteCond %{REQUEST_URI} !^/jenkins RewriteRule ^(.*)$ https://www.example.com$1 [R=301,L] # (可选)若需将/jenkins路径反向代理到本地8080的Jenkins服务 ProxyPass /jenkins http://localhost:8080/jenkins ProxyPassReverse /jenkins http://localhost:8080/jenkins # 情况2:Jenkins直接监听8080端口(如http://www.example.com:8080) # 此场景下8080端口的请求不会经过Apache的80端口虚拟主机,原重定向规则不会影响它 # 只需确保Jenkins正常监听8080即可,无需额外修改Apache配置 </VirtualHost>
关键说明
RewriteCond %{REQUEST_URI} !^/jenkins:指定当请求路径不是以/jenkins开头时,才触发后续重定向。[R=301,L]:R=301代表永久重定向,L表示这是最后一条规则,匹配后不再执行后续规则。
验证配置
修改完成后重启Apache:
sudo systemctl restart apache2
测试效果:
- 访问
http://www.example.com/:会自动跳转到https://www.example.com/ - 访问
http://www.example.com/jenkins(或http://www.example.com:8080):不会被重定向,可正常访问Jenkins
内容的提问来源于stack exchange,提问作者Minny Joseph
相关产品推荐
相关产品推荐

