本文示例服務(wù)器環(huán)境:
CentOS 7.2? Apache 2.4? PHP 5.6
如果服務(wù)器環(huán)境不一樣,可能會(huì)有出入。
1. 阿里云申請免費(fèi) CA 證書
如下圖購買免費(fèi) CA 證書,沒什么過多解釋了。

購買成功之后會(huì)在證書控制臺看到補(bǔ)全證書信息的鏈接,點(diǎn)擊去補(bǔ)全即可,如下圖:

如果選擇了“證書綁定的域名在【阿里云的云解析】產(chǎn)品中...”那個(gè)選項(xiàng),是代表要綁定的域名是在當(dāng)前申請證書的這個(gè)阿里云賬戶下,如果不在的話,則需要自己去域名管理處添加一條 TXT 的域名解析記錄,如下圖:

記錄類型,主機(jī)記錄,記錄值都在審核進(jìn)度里顯示,填到域名解析里即可。
域名解析填寫完成之后,點(diǎn)擊上圖最下面右側(cè)的“檢查配置”,如果左側(cè)顯示配置沒問題了,就正式提交審核了。
審核完成后對應(yīng)的證書的狀態(tài)會(huì)變?yōu)椤耙押灠l(fā)”,如下圖:

已簽發(fā)之后,就可以點(diǎn)擊右側(cè)的下載按鈕下載證書,去服務(wù)器配置了。
2. 服務(wù)器配置 CA 證書
Apache 服務(wù)器配置
首先下載證書,如下圖:

下載證書之后,放到 Apache 安裝根目錄(/etc/httpd)下,可以直接在服務(wù)器上使用wget下載,也可以下載到本地,使用 SCP 上傳到阿里云服務(wù)器:
scp Downloads/21427xxxx63xxx1.zip root@xx.1xx.xx6.xxx:/etc/httpd
接下來就和阿里云的指南不一樣了。
下面這兩行你會(huì)發(fā)現(xiàn) httpd.conf 里沒有,因?yàn)?CentOS 已經(jīng)集成了 openssl,我們要做的是手動(dòng)安裝 mod_ssl 模塊。

安裝 mod_ssl 模塊命令如下:
yum install mod_ssl
安裝完成之后,編輯 ssl.conf 文件:
vim /etc/httpd/conf.d/ssl.conf
按下圖配置這四個(gè)位置:

如果網(wǎng)站的默認(rèn)目錄有改過,記得在這個(gè)文件里改一下 443 端口對應(yīng)的網(wǎng)站默認(rèn)目錄和域名。
然后重啟 Apache:
systemctl restart httpd
至此大功告成。
Apache 下 HTTP 默認(rèn)轉(zhuǎn)發(fā)到 HTTPS
如果想要 80 端口的 http 訪問也轉(zhuǎn)發(fā)到 https,打開Apache/conf/httpd.conf,找到 #LoadModule rewrite_module modules/mod_rewrite.so 去掉#號,打開重定向支持,然后找到你網(wǎng)站目錄的<Directory>段,修改其中的 AllowOverride None 為 AllowOverride All,然后重啟 Apache 。
在你網(wǎng)站目錄下放一個(gè).htaccess文件。
編輯器打開.htaccess文件,寫入如下規(guī)則:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
解釋:
%{SERVER_PORT} —— 訪問端口
%{REQUEST_URI} —— 比如如果url是 http://localhost/tz.php,則是指 /tz.php
%{SERVER_NAME} —— 比如如果url是 http://localhost/tz.php,則是指 localhost
以上規(guī)則的意思是,如果訪問的url的端口不是443,且訪問頁面不是tz.php,則應(yīng)用RewriteRule這條規(guī)則。這樣便實(shí)現(xiàn)了:訪問了http://localhost/index.php或者http://localhost/admin/index.php等頁面的時(shí)候會(huì)自動(dòng)跳轉(zhuǎn)到https://localhost/index.php或者https://localhost/admin/index.php,但是訪問http://localhost/tz.php的時(shí)候就不會(huì)做任何跳轉(zhuǎn),也就是說http://localhost/tz.php和https://localhost/tz.php兩個(gè)地址都可以訪問。
Nginx 服務(wù)器配置
如果沒有使用虛擬機(jī),則按照阿里云上的教程配置即可。即
如果使用了虛擬機(jī),則在對應(yīng)虛擬機(jī)配置文件上添加以下紅色語句即可。
server {
listen 80;
listen 443 ssl;
server_name pastdust.com www.***.com;
root /www/web/pastdust_com/public_html;
index index.html index.php index.htm;
error_page 400 /errpage/400.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
ssl_certificate cert/214356952770832.pem;
ssl_certificate_key cert/214356952770832.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
include rewrite/***.conf;
}
Nginx 下 HTTP 轉(zhuǎn)發(fā)到 HTTPS
網(wǎng)站強(qiáng)制訪問https模式,將以下的跳轉(zhuǎn)代碼添加到當(dāng)前網(wǎng)站所有使用的偽靜態(tài)規(guī)則conf文件中,即可實(shí)現(xiàn)所有的http訪問都跳轉(zhuǎn)到https訪問,并且是繼承目錄的,具體實(shí)現(xiàn)方法就是把http模式訪問301重定向到https模式。
if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
完。