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

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

原创
作者头像
木纸鸢
发布2018-07-27 12:20:41
1.3K0
发布2018-07-27 12:20:41
举报
文章被收录于专栏:云计算教程系列

介绍

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
复制
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
复制
sudo nano /etc/nginx/sites-available/default

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

代码语言:javascript
复制
. . . 
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
复制
. . .
        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
复制
. . .
        # 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
复制
sudo nano /etc/nginx/snippets/ssl-params.conf

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

代码语言:javascript
复制
 . . . 
ssl_session_timeout 1440m;

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

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

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

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

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

代码语言:javascript
复制
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
复制
sudo nano /home/buildbot/master/master.cfg

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

代码语言:javascript
复制
 . . .
 c['buildbotURL'] = "https://your.ssl.domain.name/"
 . . .

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

代码语言:javascript
复制
. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .

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

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

代码语言:javascript
复制
sudo -H pip install service_identity

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

第四步、重新启动服务

现在我们准备重启Nginx了:

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

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

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

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

代码语言:javascript
复制
May 08 18:07:52 buildbot-server systemd[1]: 
Started A high performance web server and a reverse proxy server.

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

代码语言:javascript
复制
sudo buildbot checkconfig /home/buildbot/master/
代码语言:javascript
复制
Config file is good!

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

代码语言:javascript
复制
sudo systemctl restart buildbot-master
sudo systemctl status buildbot-master

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

代码语言:javascript
复制
May 10 21:28:05 buildbot-server systemd[1]: Started BuildBot master service.

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

代码语言:javascript
复制
sudo systemctl restart buildbot-worker
sudo systemctl status buildbot-worker

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

代码语言:javascript
复制
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
复制
sudo ufw delete allow 8010
代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、申请免费的SSL证书
    • 申请入口
      • 填写申请
        • 手动DNS验证方式
          • 提交申请后验证身份
          • 第二步、配置Nginx
          • 第三步、配置Buildbot
          • 第四步、重新启动服务
          • 结论
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档