Nginx 配置SSL證書


HTTPS和HTTP的區別

1.https協議需要到ca申請證書,一般免費證書很少,需要交費。

2.http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

3.http和https使用的是完全不同的連接方式用的端口也不一樣,前者是80,后者是443。

4.http的連接很簡單,是無狀態的。

5.HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

個人理解

HTTP和HTTPS是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443.HTTPS就是非對稱加密算法,客戶端首先會向服務端發起請求,這時服務端會給客戶端返回一個證書,證書里面包含產生的公鑰,這時,客戶端會隨機產生對稱密鑰,然后用服務端返回的公鑰對該密鑰進行加密,再傳輸給服務端,服務端用本地的私鑰進行解密,得到對稱密鑰。接下來,客戶端和服務端就使用對稱密鑰進行通信了.

免費獲取SSL證書的方式

我們去阿里雲網站獲取免費的SSL證書

點擊購買證書然后按照下圖所示你就能看到免費的SSL證書了

下載證書

  • 這里購買免費的SSL證書,申請完成之后,直接在服務平台下載即可
  • 下載完成后把下載好的證書文件上傳到 /etc/ssl這個目錄中並解壓
  • 一定要注意位置,不然啟動nginx會出現文件沒有找到的錯誤
  • 證書上傳成功后我們要去寫幾處配置 

對wordpress文章內的圖片及后台強制https設置

wordpress上傳的圖片都寫入了絕對地址,也就是啟用https前所有上傳到文章的圖片都是以http://開頭的地址存儲

如果不轉換成https訪問網站時瀏覽器頂部的“小鎖”會在某些瀏覽器顯示安全警告

讓圖片變成https地址很簡單,只需要在當前主題的functions.php文件中添加以下代碼

/* 替換圖片鏈接為 https */
 function my_content_manipulator($content){
     if( is_ssl() ){
         $content = str_replace('http://www.xxx.com/wp-content/uploads', 'https://www.xxx.com/wp-content/uploads', $content);
     }
     return $content;
 }
 add_filter('the_content', 'my_content_manipulator');

開啟登錄和后台https訪問

打開網站根目錄下的wp-config.php文件,在文件底部添加以下代碼

/* 強制后台和登錄使用 SSL */
 define('FORCE_SSL_LOGIN', true);
 define('FORCE_SSL_ADMIN', true);

配置站點目錄的nginx配置文件

把下面配置寫入Nginx的配置文件nginx.conf

網站這時候雖然支持了 HTTPS 訪問,但是也可以使用 HTTP 來訪問

考慮到搜索引擎目前收錄的都是 HTTP 鏈接,需要將http重定向到https

server
 {
  listen 80;
  server_name blog.wgzll.cn;
 access_log logs/access.log main;
 error_log logs/error.log crit;
 rewrite ^(.*) https://$host$1 permanent;
 }
 server
 {
  listen 443;
  server_name blog.wgzll.cn;
  access_log logs/access.log main;
  error_log logs/error.log crit;
  index index.php index.html index.html;
  root /code;
 ssl on;
 ssl_certificate /etc/ssl/4248541_blog.wgzll.cn.pem; #/etc/sll下的.pem文件
  ssl_certificate_key /etc/ssl/4248541_blog.wgzll.cn.key; #/etc/sll下的.key文件
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  location / {
  if (!-e $request_filename)
  {
  rewrite ^(.*)$ /index.php?s=/$1 last;
  }
  }
 location ~ .php$ {
  include fastcgi_params;
  fastcgi_pass unix:/tmp/php-fcgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ {  expires 3d;  access_log off;  }  location ~ ..(js|css)$ {
  expires 3d;
  access_log off;
  }
 }

 

檢查配置文件語法是否正確,然后重啟服務

nginx -t
systemctl restart nginx

 

出現404報錯解決方式

這個是偽靜態的問題,使用朴素鏈接可以解決此問題
網站后台--->設置--->固定鏈接

部署完成

網頁地址欄出現小鎖標志,表示證書安裝成功
SSL數字證書部署在服務器上后,用戶瀏覽器訪問網站時,展示如下

小結

證書安裝完成后,如果網站無法通過https正常訪問
需確認您安裝證書的服務器443端口是否已開啟或被其他工具攔截
如果您使用的是阿里雲ECS服務器,請前往ECS控制台安全組頁面配置放行443端口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM