Jenkins 位于子目录中的 nginx 反向代理后面

Jenkins 位于子目录中的 nginx 反向代理后面

我正在努力在 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

相关内容