目前,咱們經常使用的網站,都已升級到https訪問,並且不少的專家也建議實施全站https,下面記錄了我在升級https過程當中遇到的幾個坑,但願能對後來者有所幫助。php
先展現效果圖 html
要實現https訪問網站,須要理清思路。nginx
1. 申請網站ssl安全證書: 2. 驗證域名全部權api
驗證方式通常分爲:DNS驗證和文件驗證,大多數人可能使用的DNS驗證,由於我沒有備案域名,因此只能採用文件驗證。瀏覽器
3. 下載證書和部署安全
將證書上傳到服務器,並在Nginx服務器中添加https訪問的配置項,基本就能夠訪問了,下面來講說具體的過程。bash
大多數人都是經過阿里雲或者是騰訊雲來申請ssl安全證書的,我本身的服務器也是騰訊雲,由於本身沒有備案,因此使用FreeSSL。服務器
輸入本身想要配置ssl的域名,並輸入郵箱點擊建立便可。網站
填坑:ui
因爲本身沒有備案域名,使用別人分配的二級域名,所以須要選擇文件驗證,而上面的默認是使用DNS驗證,因此出現了錯誤。
點擊建立以後,會在下面展現文件驗證須要的文件、文件夾和文件內容,並在服務器上域名對應的目錄下,建立如圖所示的文件夾和文件,並將內容寫入到文件中,可是會發現訪問域名下的這個文件的時候出現下面的錯誤。
填坑:訪問域名時出現403
由於服務器訪問時出現了403,因此須要查看log錯誤日誌,這個文件是在/var/log/nginx/error.log,查看錯誤日誌,顯示如圖:
緣由是:當前登陸的是root用戶,建立文件和文件夾的時候,默認用戶和用戶組是root,而在Nginx的服務器配置中,默認的訪問用戶是:nginx,因此纔會出現403錯誤,所以須要將建立的文件和文件夾的用戶和用戶組修改成nginx,使用的命令以下:
chown -R nginx:nginx api
複製代碼
如今訪問網站,正常顯示內容了,以下圖:
如今能夠訪問域名了,所以須要在freessl網站驗證,能夠先點檢測,而後再驗證。 驗證成功以後,能夠點擊下載證書,而後將證書上傳到服務器,或者是在服務器中建立對應的文件,而後將內容粘貼過去也行。證書以下:
如今已經將證書上傳到服務器,接着是配置ssl。 在配置ssl以前,咱們能夠建立一個文件夾,專門存儲ssl的證書,這樣全部的證書都是存放在一塊兒,便於管理。 配置Nginx,打開當前域名對應的Nginx配置,修改下面的幾個配置項:
1. 修改監聽端口號,由原來的80改成443
listen 443; #將原來的80改爲443
2. 添加ssl的證書地址和密鑰地址
ssl on; #設置開啓https訪問
ssl_certificate /home/Fly/keys/api.crt; #配置證書位置
ssl_certificate_key /home/Fly/keys/api-private.key; #配置密鑰位置
複製代碼
注意:在配置ssl時,每一個配置項結束以後,須要加上分號,不然重啓Nginx會報錯
完整的Nginx配置以下:
server {
listen 80;
server_name ***.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
set $root /home/wwwroot/api;
ssl on;
ssl_certificate /home/Fly/keys/api.crt;
ssl_certificate_key /home/Fly/keys/api-private.key;
location / {
root $root;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
複製代碼
配置完畢以後,重啓Nginx服務器,命令:
service nginx restart
複製代碼
如今可使用https進行訪問,顯示如圖:
目前咱們在瀏覽器中直接輸入域名的話,默認是http請求,它就會請求到下面的頁面。
因此須要在配置文件中增長一個server,使用rewrite,將全部的http請求重定向到https,配置以下:
server {
listen 80;
server_name xxx.com;
rewrite ^(.*) https://$host$1 permanent; #請求重定向到https
}
複製代碼
重啓Nginx服務器,如今訪問時,全部的請求都會轉到https。
經過這次的操做,明白了Nginx的基本配置和具體的配置項的含義,下次出現問題就不會摸不着頭腦了,固然還有不足之處:目前證書只能使用1年,一年以後須要從新申請證書,比較麻煩,後面研究一下,如何在證書快到期以後,自動從新申請並配置,不須要手動操做。