前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >给Buildbot加上SSL,使用Nginx做反向代理

给Buildbot加上SSL,使用Nginx做反向代理

原创
作者头像
木纸鸢
发布于 2018-07-27 04:20:41
发布于 2018-07-27 04:20:41
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

Buildbot是一个基于Python持续集成系统,用于自动化软件构建,测试和发布。Buildbot自带内置的Web服务器并使用8010端口,为了使用SSL保护Web界面,我们需要用Nginx配置反向代理。

在本教程中,我们将演示如何将Nginx配置为反向代理,以便将受SSL保护的浏览器请求定向到Buildbot的Web界面。

准备

要学习本教程,您需要:

  • 一个Ubuntu 16.04服务器,具有至少1 GB的RAM,我们建议您使用腾讯云免费开发者实验室进行试验,或点击这里购买服务器。
  • SSL证书,您可以自签名,也可以使用腾讯云免费的SSL证书进行安装,如果您是用在生产环境,我们建议您使用腾讯云的证书进行配置。

当您完成这些要求后,您就可以开始了。

第一步、申请免费的SSL证书

申请入口

进入SSL证书管理控制台

单击【申请证书】

查看申请域名型证书型号,单击【确定】

填写申请

填写申请域名,例如qcloud.com,cloud.tencent.com,demo.test.qlcoud.com。

手动DNS验证方式

证书默认支持收到DNS验证,验证方法可查看详情

提交申请后验证身份

提交申请成功后弹窗提示如下,需要前往【证书详情页】获取CName记录添加解析:

获取CName记录如Tips中显示,需要尽快成功添加解析,方可通过CA机构审核:

第二步、配置Nginx

下载我们在第一步中生成的密钥,我们将其命名为selfsigned.keyselfsigned.crt将这两个文件移动到/etc/ssl/private/,然后我们打开nginx配置文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {  
    listen 80;
    listen [::]:80 ssl ipv6only=on; 
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name example.com;
​
    ssl on;
    ssl_certificate /etc/ssl/private/selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/selfsigned.key;
}

保存并退出,接下来,我们将打开default并添加我们的反向代理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/nginx/sites-available/default

首先,我们将在SSL server块中添加特定的访问和错误日​​志。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . . 
server {
        # SSL Configuration
        #
. . .
         # include snippets/snakeoil.conf;
         access_log            /var/log/nginx/buildbot.access.log;
         error_log            /var/log/nginx/buildbot.error.log;
. . .        

接下来,我们将配置代理设置。由于我们正在向Buildbot发送所有请求,因此我们需要删除或注释掉默认try_files行,正如所写,在请求到达Buildbot之前将返回404错误。

注意:Buildbot会在try_files启用设置的情况下返回200响应请求。如果200请求由浏览器缓存,则浏览器会一直显示空白页面相应请求。

然后我们将添加反向代理配置。第一行包括Nginx提供的proxy_params,以确保我们的日志文件中可以使用主机名,客户端请求协议和客户端IP地址等信息。proxy_pass设置代理服务器的协议和地址,这在我们的例子中是8010端口上的Buildbot服务器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
​
                # Reverse proxy settings
                include proxy_params;
                proxy_pass http://localhost:8010;
             }
. . .

接下来,我们将配置另外两个文件,/sse/ws

服务器发送事件(SSE)设置服务器发送事件是一种比WebSockets更简单,更符合REST的协议,允许客户端订阅事件。 Buildbot SSE需要自己设置proxy_pass,并且可以通过关闭proxy_buffering获取更好的性能。

WebSocket设置WebSocket是Web服务器和Web浏览器之间的消息传递协议。与SSE协议一样,它需要proxy_pass设置。传递信息也需要其他配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
        # Server sent event (sse) settings
        location /sse {
                proxy_buffering off;
                proxy_pass http://localhost:8010;
        }
​
        # Websocket settings
        location /ws {
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_pass http://localhost:8010;
              proxy_read_timeout 6000s;
        }
 . . .

完成这些更改后,保存并退出文件。

最后,我们将编辑ssl_params.conf并增ssl_session_timeout选项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/nginx/snippets/ssl-params.conf

在文件的底部,添加以下行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 . . . 
ssl_session_timeout 1440m;

完成后,保存并退出文件。

注意:注意:Buildbot文档的示例Nginx文件,将ssl_session_cache大小设置为1,440兆字节,允许超过500万个连接。 我们选择保留内存密集度较低的10兆字节设置。 每兆字节可以存储大约4000个会话,因此这将存储大约40,000个会话,这对于大多数例子来说已经足够了。

在我们配置Buildbot之前,我们不会重新启动Nginx,我们可以通过下面的命令测试我们的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nginx -t

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

第三步、配置Buildbot

