nginx配置支持https的示例代碼
1、簡介
你還在讓你的網(wǎng)站裸奔在網(wǎng)絡(luò)上嗎?在這里我們將搭建 免費版 HTTPS,免費的,免費的,免費的,重要的事情說三遍。
超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息,HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息,
因此,HTTP協(xié)議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息,
為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS,為了數(shù)據(jù)傳輸?shù)陌踩?,HTTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書來驗證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。
2、 HTTPS的優(yōu)點
盡管HTTPS并非絕對安全,掌握根證書的機構(gòu)、掌握加密算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現(xiàn)行架構(gòu)下最安全的解決方案,主要有以下幾個好處:
(1)使用HTTPS協(xié)議可認證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機和服務(wù)器;
(2)HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,要比http協(xié)議安全,可防止數(shù)據(jù)在傳輸過程中不被竊取、改變,確保數(shù)據(jù)的完整性。
(3)HTTPS是現(xiàn)行架構(gòu)下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
(4)谷歌曾在2014年8月份調(diào)整搜索引擎算法,并稱“比起同等HTTP網(wǎng)站,采用HTTPS加密的網(wǎng)站在搜索結(jié)果中的排名將會更高”。
3、 HTTPS的缺點
雖然說HTTPS有很大的優(yōu)勢,但其相對來說,還是存在不足之處的:
(1)HTTPS協(xié)議握手階段比較費時,會使頁面的加載時間延長近50%,增加10%到20%的耗電;
(2)HTTPS連接緩存不如HTTP高效,會增加數(shù)據(jù)開銷和功耗,甚至已有的安全措施也會因此而受到影響;
(3)SSL證書需要錢,功能越強大的證書費用越高,個人網(wǎng)站、小網(wǎng)站沒有必要一般不會用。
(4)SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。
(5)HTTPS協(xié)議的加密范圍也比較有限,在黑客攻擊、拒絕服務(wù)攻擊、服務(wù)器劫持等方面幾乎起不到什么作用。最關(guān)鍵的,SSL證書的信用鏈體系并不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。
4、 下載 certbot
這里使用git下載,還沒有安裝git的查看如何安裝
切換目錄
cd /usr/local
克隆git倉庫
git clone https: // github.com/certbot/certbot.git
克隆完成將會在/usr/loca/ 出現(xiàn)certbot目錄
5、 查看 certbot
切換到certbot目錄
cd /usr/local/certbot
如果目錄是這樣的說明安裝成功了
certbot常用命令 查看官方文檔
6、 安裝nginx
7、 申請https證書
查看當前證書
./certbot-auto certificates
第一次執(zhí)行將會安裝一些依賴,中途有一次確認詢問,輸入Y即可
開始申請證書(證書有效期3個月,過期需要重新申請) 方式一:使用DNS方式驗證,該方式需要你能配置域名,我個人喜歡這種方式 ./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d 你的域名 --manual --preferred-challenges dns-01 certonly 如:
配置泛域名
配置制定域名
配置二級泛域名
如上圖所示,第一次會讓你輸入一個郵箱,按要求輸入就可以了,到時候會發(fā)送一個郵件給你,需要點擊確認郵箱,所以務(wù)必填寫真實郵箱,然后按要求確認就可,不確認是執(zhí)行不下去的。
接下來會讓你驗證域名,按要求解析個TXT類型的記錄
保存確認以后再回到服務(wù)器中確認
上面這兩個文件就是配置https用到的證書了
方式二:使用插件方式
我們先看看官方怎么說的
這里我使用的是nginx(申請完會自動幫你重啟nginx) 這種方式配置不了泛域名,只能一個一個添加
./certbot-auto --nginx -d api2.nl166.com
解決上述報錯,請注意,/usr/local/nginx 請?zhí)鎿Q為你的nginx實際安裝位置安裝LNMP
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx ln -s /usr/local/nginx/conf/ /etc/nginx
再次執(zhí)行申請
中途會詢問你請選擇是否將HTTP流量重定向到HTTPS,刪除HTTP訪問??筛鶕?jù)自己的需求選擇,我這里是c取消選擇(實際上這一步可以直接不理,經(jīng)測試,這一步?jīng)]有選擇前,訪問網(wǎng)址https已經(jīng)可以訪問了。)
如果想省略詢問這一步,可以添加certonly 該種方式只會生成證書,不做其余操作,證書配置需要自己手動添加 如下:
./certbot-auto certonly --nginx -d api2.nl166.com
如上圖所示,如果你配置了監(jiān)聽443端口的server,他會幫你自動找到對應(yīng)域名的配置文件,并添加下面兩行,還把我格式打亂了,}號與上面{的縮進不對應(yīng)了,不過不影響功能,這里不知道會不會根據(jù)nginx的版本選擇是否添加ssl on;
因為我這個nginx版本是不需要這個的,較低版本需要添加ssl on;才能開啟https訪問。
如沒有監(jiān)聽該域名的443端口,則會在如下位置添加信息
其他方式請自行摸索
8、配置nginx支持https
# HTTPS server # server { listen 443 ssl; server_name api2.nl166.com; root /data/web/im.nl166.com; location / { index index.php; } #auth_basic "hello world"; #auth_basic_user_file /usr/local/nginx/conf/auth/nl166.auth; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ .*.(svn|git|cvs) { deny all; } ssl_certificate /etc/letsencrypt/live/api2.nl166.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/api2.nl166.com/privkey.pem; # managed by Certbot }
較低版本需要增加ssl on;才能開啟https訪問。
9、使用shell腳本與定時任務(wù)定時續(xù)期證書
注意:為避免遇到操作次數(shù)的限制,加入 --dry-run 參數(shù),可以避免操作限制,等執(zhí)行無誤后,再去掉進行真實的renew 操作。 方式一的續(xù)期
其中域名為/etc/letsencrypt/renewal/目錄下的****.conf ,****就是你要填寫的域名,比如我生成的時候是*.nl166.com,但是在實際生成的時候是沒有*號的
/home/certbot-sh/au.sh 替換成你自己更新DNS的腳本
如下:
把更新命令放到一個文件,我這里是放在了/data/shell/crontab/auto_update_httpscert.sh 內(nèi)容如下 ,原來的auto_update_httpscert.sh 更改到/data/shell/cnl_update_httpscert.sh
增加系統(tǒng)定時任務(wù)
crontab -e
#每個星期天凌晨5點執(zhí)行更新https證書操作
0 5 * * 0 sh /data/shell/crontab/auto_update_httpscert.sh
方式二的續(xù)期 如下:
./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run
增加系統(tǒng)定時任務(wù)操作參考方式一
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nginx-ingress-controller部署配置詳解
這篇文章主要為大家介紹了nginx ingress controller的部署配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Nginx配置SSL證書部署HTTPS網(wǎng)站的方法(頒發(fā)證書)
這篇文章主要介紹了Nginx配置SSL證書部署HTTPS網(wǎng)站的方法(頒發(fā)證書),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Nginx實現(xiàn)不同域名輸出不同的服務(wù)器頭信息方法
這篇文章主要介紹了Nginx實現(xiàn)不同域名輸出不同的服務(wù)器頭信息方法,本文使用了一個ngx_headers_more模塊實現(xiàn)這個特殊需求,需要的朋友可以參考下2015-02-02Nginx出現(xiàn)403 Forbidden的四種解決方案分享
這篇文章主要給大家分享了關(guān)于Nginx出現(xiàn)403 Forbidden的四種解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09詳解Nginx幾種常見實現(xiàn)301重定向方法上的區(qū)別
本篇文章主要介紹了詳解Nginx幾種常見實現(xiàn)301重定向方法上的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Nginx stream 配置代理(Nginx TCP/UDP 負載均衡)
本文主要介紹了Nginx stream 配置代理(Nginx TCP/UDP 負載均衡),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11