Nginx二级目录转发Jenkins

最近要搭建一个Jenkins的服务,不过公司只能给分配一个二级域名,这个域名已经被别的服务占用,因此只能通过二级目录的方式通过代理的方式实现Jenkins服务。

目前的情况是abc.ap.example.net是公司分配的一个域名,当前域名下已经有相应的服务,我们希望在abc.ap.example.net/jenkins上部署Jenkins,当然前提是已有的服务和这个二级目录不冲突。

Nginx本身是一个非常强大也非常灵活的软件,配置个二级目录也非常简单:


server {
    listen                    80;
    server_name               abc.ap.example.net;
    access_log                /var/log/nginx_abc.access.log;
    error_log                 /var/log/nginx_abc.error.log;
    # 二级目录转发
    location /jenkins {
        proxy_pass            http://localhost:8889/jenkins;
        port_in_redirect      on;
        proxy_redirect        http://localhost:8889 $scheme://example.com;
        proxy_set_header      Host $host;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
    }
    # 以下是原有的服务
    location / {
        proxy_pass            http://localhost:8888;
        proxy_set_header      Host $host;
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
    }
}

Nginx配置完成后打开网址一试,发现所有的css, js什么的统统404了,仔细一找原因,发现这个文件都是通过绝对路径定义的,也就是类似abc.css会被链接到http://abc.ap.example.net/abc.css而不是我们期望的http://abc.ap.example.net/jenkins/abc.css,相对路径变成绝对路径当然会出错,这个也不是nginx能够左右的,还好Jenkins支持部署到二级目录,我们只需要在启动的时候加一个参数就可以了:

java -jar jenkins.war --httpPort=8889 --prefix=/jenkins

通过--prefix=/jenkins我们可以定义所有链接的前缀,也就实现了二级目录的部署。
同样的我们还可以加个minio的部署,这个是原生支持二级目录部署的,咔咔。

    location /minio {
        proxy_pass            http://localhost:9000/minio;
        port_in_redirect      on;
        proxy_redirect        http://localhost:8889 $scheme://example.com;
        proxy_set_header      Host $host;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
    }

OK,就酱。

发表新评论