本教程的先前版本由Melissa Anderson编写
介绍
默认情况下, Jenkins自带内置的Winstone Web服务器,可以通过8080
端口进行监听,方便入门。 但是,使用SSL保护Jenkins以保护通过Web界面传输的密码和敏感数据也是一个好主意。
在本教程中,您将Nginx配置为反向代理,以将客户端请求定向到Jenkins。
先决条件
首先,您需要以下内容:
- 一个Ubuntu 18.04服务器配置了非root sudo用户和防火墙,遵循Ubuntu 18.04初始服务器设置指南 。
- 按照如何在Ubuntu 18.04上安装Jenkins中的步骤安装Jenkins
- 按照如何在Ubuntu 18.04上安装Nginx中的步骤安装Nginx
- 由Let的加密提供的域的SSL证书。 按照如何使用Ubuntu 18.04上的Let加密来保护Nginx以获取此证书。 请注意,您需要拥有或控制的注册域名 。 本教程将始终使用域名example.com 。
第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特定的访问和错误日志:
. . .
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错误:
. . .
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
:
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
如果一切顺利,命令将返回:
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果没有,请修复任何报告的错误,直到测试通过。
注意:
如果您错误配置了proxy_pass
(例如,通过添加尾部斜杠),您将在Jenkins 配置页面中获得类似于以下内容的内容。
如果看到此错误,请仔细检查Nginx配置中的proxy_pass
和proxy_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
添加到现有参数:
. . .
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)
状态:
Output● 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
Output● 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 Web界面。
结论
在本教程中,您将Nginx配置为Jenkins内置Web服务器的反向代理,以保护您通过Web界面传输的凭据和其他信息。 既然Jenkins是安全的,您可以学习如何设置持续集成管道来自动测试代码更改。 如果您不熟悉Jenkins,其他需要考虑的资源是Jenkins项目的“创建您的第一个管道”教程或社区贡献插件库 。