本文示例服務器環境:
CentOS 7.2? Apache 2.4? PHP 5.6
如果服務器環境不一樣,可能會有出入。
1. 阿里云申請免費 CA 證書
如下圖購買免費 CA 證書,沒什么過多解釋了。
購買成功之后會在證書控制臺看到補全證書信息的鏈接,點擊去補全即可,如下圖:
如果選擇了“證書綁定的域名在【阿里云的云解析】產品中...”那個選項,是代表要綁定的域名是在當前申請證書的這個阿里云賬戶下,如果不在的話,則需要自己去域名管理處添加一條 TXT 的域名解析記錄,如下圖:
記錄類型,主機記錄,記錄值都在審核進度里顯示,填到域名解析里即可。
域名解析填寫完成之后,點擊上圖最下面右側的“檢查配置”,如果左側顯示配置沒問題了,就正式提交審核了。
審核完成后對應的證書的狀態會變為“已簽發”,如下圖:
已簽發之后,就可以點擊右側的下載按鈕下載證書,去服務器配置了。
2. 服務器配置 CA 證書
Apache 服務器配置
首先下載證書,如下圖:
下載證書之后,放到 Apache 安裝根目錄(/etc/httpd)下,可以直接在服務器上使用wget下載,也可以下載到本地,使用 SCP 上傳到阿里云服務器:
scp Downloads/21427xxxx63xxx1.zip root@xx.1xx.xx6.xxx:/etc/httpd
接下來就和阿里云的指南不一樣了。
下面這兩行你會發現 httpd.conf 里沒有,因為 CentOS 已經集成了 openssl,我們要做的是手動安裝 mod_ssl 模塊。
安裝 mod_ssl 模塊命令如下:
yum install mod_ssl
安裝完成之后,編輯 ssl.conf 文件:
vim /etc/httpd/conf.d/ssl.conf
按下圖配置這四個位置:
如果網站的默認目錄有改過,記得在這個文件里改一下 443 端口對應的網站默認目錄和域名。
然后重啟 Apache:
systemctl restart httpd
至此大功告成。
Apache 下 HTTP 默認轉發到 HTTPS
如果想要 80 端口的 http 訪問也轉發到 https,打開Apache/conf/httpd.conf,找到 #LoadModule rewrite_module modules/mod_rewrite.so 去掉#號,打開重定向支持,然后找到你網站目錄的<Directory>段,修改其中的 AllowOverride None 為 AllowOverride All,然后重啟 Apache 。
在你網站目錄下放一個.htaccess文件。
編輯器打開.htaccess文件,寫入如下規則:
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
以上規則的意思是,如果訪問的url的端口不是443,且訪問頁面不是tz.php,則應用RewriteRule這條規則。這樣便實現了:訪問了http://localhost/index.php或者http://localhost/admin/index.php等頁面的時候會自動跳轉到https://localhost/index.php或者https://localhost/admin/index.php,但是訪問http://localhost/tz.php的時候就不會做任何跳轉,也就是說http://localhost/tz.php和https://localhost/tz.php兩個地址都可以訪問。
Nginx 服務器配置
如果沒有使用虛擬機,則按照阿里云上的教程配置即可。即
如果使用了虛擬機,則在對應虛擬機配置文件上添加以下紅色語句即可。
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 轉發到 HTTPS
網站強制訪問https模式,將以下的跳轉代碼添加到當前網站所有使用的偽靜態規則conf文件中,即可實現所有的http訪問都跳轉到https訪問,并且是繼承目錄的,具體實現方法就是把http模式訪問301重定向到https模式。
if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
完。