搜尋
首頁運維Nginxnginx如何設定SSL憑證實現https服務

假如我現在node基本架構如下:

|----项目
| |--- static     # 存放html文件
| | |--- index.html  # index.html
| |--- node_modules  # 依赖包
| |--- app.js     # node 入口文件
| |--- package.json 
| |--- .babelrc    # 转换es6文件

index.html 檔案程式碼如下:

<!doctype html>
<html>
<head>
 <meta charset=utf-8>
 <meta name="referrer" content="never">
 <title>nginx配置https</title>
</head>
<body>
 <div>
  <h2 id="欢迎使用https来访问页面">欢迎使用https来访问页面</h2>
 </div>
</body>
</html>

app.js 程式碼如下:

const koa = require(&#39;koa&#39;);
const fs = require(&#39;fs&#39;);
const path = require(&#39;path&#39;);
const router = require(&#39;koa-router&#39;)();
const koabody = require(&#39;koa-body&#39;);
const static = require(&#39;koa-static&#39;);

const app = new koa();

router.get(&#39;/&#39;, (ctx, next) => {
 // 设置头类型, 如果不设置,会直接下载该页面
 ctx.type = &#39;html&#39;;
 // 读取文件
 const pathurl = path.join(__dirname, &#39;/static/index.html&#39;);
 ctx.body = fs.createreadstream(pathurl);
 next();
});

app.use(static(path.join(__dirname)));

app.use(router.routes());
app.use(router.allowedmethods());

app.listen(3001, () => {
 console.log(&#39;server is listen in 3001&#39;);
});

package.json 程式碼如下;

{
 "name": "uploadandload",
 "version": "1.0.0",
 "description": "",
 "main": "app.js",
 "scripts": {
  "dev": "nodemon ./app.js"
 },
 "author": "",
 "license": "isc",
 "dependencies": {
  "fs": "0.0.1-security",
  "koa": "^2.7.0",
  "koa-body": "^4.1.0",
  "koa-router": "^7.4.0",
  "koa-send": "^5.0.0",
  "koa-static": "^5.0.0",
  "nodemon": "^1.19.0",
  "path": "^0.12.7"
 }
}

然後我在專案的根目錄下執行npm run dev 後,就可以在瀏覽器下訪問http://localhost:3001 了,但是為了我想使用網域存取的話,因此我們可以在hosts檔案下綁定下域名,例如叫xxx.abc.com . hosts檔案如下綁定:

127.0.0.1 xxx.abc.com

因此這個時候我們使用http://xxx.abc.com:3001/ 就可以訪問頁面了,如下所示:

nginx如何設定SSL憑證實現https服務

如上所示,我們就可以訪問頁面了,但是我們有沒有發現,在chrome瀏覽器下顯示http請求是不安全的,因此這個時候我想使用https來訪問就好了,網頁的安全性就得到了保障,但是這個時候如果我什麼都不做,直接使用https去訪問的話是不行的,比如地址:https:/ /xxx.abc.com:3001. 如下圖所示:

nginx如何設定SSL憑證實現https服務

#我們知道使用https存取的話,一般是需要安全性憑證的,因此我們現在的任務是需要使用nginx來設定下安全憑證之類的事情,然後使用https能存取網頁就能達到目標。

nginx設定https服務

1. 首先進入nginx目錄下,使用指令:cd /usr/local/etc/nginx。然後在該目錄下建立 cert資料夾,目的是存放憑證檔案。
使用指令:mkdir cert 如下所示:

nginx如何設定SSL憑證實現https服務

2. 然後我們需要把憑證相關的文件,例如server.crt 和server.key 檔案複製到該cert目錄下。例如如下憑證檔案:

nginx如何設定SSL憑證實現https服務

至於如上憑證是如何生存的,可以請看我上篇文字

移動指令:mv server.key /usr /local/etc/nginx/cert, 例如把server.key 和server.crt檔案都移到/usr/local/etc/nginx/cert目錄下。如下圖所示:

nginx如何設定SSL憑證實現https服務

然後我們再查看下/usr/local/etc/nginx/cert 目錄下,有​​如下文件,如下所示:

nginx如何設定SSL憑證實現https服務

3. nginx的設定

nginx的設定需要加上以下程式碼:

server {
 listen    443 ssl;
 server_name  xxx.abc.com;
 ssl on; // 该配置项需要去掉
 ssl_certificate   cert/server.crt;
 ssl_certificate_key cert/server.key;
 /*
  设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:ssl:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1m可以存放约4000个sessions。
 */
 ssl_session_cache  shared:ssl:1m;
 // 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
 ssl_session_timeout 5m;

 /*
  选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
  这里指定的是openssl库能够识别的写法,你可以通过 openssl -v cipher &#39;rc4:high:!anull:!md5&#39;(后面是你所指定的套件加密算法) 来看所支持算法。
 */
 ssl_ciphers high:!anull:!md5;

 // 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
 ssl_prefer_server_ciphers on;

 location / {
  proxy_pass http://localhost:3001;
 }
}

注意:如上ssl on; 這個設定項需要去掉。假如是如上的配置後,我重新啟動下nginx指令會報錯,如下所示:

nginx如何設定SSL憑證實現https服務

ssl: error:06065064:digital envelope routines:evp_decryptfinal_ex:bad decrypt error :0906a065:pem routines:pem_do_header:bad decrypt 類似這樣的錯,然後透過百度搜尋這個錯誤,透過以下方法可以解決:

進入到該目錄下:cd /usr/local/etc/nginx/ cert 接著執行下面兩句程式碼即可:

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

如下:

nginx如何設定SSL憑證實現https服務

#可以看百度搜尋出來的頁面

然後當我繼續重啟下nginx, 發現還會報錯,報錯訊息如下:

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

然後繼續把ssl on; 這句配置項目去掉就可以了,可能和nginx的版本有關係

#最近升級到 nginx 1.15,reload之後所有帶ssl 的站點都報這個警告了,查了很多資料,最後在github 上面找到了一條相關的英文說明: ( ) 本人英文不好,大概意思應該是說 nginx 1.15 及以後的版本,不需要再寫 ssl on; 了。

去 nginx.conf 刪除 ssl on; 之後,reload,果然沒再報警,目前使用沒啥問題。

我確實理解錯了,應該把 ssl on 改成 listen 443 ssl 這樣才對。

現在我繼續重啟下nginx就ok了,如下圖:

nginx如何設定SSL憑證實現https服務

#但是如上配置後,我們還不能直接使用網域https:// xxx.abc.com/ 訪問了,我們還需要在瀏覽器下把自己之前生成的client.crt 證書安裝上去,在mac系統下操作步驟如下:

#1. 點擊如下啟動台。如下圖所示:

nginx如何設定SSL憑證實現https服務

2. 搜尋鑰匙圈訪問,點擊進去,如下所示

nginx如何設定SSL憑證實現https服務

3. 進入到憑證頁面,把我們之前的client.crt證書會拖進去即可,例如我之前產生的client.crt證書,如下:

nginx如何設定SSL憑證實現https服務

4. 右鍵點選我的證書,然後點選"顯示簡介", 進入到證書詳情頁面後。如下圖所示:

nginx如何設定SSL憑證實現https服務

5. 進入頁面後,使用憑證時,選擇始終信任後,如下圖所示:

nginx如何設定SSL憑證實現https服務

6. 然後退出,可能需要輸入電腦開機密碼,輸入完成,會自動儲存。然後我們在瀏覽器造訪該 https://xxx.abc.com/ 頁面後就可以造訪的到了。如下所示:

nginx如何設定SSL憑證實現https服務

然後我們點擊繼續造訪即可看到頁面了,如下所示:

nginx如何設定SSL憑證實現https服務

如上就是使用nginx 憑證實作本機node https服務了。

但是如上https雖然可以訪問,但是https前面還是顯示不安全的文案; 如下圖所示:

nginx如何設定SSL憑證實現https服務

#

以上是nginx如何設定SSL憑證實現https服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX與Apache:網絡託管和流量管理NGINX與Apache:網絡託管和流量管理Apr 12, 2025 am 12:04 AM

NGINX适合高并发和低资源消耗场景,Apache适用于需要复杂配置和功能扩展的场景。1.NGINX以高性能处理大量并发连接著称。2.Apache以稳定性和丰富模块支持见长。选择时需根据具体需求决定。

NGINX:現代Web應用程序的多功能工具NGINX:現代Web應用程序的多功能工具Apr 11, 2025 am 12:03 AM

NGINXisessentialformodernwebapplicationsduetoitsrolesasareverseproxy,loadbalancer,andwebserver,offeringhighperformanceandscalability.1)Itactsasareverseproxy,enhancingsecurityandperformancebycachingandloadbalancing.2)NGINXsupportsvariousloadbalancingm

NGINX SSL/TLS配置:使用HTTPS確保您的網站NGINX SSL/TLS配置:使用HTTPS確保您的網站Apr 10, 2025 am 09:38 AM

通過Nginx配置SSL/TLS來確保網站安全,需要以下步驟:1.創建基本配置,指定SSL證書和私鑰;2.優化配置,啟用HTTP/2和OCSPStapling;3.調試常見錯誤,如證書路徑和加密套件問題;4.應用性能優化建議,如使用Let'sEncrypt和會話復用。

NGINX面試問題:ACE您的DevOps/System Admin面試NGINX面試問題:ACE您的DevOps/System Admin面試Apr 09, 2025 am 12:14 AM

Nginx是高性能的HTTP和反向代理服務器,擅長處理高並發連接。 1)基本配置:監聽端口並提供靜態文件服務。 2)高級配置:實現反向代理和負載均衡。 3)調試技巧:檢查錯誤日誌和測試配置文件。 4)性能優化:啟用Gzip壓縮和調整緩存策略。

NGINX緩存技術:改善網站性能NGINX緩存技術:改善網站性能Apr 08, 2025 am 12:18 AM

Nginx缓存可以通过以下步骤显著提升网站性能:1)定义缓存区和设置缓存路径;2)配置缓存有效期;3)根据不同内容设置不同的缓存策略;4)优化缓存存储和负载均衡;5)监控和调试缓存效果。通过这些方法,Nginx缓存能减少后端服务器压力,提升响应速度和用户体验。

