强迫症的福音,完美消除 Jenkins 反向代理设置有误提示
| 没有评论
Jenkins 真好玩,到现在还沉浸在自动化测试部署的乐趣中,变着法的改 README 提交,其乐无穷,唯独有一点像粒老鼠屎一样,坏了整锅粥 —- 反向代理配置错误…
该死的反向代理有误
对于强迫症来说,这是绝对无法忍受的!于是乎开始查阅资料,Google 百度清一色的答案:系统管理
-> 系统配置
里的 Jenkins URL 要正确配置。然而我一开始就是配置正确的,于是开始怀疑人生了,难道…这里有玄机?改成本地地址 http://127.0.0.1:8080/
无效,http://localhost:8080/
无效,几经波折,最后还是选择啃文档…
最终,还是在一篇官方文档里发现了终极解决方案:
官方终极解决方案
看到这段话,我表情是这样的:
柴犬问号脸
只要在 apache 代理配置里加上 AllowEncodedSlashes NoDecode
,同时在 proxyPass "/" "http://127.0.0.1:8080/"
后再加上 nocanon
即可,恼人的反向代理设置有误从此不在出现。
解释一下两个配置项:
- 官方文档说 apache
mod_proxy
会规范化通过proxyPass
限制的 URL,这个规范化可能是对 URL 格式进行一些处理,会与 Jenkins 不兼容,因此要加上nocanon
选项,来取消规范化处理。 - 对于
AllowEncodedSlashes
,顾名思义,就是是否允许 URL 中出现编码过的斜杆符号,包括/
和\
两种。默认是关闭的,如果出现,就返回 404 错误,开启后,会先解码,然后传给后端,而 Jenkins 需要的NoDecode
则是不解码,直接传给后端。
附上我的 apache 反向代理配置:
# 1234 是代理的端口
# 8080 是 Jenkins 的端口
<VirtualHost *:1234>
<Proxy http://127.0.0.1:1234/*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/ nocanon
ProxyPassReverse / http://127.0.0.1:8080/
AllowEncodedSlashes NoDecode
</VirtualHost>
最后,我发现 stack overflow
上其实有解决这个问题,可能是我的搜索关键词不对吧 :)