banner
小鱼

小鱼's Blog

實現 https 訪問與 Nginx 代理

## 在 VPS 中生成 csr 和 key 以用于 ssl 证書#

當我們要為網站申請 ssl 證書的時候需要準備 csr (證書請求文件), 包含申請證書所需要的相關信息,其中最重要的是域名,填寫的域名必須是你要以 https 方式訪問的那個域名。
比如我要生成 yus.bio 的證書

需要執行

openssl req -new -newkey rsa:2048 -nodes -keyout yus.key -out yus.csr

此命令將會生成兩個文件,cmsky.key 是密鑰文件,小心保存好這個文件,安裝 SSL 證書的時候要用到。需要根據提示輸入相應的信息,如域名等,按照提示一步一步操作,最後生成這兩個文件。

Country Name (2 letter code) [AU]: CN (國家代碼)  
State or Province Name (full name) [Some-State]: Fujian (省)  
Locality Name (eg, city) []: Xiamen (城市)  
Organizat[iON](http://www.idcbaby.com/tag/418)  Name (eg, company) [Internet Widgits Pty Ltd]: Cisco (企業/組織)  
Organizational Unit Name (eg, section) []: IT (部門)  
Common Name (eg, YOUR name) []: yus.bio (域名/請正確填寫)  
Email Address []: (可直接回車)  
Please enter the following ‘extra’ attributes to be sent with your certificate request

A challenge password []: (直接回車)  
An optional company name []: (直接回車)  

其中的 Email Address 和 A challenge password 可以留空,不必填寫,直接回車。以上需要填寫的內容,如果不清楚應該怎麼填寫,除了域名其它的可以按照上面的內容填寫。


image

之後執行命令

cat yus.csr

就會得到 csr 的內容

另外一個 .key 文件,一定不能搞丟 ,安裝的的時候需要用到

## 申請 ssl,獲得證書#

如果是在 name.com 註冊的域名,可以直接激活

首先得添加 dns 的 A 記錄


image

接著在 ssl 的申請界面中


image

將上一步獲取的 yus.csr 的內容 全部 複製到 ssl 申請界面中的 證書簽名請求
點擊下一步

就會得到以下證書


image

其中這個 SERVER CERTIFICATE 就是 pem 證書,將要添加到 VPS 伺服器中

vi yus.pem

將 SERVER CERTIFICATE 、CA CERTIFICATE 、ROOT 中的內容複製進去

最後將 yus.pem 和 yus.key 放到 /home/cert 目錄下

## VPS 中通過 nginx 安裝證書#

### 安裝 Nginx#

查看狀態

sudo systemctl status nginx

通過 apt 安裝

sudo apt-get install nginx -y

啟動
默認安裝目錄為 /etc/nginx

/etc/init.d/nginx start

測試 Nginx 配置是否正確,以後修改配置也常常用到

nginx -t

image

查看 nginx 版本

nginx -v

Nginx 啟動、停止、重啟

service nginx start / stop / restart 

## 修改配置文件#

例如現在需要把部署在 8090 端口的 halo 應用映射到 https 的 443 端口

  • 首先進入 conf.d 目錄,添加 halo.conf 文件
    內容如下
upstream halo {
  server 127.0.0.1:8090;
}
  • 接著進入到 sites-enabled 目錄

刪除默認的 default 文件

添加 halo 文件

vi halo

內容如下

server {
		# https 監聽的端口為 443 
		# http 監聽的端口為 80
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        
        # 需要映射到的域名
		server_name www.yus.bio;

		# pem 證書的路徑
        ssl_certificate "/home/cert/yus.pem";
        
        # 生成的 key 的路徑
        ssl_certificate_key "/home/cert/yus.key";
        
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;


        client_max_body_size 1024m;
        location / {
		        # conf.d 目錄中創建的 .conf 文件名
                proxy_pass http://halo;
                proxy_set_header HOST $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.

        }

}

保存後執行

nginx -t

檢查是否有配置錯誤

### 啟動 nginx#

最後執行

service nginx restart

成功通過域名訪問

Bryce's Blog

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。