Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。Buildbot自带内置的Web服务器并使用8010
端口,为了使用SSL保护Web界面,我们需要用Nginx配置反向代理。
在本教程中,我们将演示如何将Nginx配置为反向代理,以便将受SSL保护的浏览器请求定向到Buildbot的Web界面。
要学习本教程,您需要:
当您完成这些要求后,您就可以开始了。
进入SSL证书管理控制台
单击【申请证书】
查看申请域名型证书型号,单击【确定】
填写申请域名,例如qcloud.com,cloud.tencent.com,demo.test.qlcoud.com。
证书默认支持收到DNS验证,验证方法可查看详情。
提交申请成功后弹窗提示如下,需要前往【证书详情页】获取CName记录添加解析:
获取CName记录如Tips中显示,需要尽快成功添加解析,方可通过CA机构审核:
下载我们在第一步中生成的密钥,我们将其命名为selfsigned.key
和selfsigned.crt
将这两个文件移动到/etc/ssl/private/
,然后我们打开nginx配置文件。
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
并添加我们的反向代理。
sudo nano /etc/nginx/sites-available/default
首先,我们将在SSL server
块中添加特定的访问和错误日志。
. . .
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服务器。
. . .
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
设置。传递信息也需要其他配置。
. . .
# 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
选项。
sudo nano /etc/nginx/snippets/ssl-params.conf
在文件的底部,添加以下行:
. . .
ssl_session_timeout 1440m;
完成后,保存并退出文件。
注意:注意:Buildbot文档的示例Nginx文件,将ssl_session_cache大小设置为1,440兆字节,允许超过500万个连接。 我们选择保留内存密集度较低的10兆字节设置。 每兆字节可以存储大约4000个会话,因此这将存储大约40,000个会话,这对于大多数例子来说已经足够了。
在我们配置Buildbot之前,我们不会重新启动Nginx,我们可以通过下面的命令测试我们的配置:
sudo nginx -t
如果一切顺利,命令将返回:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Buildbot在其Web界面中相关域名,并且需要在master.cfg
链接中定义基本URL才能正常工作。
sudo nano /home/buildbot/master/master.cfg
找到buildbotURL
设置,更改http
为https
,然后将localhost
更改为您的域名。删除:8010
端口设置,因为Nginx将代理传统Web端口的请求。重要说明:协议必须是https,并且定义必须包含尾部斜杠。
. . .
c['buildbotURL'] = "https://your.ssl.domain.name/"
. . .
我们还将确保主服务器不会通过绑定到本地接口来接受来自其他主机上的连接。注释或替换现有协议行c['protocols'] = {'pb': {'port': 9989}}
,内容如下:
. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .
完成后,保存并退出文件。
现在我们正在使用HTTPS,我们将安装service_identity
模块,该模块验证证书是否有效。
sudo -H pip install service_identity
如果我们跳过此步骤,Buildbot仍将重新启动,但会发出告警您没有service_identity
模块的工作安装。
现在我们准备重启Nginx了:
sudo systemctl restart nginx
由于systemctl
不提供输出,我们将使用status
命令确保Nginx正在运行。
sudo systemctl status nginx
输出应高亮显示“正在运行"类似以下内容:
May 08 18:07:52 buildbot-server systemd[1]:
Started A high performance web server and a reverse proxy server.
接下来,我们将使用systemctl
重新启动buildmaster和worker。首先,检查配置文件中是否存在语法错误:
sudo buildbot checkconfig /home/buildbot/master/
Config file is good!
如果未报告任何错误,请重新启动该服务:
sudo systemctl restart buildbot-master
sudo systemctl status buildbot-master
输出应高亮显示“正在运行"类似以下内容:
May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot master service.
接下来,我们将重新启动worker:
sudo systemctl restart buildbot-worker
sudo systemctl status buildbot-worker
输出应高亮显示“正在运行"类似以下内容:
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地址访问服务器时出现未加密的连接:
sudo ufw delete allow 8010
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 删除。