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

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