前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 18.04上使用Nginx反向代理配置Jenkins SSL

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

原创
作者头像
灬半痴
修改2018-09-25 10:22:33
3.3K0
修改2018-09-25 10:22:33
举报
文章被收录于专栏:云计算教程系列

介绍

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

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

准备

要完成本教程,你需要具备以下内容:

第一步 - 配置Nginx

您已将 Nginx配置为在文件中使用SSL 。打开此/etc/nginx/sites-available/example.com文件以添加反向代理设置:

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/example.com

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

代码语言:javascript
复制
. . . 
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错误:

代码语言:javascript
复制
. . .
           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:这将设置代理服务器的协议和地址,在这种情况下将是通过localhost8080端口访问的Jenkins服务器。
  • proxy_read_timeout:这使得Nginx的默认值从60秒增加到Jenkins推荐的90秒。
  • proxy_redirect:这可确保正确重写响应以包含正确的主机名。

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

代码语言:javascript
复制
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,但我们现在可以测试我们的配置:

代码语言:javascript
复制
sudo nginx -t

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

代码语言:javascript
复制
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设置。

第二步 - 配置Jenkins

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

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

代码语言:javascript
复制
sudo nano /etc/default/jenkins

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

代码语言:javascript
复制
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

保存并退出该文件。

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

代码语言:javascript
复制
sudo systemctl restart jenkins

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

代码语言:javascript
复制
sudo systemctl status jenkins

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
sudo systemctl restart nginx

检查状态:

代码语言:javascript
复制
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站点。

第三步 - 测试配置

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

在您的网络浏览器中,输入http://example.com,替换您的example.com域名。按下ENTER后,URL应该以https开头,并且位置栏应指示连接是安全的。

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

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

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

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

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

结论

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

想要了解更多关于Nginx的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Configure Jenkins with SSL Using an Nginx Reverse Proxy on Ubuntu 18.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 配置Nginx
  • 第二步 - 配置Jenkins
  • 第三步 - 测试配置
  • 结论
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档