超文本傳輸安全協議(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文本傳輸協議和SSL/TLS的組合,用以提供加密通信及對網絡服務器身份的鑑定。HTTPS鏈接常常被用於萬維網上的交易支付和企業信息系統中敏感信息的傳輸。HTTPS不該與在RFC 2660中定義的安全超文本傳輸協議(S-HTTP)相混。php
HTTPS 目前已是全部注重隱私和安全的網站的首選,隨着技術的不斷髮展,HTTPS 網站已再也不是大型網站的專利,全部普通的我的站長和博客都可以本身動手搭建一個安全的加密的網站。若是訪問的一個網站沒有加密,那麼你輸入的全部賬號密碼都是明文傳輸,能夠被攔截讀取,所以在涉及到隱私和金融等高保密環境,是必需要使用HTTPS加密的。html
目前對咱們來講證書有兩種方式:nginx
如須要受瀏覽器信任的證書安裝方式,能夠看這裏:Nginx開啓SSL支持HTTPS訪問(使用Let's Encrypt免費證書)瀏覽器
先教你自簽名的方式,雖然這個很雞肋,在有免費證書能夠用的狀況下,基本沒人用了:安全
#yum install openssl #yum install openssl-devel
①進入目錄服務器
#cd /usr/local/nginx/conf
②建立服務器RSA私鑰,命令會讓你輸入一個口令:網絡
#openssl genrsa -des3 -out server.key 1024
③建立簽名請求的證書(CSR):這裏會提示輸入省份(State / Province)、城市(City)、域名信息等,重要的是,email必定要是你的域名後綴的。這樣就有一個 csr 文件了,提交給 ssl 提供商的時候就是這個 csr 文件。固然我這裏並無向證書提供商申請,下一步咱們本身簽發了證書。框架
#openssl req -new -key server.key -out server.csr
④在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令:性能
#openssl rsa -in server.key -out server_nopwd.key
⑤標記證書使用上述私鑰和CSR:網站
#openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
到這裏證書已經生成完畢。
server { listen 443; ssl on; ssl_certificate /usr/local/nginx/conf/server.crt; ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key; }
加上括號內的語句,而後重啓nginx。
server { listen 80; server_name www.bnxb.com; rewrite ^(.*) https://$server_name$1 permanent; }
到這裏就配置完成,能夠用https://www.bnxb.com這種方式訪問你的網站了,可是由於這裏是自簽名證書,瀏覽器沒辦法驗證證書真僞,所以若是要去除瀏覽器訪問的證書錯誤提示,能夠把以前生成的server.crt文件使用winscp之類的SSH下載軟件下載下來,導入到你電腦系統的證書管理器就好了,具體方法:控制面板 -> Internet選項 -> 內容 -> 發行者 -> 受信任的根證書頒發機構 -> 導入 -》選擇server.crt。
既然HTTPS能保證安全,爲何全世界大部分網站都仍舊在使用HTTP呢?使用HTTPS協議,對服務器來講是很大的負載開銷。從性能上考慮,我 們沒法作到對於每一個用戶的每一個訪問請求都進行安全加密(固然,Google這種大神除外)。做爲一個普通網站,咱們所追求的只是在進行交易、密碼登錄等操 做時的安全。經過配置Nginx服務器,可使用rewrite來作到這一點。
在https server下加入以下配置:
if ($uri !~* "/logging.php$") { rewrite ^/(.*)$ http://$host/$1 redirect; }
在http server下加入以下配置:
if ($uri ~* "/logging.php$") { rewrite ^/(.*)$ https://$host/$1 redirect; }
這樣一來,用戶會且只會在訪問logging.php的狀況下,纔會經過https訪問。
server { ... listen 443; location \.php$ { ... include fastcgi_params; fastcgi_param HTTPS on; # 多加這一句 } } server { ... listen 80; location \.php$ { ... include fastcgi_params; } }
完畢。