折騰負載均衡上搞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