专栏首页云计算教程系列如何在Ubuntu 18.04上使用Nginx反向代理配置Jenkins SSL
原创

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

介绍

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

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

准备

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

第一步 - 配置Nginx

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

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

server具有SSL配置设置的块中,添加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:这将设置代理服务器的协议和地址,在这种情况下将是通过localhost8080端口访问的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设置。

第二步 - 配置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站点。

第三步 - 测试配置

现在您已启用加密,您可以通过重置管理密码来测试配置。让我们首先通过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》

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 14.04上使用Nginx设置密码验证

    设置Web服务器时,通常会希望限制访问的站点部分。Web应用程序通常提供自己的身份验证和授权方法,但如果Web服务器不足或不可用,则可以使用Web服务器本身来限...

    灬半痴
  • 如何在Ubuntu 14.04上安装Bacula-Web

    Bacula-Web是一个PHP Web应用程序,它提供了一种查看已经运行的Bacula备份作业的摘要和图形的简便方法。虽然它不允许您以任何方式控制Bacula...

    灬半痴
  • 如何在CentOS 7上的主代理安装程序中安装Puppet 4

    来自Puppet Labs的Puppet是一种配置管理工具,可帮助系统管理员自动化服务器基础架构的配置,配置和管理。提前规划并使用Puppet等配置管理工具可以...

    灬半痴
  • ​如何使用Nginx反向代理配置SSL加密的Jenkins

    默认情况下,Jenkins自带内置的Winstone网络服务器,可以通过8080端口进行监听,方便入门。但是,只要您认真使用Jenkins,就应该使用SSL保护...

    姚啊姚
  • 借助Nginx搭建反向代理服务器

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给...

    java架构师
  • Python实现简单的视频人脸检测识别,人工智能入门基础!

    其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统、人脸动态跟踪识别系统等等。

    python学习教程
  • 为什么Python类语法应该不同?

    如果您已经使用了任何编程语言很长一段时间,您就会发现您想要的东西跟它原有的是不同的。Python对我来说是真的是这样。如果可以的话,对于Python中很多的我想...

    小小科
  • 弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践

    CODING 中提供了内置云主机用来执行持续集成(CI)中的构建计划,能够胜任大部分构建任务。但如果碰上了大型项目的构建,或者需要在本地服务器生成构建成果,单个...

    CODING研发管理系统
  • 添加Intent.FLAG_ACTIVITY_CLEAR_TOP 都做了些什么背景整体流程

    用户1127566
  • PHP 循环引用的问题

    这段代码很简单, 输出数组的元素两次, 感觉会输出两次 abcd? 不好意思, 输出结果如下: 

    烟草的香味

扫码关注云+社区

领取腾讯云代金券