Nginx搭建简单负载均衡 acme.sh自动续期Let’s Encrypt证书,部署到负载均衡上

折腾负载均衡上搞https的免费ssl证书了几天,写点总结
要看证书配置的直接跳到四,五步吧

一、先看最简单的,安装Nginx

1.添加源

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2.安装

yum install -y nginx

3.启动服务+开机自启

systemctl start nginx
systemctl enable nginx

4.nginx配置文件所在目录

/etc/nginx/nginx.conf

二、再来看看Nginx怎么实现反向代理

1.DNS直接解析到的服务器,nginx配置文件中加上这段

    upstream poxy_server{
        server 120.打.码.81;
    }

    server {
        listen       80 ;
        server_name  ldl.域名.com;
        location /{
           proxy_pass http://poxy_server;
        }
    }

2.代理服务器nginx配置文件中加上这段

    server {
        listen       80;
        server_name  ldl.域名.com;
        root         /usr/share/nginx/html;
    }

3.两台服务器重新加载nginx配置

nginx -t                  检查配置文件
nginx -s reload           重新加载配置文件

4.现在当我们再去访问该域名的时候,就会发现访问的是代理服务器的页面了。

三、负载均衡的实现

多加几台反向代理服务器,DNS解析到的主服务器作为负载均衡器,就算是简单的负载均衡了,配置和原理我说的比较简略,放上前辈写的吧(捂脸) https://www.jianshu.com/p/af6e018b1641

四、acme.sh脚本实现Let’s Encrypt免费ssl证书自动续期

直接放上源码地址,使用说明也还是直接看官方的吧。。。
https://github.com/Neilpang/acme.sh

五、负载均衡上部署ssl证书

1.对於单台负载均衡器来说,我们只要把证书部署到负载均衡器上就行了,也就是DNS解析指向的那台服务器,nginx中443端口如下配置即可(需要注意的是对于没有指定root目录的负载均衡器,直接使用acme.sh的–webroot方式进行验证是访问不到验证文件的,选择acme.sh –issue -d mydomain.com –nginx这种方式即可)

# Settings for a TLS enabled server.

    server {
         listen       443 ssl http2 default_server;
         listen       [::]:443 ssl http2 default_server;
         server_name  www.域名.com;
    #    root         /usr/share/nginx/html;

         ssl_certificate "/etc/nginx/证书路径/fullchain.cer";   #这两行配置好ssl证书路径
         ssl_certificate_key "/etc/nginx/证书路径/域名.key";     #这两行配置好ssl证书路径
         ssl_session_cache shared:SSL:1m;
         ssl_session_timeout  10m;
         ssl_ciphers HIGH:!aNULL:!MD5;
         ssl_prefer_server_ciphers on;            #这里要开启

         location / {
           proxy_pass http://poxy_server;
         }

然后nginx -s reload 一下,域名就可以进行https访问了

2.现在情况是有多台负载均衡器,ssl证书文件验证时会出现访问到其他服务器上的情况,导致无法完成文件根目录验证。由于acme.sh该脚本验证时验证文件会在网站根目录生成一个.well-known目录,验证文件在这个目录里面。
根据这个特性,我们可以使用Nginx的反向代理,让网站访问.well-known目录时,所有负载均衡器都指向到运行acme.sh脚本的那台ssl验证服务器上。
负载均衡器配置如下

    upstream ssl_server{
        server 120.打.码.81;
    }

    server {
        listen       80 ;
        server_name  www.域名.com;
        location /.well-known {
         proxy_pass http://ssl_server;
        }
    }

这里注意ssl_server的配置,是要加上root的配置的,然后启动acme.sh时用acme.sh –issue -d mydomain.com –webroot /home/wwwroot/ 使用这种直接指定根目录的方式

    server {
        listen       80 ;
        server_name  www.域名.com;
        root /etc/share/nginx/html;     #这里要加上网站根目录配置,否则--webroot方式访问不到验证文件
    }

具体配置根据需要更改,只是提供一种思路吧。。。
验证成功获取到证书后,再用scp,rsync之类命令将证书发送到所有负载均衡器服务器上就好。

六、备注一下配置代理时遇到的坑

1.代理时location可以实现对应目录匹配,所有目录都反向代理到web_aserver服务器。如下配置

       location /{
         proxy_pass http://web_aserver;
        }

/.well-known目录代理到ssl_server,如下配置

       location /.well-known {
         proxy_pass http://ssl_server;
        }

2.代理指向有目录的情况,例如

        location /.well-known {
         proxy_pass http://192.168.1.1/yumin;
        }

假设192.168.1.1服务器网站根目录是/etc/html
则当我们访问192.168.1.1/.well-known/token.txt时,所访问的服务器目录为/etc/html/yumin/token.txt

3.代理指向没有目录

        location /.well-known {
         proxy_pass http://192.168.1.1;
        }

假设192.168.1.1服务器网站根目录是/etc/html
则当我们访问192.168.1.1/.well-known/token.txt时,所访问的服务器目录为/etc/html/.well-known/token.txt

ps:配置文件并非完全从服务器上覆制过来的,有部分改动,所以直接复制运行时可能会出现错误
说的可能有点晕,实践一下就明白了吧23333

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章