帶Docker的NGINX:部署和縮放容器化應用程序帶Docker的NGINX:部署和縮放容器化應用程序Apr 07, 2025 am 12:08 AM

使用DockerCompose可以簡化Nginx的部署和管理,通過DockerSwarm或Kubernetes進行擴展是常見的做法。 1)使用DockerCompose定義和運行Nginx容器,2)通過DockerSwarm或Kubernetes實現集群管理和自動擴展。

高級NGINX配置:掌握服務器塊和反向代理高級NGINX配置:掌握服務器塊和反向代理Apr 06, 2025 am 12:05 AM

Nginx的高級配置可以通過服務器塊和反向代理實現:1.服務器塊允許在一個實例中運行多個網站,每個塊獨立配置。 2.反向代理將請求轉發到後端服務器,實現負載均衡和緩存加速。

NGINX性能調整:針對速度和低潛伏期進行優化NGINX性能調整:針對速度和低潛伏期進行優化Apr 05, 2025 am 12:08 AM

Nginx性能調優可以通過調整worker進程數、連接池大小、啟用Gzip壓縮和HTTP/2協議、使用緩存和負載均衡來實現。 1.調整worker進程數和連接池大小:worker_processesauto;events{worker_connections1024;}。 2.啟用Gzip壓縮和HTTP/2協議:http{gzipon;server{listen443sslhttp2;}}。 3.使用緩存優化:http{proxy_cache_path/path/to/cachelevels=1:2k

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器