最近在玩微信小程序,手頭有:
- 一臺云服務器:CentOS 7
- 多個一級域名
開發測試過程中,因為某些原因,想要讓手頭的A、B域名同時指向云服務器的443端口,支持HTTPS。
Nginx支持TLS協議的SNI擴展(同一個IP上可以支持多個不同證書的域名),只需要重新安裝Nginx,使其支持TLS即可。
安裝Nginx
1
2
3
4
5
6
|
[root] # wget http://nginx.org/download/nginx-1.12.0.tar.gz [root] # tar zxvf nginx-1.12.0.tar.gz [root] # cd nginx-1.12.0 [root] # ./configure --prefix=/usr/local/nginx --with-http_ssl_module \ --with-openssl=. /openssl-1 .0.1e \ --with-openssl-opt= "enable-tlsext" |
備注:在安裝的過程中發現,云服務器的環境中缺少一些庫,下載后,重新執行Nginx的./configure
指令,具體操作如下:
1
2
3
4
5
6
7
8
9
10
|
[root] # tar zxvf pcre-8.35 [root] # yum -y install gcc [root] # yum -y install gcc-c++ [root] # yum install -y zlib-devel [root] # ./configure --prefix=/usr/local/nginx --with-http_ssl_module \ --with-openssl=. /openssl-1 .0.1e \ --with-openssl-opt= "enable-tlsext" \ --with-pcre=. /pcre-8 .35 |
配置Nginx
在購買域名的時候,如果域名提供商有免費的SSL證書,就直接用;如果沒有的話,可以使用 Let's Encript 生成免費的CA證書。
打開Nginx的配置:vi /etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
... server { listen 443 ssl; listen [::]:443 ssl; server_name abc.com; root /usr/share/nginx/html ; ssl_certificate "/root/keys/abc.com.pem" ; ssl_certificate_key "/root/keys/abc.com.private.pem" ; include /etc/nginx/default .d/*.conf; location / { } error_page 404 /404 .html; location = /40x .html { } error_page 500 502 503 504 /50x .html; location = /50x .html { } } server { listen 443 ssl; listen [::]:443 ssl; server_name def.com; root /usr/share/nginx/html ; ssl_certificate "/root/keys/def.com.pem" ; ssl_certificate_key "/root/keys/def.com.private.pem" ; include /etc/nginx/default .d/*.conf; location / { } error_page 404 /404 .html; location = /40x .html { } error_page 500 502 503 504 /50x .html; location = /50x .html { } } |
配置完成后,重新加載Ngixn:nginx -s reload
申請免費的CA證書
對于沒有SSL證書的情況,可以用下面的方法免費獲得CA證書——Let's Encript。
步驟1: 安裝 Let's Encrypt 官方客戶端——CetBot
1
2
|
[root] # yum install -y epel-releasesudo [root] # yum install -y certbot |
步驟2: 配置Nginx的配置文件,在 Server 模塊(監聽80端口的)添加下面配置:
CertBot在驗證服務器域名的時候,會生成一個隨機文件,然后CertBot的服務器會通過HTTP訪問你的這個文件,因此要確保你的Nginx配置好,以便可以訪問到這個文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
server { listen 80 default_server; ... location ^~ /.well-known /acme-challenge/ { default_type "text/plain" ; root /usr/share/nginx/html ; } location = /.well-known /acme-challenge/ { return 404; } } |
重新加載Nginx: nginx -s reload
步驟3: 申請SSL證書
1
|
[root] # certbot certonly --webroot -w /usr/share/nginx/html/ -d your.domain.com |
安裝過程中,會提示輸入郵箱,用于更新CA證書的。
安裝成功后,默認會在 /etc/letsencrypt/live/your.domain.com/
會生成CA證書。
1
2
|
|-- fullchain.pem |-- privkey.pem |
步驟4: 配置Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
server { listen 443 ssl; listen [::]:443 ssl; server_name def.com; root /usr/share/nginx/html ; ssl_certificate "/etc/letsencrypt/live/your.domain.com/fullchain.pem" ; ssl_certificate_key "/etc/letsencrypt/live/your.domain.com/privkey.pem" ; include /etc/nginx/default .d/*.conf; location / { } error_page 404 /404 .html; location = /40x .html { } error_page 500 502 503 504 /50x .html; location = /50x .html { } } |
配置完,重新加載Nginx
步驟5: 自動更新證書
在命令行先進行模擬更新證書
1
|
certbot renew --dry-run |
如果模擬更新成功,則 使用 crontab -e 命令來啟用自動更新任務:
1
2
|
[root] # crontab -e 30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew .log |
相關參考
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.jianshu.com/p/d40e249774ff?utm_source=tuicool&utm_medium=referral