Buildbot在其Web界面中相关域名,并且需要在master.cfg链接中定义基本URL才能正常工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /home/buildbot/master/master.cfg

找到buildbotURL设置,更改httphttps,然后将localhost更改为您的域名。删除:8010端口设置,因为Nginx将代理传统Web端口的请求。重要说明:协议必须是https,并且定义必须包含尾部斜杠。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 . . .
 c['buildbotURL'] = "https://your.ssl.domain.name/"
 . . .

我们还将确保主服务器不会通过绑定到本地接口来接受来自其他主机上的连接。注释或替换现有协议行c['protocols'] = {'pb': {'port': 9989}},内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .

完成后,保存并退出文件。

现在我们正在使用HTTPS,我们将安装service_identity模块,该模块验证证书是否有效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo -H pip install service_identity

如果我们跳过此步骤,Buildbot仍将重新启动,但会发出告警您没有service_identity模块的工作安装。

第四步、重新启动服务

现在我们准备重启Nginx了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart nginx

由于systemctl不提供输出,我们将使用status命令确保Nginx正在运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl status nginx

输出应高亮显示“正在运行"类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
May 08 18:07:52 buildbot-server systemd[1]: 
Started A high performance web server and a reverse proxy server.

接下来,我们将使用systemctl重新启动buildmaster和worker。首先,检查配置文件中是否存在语法错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo buildbot checkconfig /home/buildbot/master/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Config file is good!

如果未报告任何错误,请重新启动该服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart buildbot-master
sudo systemctl status buildbot-master

输出应高亮显示“正在运行"类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot master service.

接下来,我们将重新启动worker:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart buildbot-worker
sudo systemctl status buildbot-worker

输出应高亮显示“正在运行"类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot worker service.

现在我们已经重新启动了Nginx,buildmaster和worker,我们已经准备好验证反向代理是否正常工作。当我们通过http访问该网站时,应该重定向到https以成功访问Buildbot网站。

在您的网络浏览器中,输入http://your.ssl.domain.name,用您的域名替换your.ssl.domain.name。按Enter键后,URL应以https开头,位置栏应指示连接是安全的。

接下来,我们将花点时间看一下Web Socket和Server Sent Events是否正确代理。

首先,访问/sse目录。如果重定向工作正常,浏览器应返回以下页面。请注意,页面将继续尝试加载,这是正常的:

接下来,访问/ws目录。如果代理重定向不正确,访问/ws目录将返回到404 Not Found错误。如果一切顺利,浏览器应返回以下页面:

最后,由于内置Web服务器侦听所有接口,我们将删除允许外部流量到端口8010的规则,以防止在通过IP地址访问服务器时出现未加密的连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ufw delete allow 8010
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Rule updated
Rule updated (v6)

我们现在已将Nginx配置为反向代理,并阻止用户使用HTTP来访问Buildbot 。

结论

在本教程中,我们将Nginx配置为Buildbot内置Web服务器的反向代理,以保护我们通过Web界面传输的其他信息。防止黑客进行抓包攻击。更多linux教程请关注腾讯云+社区。或试用腾讯云BGP高防来保护您服务器的安全。


