介绍
默认情况下,Jenkins 配备了内置的Winstone Web 服务器,可在端口 8080上收听,方便开始使用,一旦您认真使用Jenkins,则应该使用SSL来保护通过 Web 界面传输的密码和其他敏感数据。
在本教程中,我们将展示如何将 Nginx 配置为反向代理,以将客户端请求直接发送给 Jenkins。
前提条件
一台 Ubuntu 16.04 服务器 配置了非 root sudo
用户和防火墙,通过遵循 Ubuntu 16.04 初始服务器设置指南与 Jenkins 和 Nginx 安装和配置使用以下指南:
- 如何在Ubuntu 16.04上安裝Jenkins * 如何在Ubuntu 16.04上安裝Nginx * 如何在Ubuntu 16.04上安全地使用Let's Encrypt安全地安裝Nginx。 請注意,本教程需要您擁有或控制的註冊域名。
一旦你完成了这些要求,你已经准备好开始。
第一步:配置 Nginx
在前提教程中, 如何在Ubuntu 16.04上安全地加密 Nginx,我们将 Nginx配置为在 /etc/nginx/sites-available/default
文件中使用SSL,所以我们将打开该文件以添加我们的反向代理设置。
1sudo nano /etc/nginx/sites-available/default
首先,我们将使用 SSL 配置设置在服务器
块中添加特定访问和错误日志:
1[label /etc/nginx/sites-available/default]
2. . .
3server {
4 # SSL Configuration
5 #
6 # listen 443 ssl default_server;
7 # listen [::]:443 ssl default_server;
8 access_log /var/log/nginx/jenkins.access.log;
9 error_log /var/log/nginx/jenkins.error.log;
然后,我们将配置代理设置. 由于我们将所有请求发送给Jenkins,我们将评论默认的try_files
行,如上所述,在请求到达Jenkins之前返回404错误。
1[label /etc/nginx/sites-available/default]
2 . . .
3 location / {
4 # First attempt to serve request as file, then
5 # as directory, then fall back to displaying a 404.
6 # try_files $uri $uri/ =404; }
7. . .
然后,我们将添加实际的代理设置. 该配置首先包括Nginx提供的"proxy_params",它能确保像主机名那样的信息,客户端请求的协议,以及客户端IP地址被保留在我们日志文件中. 接下来,`proxy_pass'设定了代理服务器的协议和地址,就我们而言,代理服务器是Jenkins服务器在8080港的本地主机上访问的。 然后,我们将Nginx的60秒默认值中的)包括适当的主机名.
请确保在下面的proxy_redirect
行中替换您的 SSL 安全域名:
1[label /etc/nginx/sites-available/default]
2Location /
3. . .
4 location / {
5 # First attempt to serve request as file, then
6 # as directory, then fall back to displaying a 404.
7 # try_files $uri $uri/ =404;
8 include /etc/nginx/proxy_params;
9 proxy_pass http://localhost:8080;
10 proxy_read_timeout 90s;
11 # Fix potential "It appears that your reverse proxy set up is broken" error.
12 proxy_redirect http://localhost:8080 https://your.ssl.domain.name;
一旦你做了这些更改,保存并退出文件. 我们不会重新启动 Nginx 直到我们配置了 Jenkins 之后,但我们现在将测试我们的配置:
1sudo nginx -t
如果一切顺利,命令将返回:
1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful
否则,修复报告的任何错误,直到测试通过。
注意: 如果您错误地配置),您将在您的 Jenkins 配置页面中看到类似的内容。
如果您看到此错误,请在 Nginx 配置中双重检查proxy_pass
和proxy_redirect
设置。
步骤二:配置Jenkins
为了让 Jenkins 与 Nginx 合作,我们需要更新 Jenkins 配置,以便 Jenkins 服务器只在)。
我们将修改/etc/default/jenkins
配置文件以进行这些调整。
1sudo nano /etc/default/jenkins
查找JENKINS_ARGS
行,并将--httpListenAddress=127.0.0.1
添加到现有参数中:
1[label /etc/default/jenkins]
2. . .
3JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"
保存和退出文件。
要使用新的配置设置,我们将重新启动 Jenkins 和 Nginx。
1sudo systemctl restart jenkins
由于systemctl
没有显示输出,我们会检查状态:
1sudo systemctl status jenkins
我们应该在活跃
行中看到活跃
状态:
1[secondary_label Output]
2● jenkins.service - LSB: Start Jenkins at boot time
3 Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
4 Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago
5 Docs: man:systemd-sysv-generator(8)
6 Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
7 Process: 11391 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
我们将对 Nginx 重复这些步骤:
1sudo systemctl restart nginx
1sudo systemctl status nginx
1[secondary_label Output]
2● nginx.service - A high performance web server and a reverse proxy server
3 Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
4 Active: active (running) since Tue 2017-04-25 22:36:08 UTC; 2min 51s ago
5 Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=
6 Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
7 Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC
8 Main PID: 11353 (nginx)
现在我们重新启动了两个服务器,我们应该能够使用HTTP或HTTPS访问该域,HTTP请求将自动重定向到HTTPS,Jenkins网站将安全地服务。
步骤三:测试配置
我们将通过重新设置管理密码来测试配置,现在我们已经启用了加密,我们将开始通过访问网站通过http
来验证我们已经到达Jenkins并被重定向到https
,正如我们预期的那样:
在您的网页浏览器中,输入http://your.ssl.domain.name
,以your.ssl.domain.name
代替您的域名。 点击Enter
后,URL应以https
开始,位置栏应表示连接安全。
我们将在用户
字段中输入admin
和Jenkins在我们安装时创建和存储的自动生成的密码。
1sudo cat /var/lib/jenkins/secrets/initialAdminPassword
如果您已经重置了管理员用户的密码,请输入该密码,无论如何,一旦我们登录,我们将更改密码,以确保它是安全的。
点击右上角的admin
,从下载菜单中选择配置
。输入并确认新密码,然后点击保存
。
结论
在这个教程中,在完成先决条件后,我们配置了Nginx作为Jenkins内置网络服务器的倒置代用,以保障我们通过Web接口传输的证书和其他信息的安全. 现在Jenkins安全了,你可以学会如何设置连续集成管道自动测试代码更改. 考虑你是否对Jenkins来说是新手的其他资源是Jenkins项目"Geting Started: Create your first Pipeline教程或社区贡献插件库.