Nginx配置https原理及實(shí)現(xiàn)過程詳解
使用linux實(shí)用工具certbot來(lái)生成https證書
這個(gè)工具是生成Let's Encrypt證書,
Let's Encrypt數(shù)字證書認(rèn)證機(jī)構(gòu),Let's Encrypt 是由互聯(lián)網(wǎng)安全研究小組(ISRG,一個(gè)公益組織)提供的服務(wù)
提供免費(fèi)的SSL/TLS證書
2015年12月3日,該服務(wù)進(jìn)入公測(cè)階段,正式面向公眾。
2016年4月12日,該項(xiàng)目正式離開Beta階段。
到2016年9月9日,Let's Encrypt 已經(jīng)發(fā)放 1000 萬(wàn)張證書。
因此對(duì)于大部分中小型網(wǎng)站來(lái)說,是一個(gè)值得考慮的選擇。
https配置的步驟
1打開 https://certbot.eff.org/ 選擇對(duì)應(yīng)操作系統(tǒng)與 Web 服務(wù)器
這里我選擇nginx服務(wù)器,CentOS7服務(wù)器上
2執(zhí)行命令,并根據(jù)需要修改相應(yīng)域名參數(shù)。
certbot要通過yum安裝,certbot被打包到epel源中,
所以安裝啟動(dòng)epel庫(kù),安裝epel源查看鏈接
https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F
啟動(dòng)epel源,可以使用手動(dòng)自己?jiǎn)?dòng)epel,也可以借助yum-config-manager命令來(lái)啟動(dòng)
安裝yum-config-manager
yum -y install yum-utils
啟動(dòng)epel
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
3安裝certbot
sudo yum install certbot python2-certbot-nginx
獲取證書的兩種方式:身份驗(yàn)證器和安裝程序
使用webRoot插件進(jìn)行安裝,這個(gè)要求你的服務(wù)器80端口能夠正常被訪問到(這個(gè)域名是屬于你的)
webRoot插件通過certonly和--webroot(或者-w)在命令行上執(zhí)行命令
certbot certonly -w /var/www/example -d www.example.com
certbot certonly -w 可以被http訪問到的webroot目錄 -d 要配置https的域名名稱
上面的 /var/www/example表示的是在nginx配置文件中root根節(jié)點(diǎn)所指向的根路徑
webroot插件的工作原理是為每個(gè)請(qǐng)求的域創(chuàng)建一個(gè)臨時(shí)文件${webroot-path}/.well-known/acme-challenge。
然后,Let的加密驗(yàn)證服務(wù)器發(fā)出HTTP請(qǐng)求,以驗(yàn)證每個(gè)請(qǐng)求的域的DNS是否解析為運(yùn)行certbot的服務(wù)器。
訪問請(qǐng)求如下
66.133.109.36 - - [05/Jan/2016:20:11:24 -0500] "GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
所以我們服務(wù)器需要放通.well-known/acme-challenge這個(gè)訪問路徑
例如,
server
{
listen 80;
server_name www.example.com;
index index.html ;
root /var/www/example;
。。。
location ~ /.well-known {
allow all;
}
}
具體的http配置文件
server
{
listen 80;
server_name www.example.com;
index index.html ;
root /var/www/www.example.com;
location / {
proxy_redirect off;
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
location /nginx_status
{
#stub_status on;
#access_log off;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /data/log/nginx//var/www/www.example.com/-access.log;
error_log /data/log/nginx//var/www/www.example.com/-error.log;
}
執(zhí)行完命令后,https證書就會(huì)生成在/etc/letsencrypt/live目錄下
certbot certonly -w /var/www/example -d www.example.com
比如上面的命令會(huì)生成證書/etc/letsencrypt/live/www.example.com/fullchain.pem
生成證書密鑰文件/etc/letsencrypt/live/www.example.com/privkey.pem
然后我們只需要為該域名加上https配置,我們nginx就配置完成https
https對(duì)應(yīng)443端口
具體https配置文件
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name www.example.com;
index index.html index.htm index.php default.html default.htm default.php;
root /var/www/www.example.com/;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
location / {
proxy_redirect off;
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
include enable-php-pathinfo.conf;
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /data/log/nginx/www.example.com-ssl-access.log;
error_log /data/log/nginx/www.example.com-ssl-error.logs;
}
查看生產(chǎn)的證書
tree /etc/letsencrypt/live/
證書續(xù)簽
Let's Encrypt 生成的免費(fèi)證書為3個(gè)月時(shí)間,但是我們可以無(wú)限次續(xù)簽證書
certbot renew
使用定時(shí)器來(lái)自動(dòng)重新生成證書
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
centos6使用
1獲取certbot客戶端
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
2停止nginx
service nginx stop
3生成證書
./certbot-auto certonly --standalone --email `你的郵箱地址` -d `你的域名地址`
當(dāng)前網(wǎng)站有多個(gè)域名時(shí)需在后面增加,例如
./certbot-auto certonly --standalone --email `你的郵箱地址` -d `你的域名1` -d `你的域名2`
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- nginx配置ssl實(shí)現(xiàn)https的方法示例
- Nginx實(shí)現(xiàn)https網(wǎng)站配置代碼實(shí)例
- nginx配置https加密訪問的詳細(xì)教程
- Nginx域名轉(zhuǎn)發(fā)https訪問的實(shí)現(xiàn)
- 阿里云Nginx配置https實(shí)現(xiàn)域名訪問項(xiàng)目(圖文教程)
- Nginx配置同一個(gè)域名同時(shí)支持http與https兩種方式訪問實(shí)現(xiàn)
- Nginx同時(shí)支持Http和Https的配置詳解
- Nginx反向代理多域名的HTTP和HTTPS服務(wù)的實(shí)現(xiàn)
- 使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼
- nginx如何將http訪問的網(wǎng)站改成https訪問
相關(guān)文章
Debian下搭建Nginx和Tomcat服務(wù)器實(shí)現(xiàn)負(fù)載均衡的方案
這篇文章主要介紹了Debian下搭建Nginx和Tomcat服務(wù)器實(shí)現(xiàn)負(fù)載均衡的方案,其主要思想依然是動(dòng)靜分離并且以Nginx來(lái)進(jìn)行反向代理這樣的路子,需要的朋友可以參考下2015-12-12
阿里云部署Ubuntu 1.4 Flask + WSGI + Nginx 詳解
本文解決的是 Flask 最后一公里的問題:Linux 部署,需要的朋友可以參考下2017-12-12
解決nginx服務(wù)器上發(fā)布的新版本代碼總需要清除瀏覽器緩存問題
這篇文章主要介紹了解決nginx服務(wù)器上發(fā)布的新版本代碼總需要清除瀏覽器緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Nginx訪問本地靜態(tài)資源詳細(xì)步驟(推薦)
Nginx?(engine?x)?是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),這篇文章主要介紹了nginx配置訪問本地靜態(tài)資源,需要的朋友可以參考下2022-12-12
Nginx ssi合并頁(yè)面的具體實(shí)現(xiàn)
nginx的ssi模塊是一種類似于ASP的基于服務(wù)器的網(wǎng)頁(yè)制作技術(shù),本文主要介紹了Nginx ssi合并頁(yè)面的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05

