![Jenkins 位于子目录中的 nginx 反向代理后面](https://linux22.com/image/727285/Jenkins%20%E4%BD%8D%E4%BA%8E%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%20nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%90%8E%E9%9D%A2.png)
我正在努力在 nginx 后面的子目录中设置 Jenkins。本地主机上运行着 2 个应用程序。其中一个是 jenkins,应该可以通过访问 foo.com/jenkins 来访问。另一个应用程序在 foo.com/ 上。
对 jenkins 的请求不能有前缀/jenkins/
,因此我重写(删除)了它。但是,尽管 jenkins 的初始页面加载了,但所有资源(js、css 等)都丢失了,网站看起来很丑陋。原因似乎是请求没有 jenkins 前缀,并被重定向到另一个应用程序(参见屏幕截图中的链接)。
我如何将请求从詹金斯页面路由到正确的处理程序?
server {
listen 80;
server_name foo.com;
# jenkins server in subdir:
location ^~ /jenkins/ {
rewrite ^/jenkins(.*) /$1 break;
proxy_pass http://127.0.0.1:9500/;
}
# main app:
location / {
proxy_pass http://127.0.0.1:8081;
}
}
答案1
复制粘贴来自文档:
此外,你必须确保 Jenkins 配置为监听对 /jenkins/ 文件夹的请求(例如http://10.0.0.100:8080/詹金斯/代替http://10.0.0.100:8080/)通过添加参数来实现--prefix=/詹金斯添加到 Jenkins 默认启动配置文件。在我的系统 (Ubuntu 12.04 LTS) 上,配置文件是/etc/default/詹金斯。例如,这是完整的 JENKINS_ARG 参数列表(我添加的唯一部分是--prefix=/詹金斯):
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=/jenkins"
配置完成后,您还应该设置 Jenkins UI 使用的 URL詹金斯 > 管理詹金斯 > 詹金斯位置 > 詹金斯 URL类似于:“https://domain.tld/jenkins/。
答案2
在 nginx 上使用子目录分离 vhosts,存在一些问题:
- 默认情况下,Jenkins 不会监听前缀,这意味着我们需要在启动配置文件中进行配置,
prefix
添加JENKINS_ARG
- 此后,您的主应用程序(
foo.com
)不得/jenkins
再使用此路径,这不是最佳实践,因为此后/
,所有路由路径都应属于一个应用程序foo.com
我认为您可以尝试使用子域名,所有子域名都指向您服务器的 IP(在 DNS 端配置)
- jenkins.foo.com
- foo.com
然后你就可以通过每个服务器块 nginx 来管理 vhost
upstream jenkins {
server 127.0.0.1:8080 fail_timeout=0;
}
server {
server_name foo.com
...
}
server {
server_name jenkins.foo.com
...
}
参考文档:https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx