如何在Ubuntu 18.04上使用Nginx反向代理配置Jenkins SSL

默认情况下,Jenkins自带内置的Winstone Web服务器,监听端口“8080”,方便入门。但是,只要您认真使用Jenkins,就应该使用SSL来保护它,以保护通过Web界面传输的密码和其他敏感数据。 在本教程中,您将Nginx配置为反向代理,以将客户端请求定向到Jenkins。

本教程的先前版本由Melissa Anderson编写

介绍

默认情况下, Jenkins自带内置的Winstone Web服务器,可以通过8080端口进行监听,方便入门。 但是,使用SSL保护Jenkins以保护通过Web界面传输的密码和敏感数据也是一个好主意。

在本教程中,您将Nginx配置为反向代理,以将客户端请求定向到Jenkins。

先决条件

首先,您需要以下内容:

第1步 - 配置Nginx

在先决条件教程如何使用Ubuntu 18.04上的Let's Encrypt保护Nginx ,您已将 Nginx配置为在/etc/nginx/sites-available/ example.com文件中使用SSL。 打开此文件以添加反向代理设置:

sudo nano /etc/nginx/sites-available/example.com

在具有SSL配置设置的server块中,添加Jenkins特定的访问和错误日​​志:

/etc/nginx/sites-available/example.com
. . . 
server {
        . . .
        # SSL Configuration
        #
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        access_log            /var/log/nginx/jenkins.access.log;
        error_log             /var/log/nginx/jenkins.error.log;
        . . .
        }

接下来让我们配置代理设置。 由于我们将所有请求发送给Jenkins,我们将注释掉默认的try_files行,否则在请求到达Jenkins之前会返回404错误:

/etc/nginx/sites-available/example.com
. . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;        }
. . . 

我们现在添加代理设置,其中包括:

  • proxy_params/etc/nginx/proxy_params文件由Nginx提供,可确保在日志文件中保留并提供重要信息,包括主机名,客户端请求协议和客户端IP地址。
  • proxy_pass :设置代理服务器的协议和地址,在本例中是通过端口8080上的localhost访问的Jenkins服务器。
  • proxy_read_timeout :这使得Nginx的60秒默认值增加到Jenkins推荐的90秒值。
  • proxy_redirect :这可确保正确重写响应以包含正确的主机名。

请务必在下面的proxy_redirect行中替换您的SSL安全域名example.com

/etc/nginx/sites-available/example.com
Location /  
. . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                include /etc/nginx/proxy_params;
                proxy_pass          http://localhost:8080;
                proxy_read_timeout  90s;
                # Fix potential "It appears that your reverse proxy setup is broken" error.
                proxy_redirect      http://localhost:8080 https://example.com;

完成这些更改后,保存文件并退出编辑器。 在我们配置Jenkins之前,我们将暂停重启Nginx,但我们现在可以测试我们的配置:

sudo nginx -t

如果一切顺利,命令将返回:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果没有,请修复任何报告的错误,直到测试通过。

注意:
如果您错误配置了proxy_pass (例如,通过添加尾部斜杠),您将在Jenkins 配置页面中获得类似于以下内容的内容。

Jenkins错误:反向代理设置被破坏

如果看到此错误,请仔细检查Nginx配置中的proxy_passproxy_redirect设置。

第2步 - 配置Jenkins

要使Jenkins使用Nginx,您需要更新Jenkins配置,以便Jenkins服务器仅监听localhost接口而不是所有接口( 0.0.0.0 )。 如果Jenkins监听所有接口,则可以在其原始的未加密端口( 8080 )上访问它。

让我们修改/etc/default/jenkins配置文件来进行这些调整:

sudo nano /etc/default/jenkins

找到JENKINS_ARGS行并将--httpListenAddress=127.0.0.1添加到现有参数:

在/ etc /默认/Jenkins
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

保存并退出该文件。

要使用新配置设置,请重新启动Jenkins:

sudo systemctl restart jenkins

由于systemctl不显示输出,请检查状态:

sudo systemctl status jenkins

您应该在Active行中看到active (exited)状态:

● jenkins.service - LSB: Start Jenkins at boot time
   Loaded: loaded (/etc/init.d/jenkins; generated)
   Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
  Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

重启Nginx:

sudo systemctl restart nginx

检查状态:

sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago
     Docs: man:nginx(8)
  Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 29967 (nginx)

重新启动两台服务器后,您应该能够使用HTTP或HTTPS访问域。 HTTP请求将自动重定向到HTTPS,Jenkins站点将安全地提供。

第3步 - 测试配置

现在您已启用加密,您可以通过重置管理密码来测试配置。 让我们首先通过HTTP访问该站点,以验证您是否可以访问Jenkins并重定向到HTTPS。

在您的Web浏览器中,输入http:// example.com ,将您的域名替换为example.com ENTER ,URL应以https开头,位置栏应指示连接是安全的。

您可以在用户字段中输入您在如何在Ubuntu 18.04上安装Jenkins中创建的管理用户名,以及您在密码字段中选择的密码

登录后,您可以更改密码以确保其安全。

点击屏幕右上角的用户名。 在主配置文件页面上,从页面左侧的列表中选择配置

导航到Jenkins密码页面

这将带您进入新页面,您可以在其中输入并确认新密码:

Jenkins创建密码页面

单击“ 保存”确认新密码。 您现在可以安全地使用Jenkins Web界面。

结论

在本教程中,您将Nginx配置为Jenkins内置Web服务器的反向代理,以保护您通过Web界面传输的凭据和其他信息。 既然Jenkins是安全的,您可以学习如何设置持续集成管道来自动测试代码更改。 如果您不熟悉Jenkins,其他需要考虑的资源是Jenkins项目的“创建您的第一个管道”教程或社区贡献插件库


分享按钮