参考文献:《How To Configure Buildbot with SSL using an Nginx Reverse Proxy》

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用NGINX反向代理部署Spring Boot应用
Spring Boot通过大量的默认配置,让使用Spring框架进行开发变得方便快捷,从而使得Java开发人员专注于程序原型设计。本文介绍如何创建一个简单的Spring Boot应用,然后通过NGINX反向代理进行发布。
DMC
2018/09/10
10K0
使用NGINX反向代理部署Spring Boot应用
通过Nginx配置域名映射到本地项目
猫头虎博主在此为大家详细讲解如何通过Nginx配置将特定域名映射到本地项目。在云计算和网络技术日益成熟的今天,使用Nginx实现域名的解析和映射成为了开发和运维人员的基本技能。本文将从Nginx的基本配置开始,深入探讨如何通过简单的配置实现域名到本地项目的映射,帮助读者理解和掌握这一重要技能。 😺
猫头虎
2024/04/09
9970
通过Nginx配置域名映射到本地项目
Nginx 简单总结
在这篇博客中,我们将探讨如何使用Nginx部署Java项目,以提高性能和可伸缩性。我们将深入研究Nginx的配置和优化技巧,帮助你更好地理解如何将Nginx与Java应用程序集成,提高用户体验和响应速度。无论是小型项目还是大规模应用,本文都将为你提供宝贵的指导和技巧。
默 语
2024/11/20
880
CentOS7 离线安装 Nginx 1.6.2 和 反向代理
Nginx官方文档:https://www.nginx.com/resources/wiki/start/
静谧星空TEL
2021/04/27
2.6K0
CentOS7 离线安装 Nginx 1.6.2 和 反向代理
【黄啊码】简述Nginx的正向代理和反向代理
Nginx可以用于正向代理和反向代理,具体的配置取决于你的需求。以下是关于如何配置正向代理和反向代理的基本指导:
黄啊码
2023/12/18
4370
Nginx的基本知识,包括安装、常用命令和反向代理的使用
Nginx是一款高性能的开源Web服务器软件,也是一种常用的反向代理服务器。它以轻量级、高并发和可靠性著称,广泛用于构建高性能的Web应用和提供负载均衡。本文将介绍Nginx的基本知识,包括安装、常用命令和反向代理的使用。
网络技术联盟站
2023/09/01
1.2K0
Nginx的基本知识,包括安装、常用命令和反向代理的使用
Nginx https反向代理
这里还是使用前一篇文章中使用的python3的 http server 作为后端应用服务。
kongxx
2024/02/20
8470
​如何使用Nginx反向代理配置SSL加密的Jenkins
默认情况下,Jenkins自带内置的Winstone网络服务器,可以通过8080端口进行监听,方便入门。但是,只要您认真使用Jenkins,就应该使用SSL保护它,以保护通过网页界面传输的密码和其他敏感数据。
姚啊姚
2018/07/30
2.6K0
​如何使用Nginx反向代理配置SSL加密的Jenkins
如何在Ubuntu 18.04上使用Nginx反向代理配置Jenkins SSL
默认情况下,Jenkins自带内置的Winstone Web服务器监听端口8080方便入门。但是,使用SSL保护Jenkins以保护通过Web界面传输的密码和敏感数据也是一个好方法。
灬半痴
2018/09/21
3.3K0
Nginx技术全面解析:从基础到高级应用
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将针对Nginx的性能优化和高级配置进行详细介绍。
Front_Yue
2024/01/21
9201
Nginx技术全面解析:从基础到高级应用
Nginx反向代理的配置
最近搞个服务器,然后部署了个人网站,以及一些服务供自己玩耍,其中Nginx最让我很难受,配置总是要现用现百度。所以,我来了,咳咳,我带来了一些​常用的配置。​需要有 Linux 和 Nginx 环境。
Java技术债务
2022/08/09
1.4K0
如何在Ubuntu 16.04上使用Let加密SSL证书配置GoCD
GoCD是一个功能强大的持续集成和交付平台,旨在自动化测试和发布流程。GoCD具有许多高级功能,例如比较构建,可视化复杂工作流以及自动构建版本跟踪,是一种灵活的工具,可以帮助团队将经过良好测试的软件提供给生产环境。
编程男孩
2018/09/21
1.2K0
利用 Nginx 做反向代理解决微信小程序业务域名限制问题
[查看原文] https://fyh.me/2018/07/12/nginx-docker-miniprogram/
fanyinghao
2018/07/22
8.5K0
Nginx配置——反向代理
其他话不多说,下面来学习一下Nginx的反向代理。如果没有Linux和Nginx环境,可以参考前两篇文章。
全栈程序员站长
2022/09/14
7.7K0
Nginx配置——反向代理
使用 Nginx 和 Apache2 配置反向代理
反向代理是一种服务器配置方式,用来代理和转发客户端的请求到后端服务器上。它可以在负载均衡、缓存、加速、安全性等方面提供帮助。常见的反向代理服务器有 Nginx 和 Apache2。本文将详细讲解如何使用 Nginx 和 Apache2 来配置反向代理,将请求代理到不同的端口或服务器上。
alanzeng
2025/01/14
3120
探索Nginx:强大的开源Web服务器与反向代理
随着互联网的飞速发展,Web服务器在现代技术架构中扮演着至关重要的角色。Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性,受到了众多开发者和系统管理员的青睐。本文将介绍Nginx的基本概念和常见用法,帮助读者更好地理解和使用它。
用户8909609
2024/02/13
2550
使用Apache或Nginx加密Tomcat流量
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。如果您开发Java应用程序,Tomcat是一种快速简便的方法,可以在专门为此目的设计的完整服务器环境中为它们提供服务。
藕丝空间
2018/08/01
1.5K0
『学习笔记』使用 Nginx 反向代理实现 WebSocket 支持指南
🎈今日推荐——https://cloud.tencent.com/developer/article/2472576
数字扫地僧
2024/12/02
1.4K0
关于反向代理的两种实践方式
配置多网址重定向到主网址,比如访问 simple.com 跳转到 www.simple.com
乐心湖
2021/01/18
1.1K0
Nginx反向代理
Nginx的一个常见使用场景是反向代理,可以用来隐藏后端服务地址或者做负载均衡使用。下面就来看看怎么实现一个最简单的反向代理。
kongxx
2024/02/20
2480
推荐阅读
相关推荐
使用NGINX反向代理部署Spring Boot应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验