nginx配置自建SSL證書

文章目錄

  • 前言
  • 配置SSL證書
  • SSL證書放在 Nginx 而不放在應用服務器上的好處
  • Nginx只能轉發http協議嗎
  • Nginx轉發TCP協議會收到端口限制嗎
  • Nginx本身能將Websocket數據轉化成TCP數據嗎
  • 總結

前言

之前的一篇文章《自建CA并生成自簽名SSL證書》中講到為什么要自建CA和自簽名SSL證書,是因為買證書得花錢,對于內部或小規模項目,使用自建SSL證書可能更為方便,不需要支付費用,而且不涉及復雜的驗證過程。正式對外的服務一般都是要買公共證書頒發機構(CA)簽發的SSL證書的,但是在對外發布前可以先使用自建證書打通流程

配置SSL證書

創建SSL證書的流程參考上文中提到的文章吧,本文只講怎樣把自建SSL證書配置到nginx,實際上非常簡單。

假設我們的自建證書是 /root/ca/server.crt,服務器私鑰是 /root/ca/server.key,nginx配置文件我以《記錄一下第一次安裝和配置Nginx》 這篇文章的配置文件為例,初始配置為:

upstream go_entrance {server localhost:4101;server localhost:4102;
}server {listen       4100;server_name  localhost;location / {proxy_pass http://go_entrance;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

4100端口監聽http協議轉發到本機的4101端口和4102端口,如果把SSL證書配置到這個端口上,就相當于這個端口支持了https,配置修改如下:

upstream go_entrance {server localhost:4101;server localhost:4102;
}server {listen 4100 ssl;server_name  localhost;ssl_certificate /root/ca/server.crt;ssl_certificate_key /root/ca/server.key;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on; location / { proxy_pass http://go_entrance;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}   
}

只需要將4100端口后面加上 ssl,再配置幾個ssl相關的參數就可以了,含義如下:

  • ssl_certificate: 指定 SSL 證書文件路徑 /root/ca/server.crt

  • ssl_certificate_key: 指定私鑰文件路徑 /root/ca/server.key

  • ssl_session_cache: 配置用于存儲 SSL 會話的緩存。shared:SSL:10m 表示使用共享的內存區域,最大占用內存為 10MB

  • ssl_session_timeout: 配置 SSL 會話的超時時間,這里設置為 10 分鐘

  • ssl_protocols: 指定支持的 SSL/TLS 協議版本,這里包括 TLSv1、TLSv1.1 和 TLSv1.2

  • ssl_ciphers: 指定支持的加密套件,這里配置為 HIGH:!aNULL:!MD5,表示使用高強度的加密套件,不支持空加密和 MD5

SSL證書放在 Nginx 而不放在應用服務器上的好處

正如上面的配置一樣,4100端口收到https請求后轉發到4101和4102上的是http協議,說明使用這種方式一些僅支持http協議的應用服務也可以通過nginx配置證書來達到支持https的目的,具體好處如下:

  • 集中管理: 使用反向代理服務器管理 SSL 證書可以實現集中式管理。這意味著你可以在一個地方管理證書,而不需要在每個應用服務器上都安裝和維護證書。這樣能夠簡化證書的更新和維護流程。

  • 簡化配置: 通過在反向代理服務器上配置 SSL,你可以簡化應用服務器的配置。應用服務器可以專注于處理應用程序邏輯,而無需關心 SSL 配置。這樣有助于提高系統的可維護性和簡化配置過程。

  • 負載均衡和擴展: 如果你使用負載均衡,SSL終止(SSL Termination)在負載均衡器上執行可以減輕應用服務器的負擔。負載均衡器負責處理SSL握手,將非加密的請求轉發給后端應用服務器。這樣,后端服務器就可以專注于處理業務邏輯,而無需處理加密和解密操作。

  • 性能優化: SSL 握手和加解密操作可能是計算密集型的任務,將這些任務從應用服務器中移除,可以在 SSL 握手和加解密方面提高性能。

  • 統一的安全策略: 通過在反向代理服務器上管理 SSL,可以實施統一的安全策略,確保所有傳入和傳出的流量都經過相同的安全設置。

Nginx只能轉發http協議嗎

不,Nginx 不僅僅能夠轉發 HTTP 協議,還支持其他多種協議的代理轉發。主要的協議包括:

  • HTTPS協議: 通過在配置中啟用 SSL/TLS,Nginx 可以用作安全的 HTTPS 服務器和反向代理,處理加密的 HTTP 流量。

    listen 443 ssl;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private-key.key;location / {proxy_pass https://backend_server;
    }
    
  • TCP協議: 從1.9版本開始 Nginx 可以用于代理 TCP 流量,例如數據庫連接、消息隊列等。

    stream {server {listen 3306;proxy_pass backend_server:3306;}
    }
    
  • UDP協議: 從Nginx 1.9.13版本開始,開始支持 UDP 代理。這使得它可以用于代理 UDP 流量,如 DNS 請求等。

    stream {server {listen 53 udp;proxy_pass backend_dns_server:53;}
    }
    
  • WebSocket協議: WebSocket 是一種在單個 TCP 連接上提供全雙工通信的協議,常用于實時應用程序,如在線游戲、聊天應用等。

    map $http_upgrade $connection_upgrade {default upgrade;''      close;
    }server {listen 80;server_name your_domain.com;location /websocket {proxy_pass http://backend_server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}
    }
    

Nginx轉發TCP協議會收到端口限制嗎

是的,TCP是一種面向連接的全雙工通信的協議,當轉發TCP消息時,Nginx不僅是一個服務器接受客戶端的連接,再它連接應用服務器時還表現成一個客戶端,每個連接需要消耗一個端口,以理論值65535個端口來計算,nginx最多轉發65535個連接,但是可以通過 proxy_bind 來突破限制,或者配置多個IP或虛擬IP也可以。

這種方式還沒測過,感興趣可以參考官方說明的看一下 https://nginx.org/r/proxy_bind

Nginx本身能將Websocket數據轉化成TCP數據嗎

只使用Nginx是做不到的,但是搭配Websockify就可以做到WSS(WebSocket Secure)到 TCP 的轉發

  1. 安裝 Nginx:
    確保你的系統上已經安裝了 Nginx。你可以使用系統包管理器或從 Nginx 官方網站下載并安裝

  2. 安裝 Websockify:
    安裝 Websockify,可以使用 pip 執行以下命令:

    pip install websockify
    
  3. 創建 Websockify 啟動腳本:
    創建一個用于啟動 Websockify 的腳本,例如 start_websockify.sh。腳本內容可能如下所示:

    #!/bin/bash
    websockify --web /path/to/webroot 1234 localhost:5678
    

    這里 1234 是用于 WebSocket 連接的端口,localhost:5678 是實際 TCP 服務的地址

  4. 配置 Nginx:
    修改 Nginx 配置文件,將 WSS 請求轉發到 Websockify 啟動腳本。示例配置如下:

    server {listen 443 ssl;server_name your_domain.com;ssl_certificate /root/ca/server.crt;ssl_certificate_key /root/ca/server.key;location / {proxy_pass http://localhost:1234;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;}
    }
    

    這里的 listen 443 表示監聽 HTTPS 請求,proxy_pass http://localhost:1234 將請求代理到 Websockify 啟動腳本

  5. 啟動服務:
    啟動 Websockify 服務:

    chmod +x start_websockify.sh
    ./start_websockify.sh
    

    啟動 Nginx 服務:

    systemctl start nginx
    
  6. 測試:
    使用支持 WebSocket 的客戶端連接到 WSS 地址,例如 wss://your_domain.com,并驗證是否成功將 WebSocket 請求轉發到 TCP 服務

總結

  • nginx配置自建SSL證書,只需要修改nginx配置文件,在端口后配置添加 ssl 并指定證書和私鑰路徑即可
  • nginx上配置SSL證書可以將證書統一管理,減輕應用服務器加密解密的負擔,專注于業務邏輯開發
  • nginx不僅支持http協議轉發,還支持https、tcp、udp、websocket等協議的轉發
  • nginx轉發tcp協議時會收到端口號個數限制,理論上限6萬,通過proxy_bind可以突破上限
  • nginx搭配websockify可以做到WSS 到 TCP 的轉發

==>> 反爬鏈接,請勿點擊,原地爆炸,概不負責!<<==

寒風終究是刮到我這里了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209344.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

velocity-engine-core是什么?Velocity模板引擎的使用

velocity-engine-core是什么&#xff1f;Velocity模板引擎的使用 1. 常見的模板引擎2. Velocity 的語法3.Velocity的使用 相信在日常開發中或多或少都聽過或者使用過模板引擎&#xff0c;比如熟知的freemarker, thymeleaf等。而模板引擎就是為了實現View和Data分離而產生的。 而…

C++封裝、繼承(單繼承)、多態詳細分析。

系列文章目錄 文章目錄 系列文章目錄摘要一、基本概念二、多態的分類三、多態的實現3.1 類型兼容與函數重寫3.2 動態聯編與靜態聯編3.3 虛函數3.4 動態多態的實現過程 總結參考文獻 摘要 多態性特征是 C中最為重要的一個特征&#xff0c;熟練使用多態是學好 C的關鍵&#xff0…

Kotlin關鍵字二——constructor和init

在關鍵字一——var和val中最后提到了構造函數&#xff0c;這里就學習下構造函數相關的關鍵字: constructor和init。 主要構造(primary constructor) kotlin和java一樣&#xff0c;在定義類時就自動生成了無參構造 // 會生成默認的無參構造函數 class Person{ }與java不同的是…

configure腳本的常用參數

下面是一些常用的configure選項參數及其解釋&#xff1a; --prefix<directory>&#xff1a;指定安裝目錄--with-<package>&#xff1a;指定依賴的外部庫或軟件包--enable-<feature>&#xff1a;啟用某個特性--disable-<feature>&#xff1a;禁用某個特…

原創 | 數據的確權、流通、入表與監管研究(一):數據與確權

作者&#xff1a;張建軍&#xff0c;中國電科首席專家&#xff0c;神州網信技術總監 本文約7100字&#xff0c;建議閱讀10分鐘 本文主要介紹數據與數據分類、數據確權規則、數據的所有權與其他權利等方面內容&#xff0c;并進行案例分析。 2022年12月發布的《關于構建數據基礎制…

Linux 和 macOS 的主要區別在哪幾個方面呢?

(??? )&#xff0c;Hello我是祐言QAQ我的博客主頁&#xff1a;C/C語言&#xff0c;數據結構&#xff0c;Linux基礎&#xff0c;ARM開發板&#xff0c;網絡編程等領域UP&#x1f30d;快上&#x1f698;&#xff0c;一起學習&#xff0c;讓我們成為一個強大的攻城獅&#xff0…

uniapp實戰 —— 彈出層 uni-popup (含vue3子組件調父組件的方法)

效果預覽 彈出的內容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子組件調父組件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

ALSA Compress-Offload API

概述 從 ALSA API 的早期開始&#xff0c;它就被定義為支持 PCM&#xff0c;或考慮到了 IEC61937 等固定比特率的載荷。參數和返回值以幀計算是常態&#xff0c;這使得擴展已有的 API 以支持壓縮數據流充滿挑戰。 最近這些年&#xff0c;音頻數字信號處理器 (DSP) 常常被集成…

git如何配置多個遠程倉庫,并且進行切換

一、配置多個遠程倉庫并進行切換&#xff0c;請按照以下步驟進行操作&#xff1a; 打開命令行終端&#xff0c;并進入您的 Git 倉庫所在的目錄。添加第一個遠程倉庫&#xff0c;使用以下命令&#xff1a;git remote add origin <第一個遠程倉庫的 URL>這里將遠程倉庫命名…

C# .NET平臺提取PDF表格數據,并轉換為txt、CSV和Excel表格文件

處理PDF文件中的內容是比較麻煩的事情&#xff0c;特別是以表格形式呈現的各種數據。為了充分利用這些寶貴的數據資源&#xff0c;我們可以通過程序提取PDF文件中的表格&#xff0c;并將其保存為更易于處理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;從而更方便地對…

leetcode面試經典150題——35 螺旋矩陣

題目&#xff1a; 螺旋矩陣 描述&#xff1a; 給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Redis Geo操作地理位置

Redis Geo 使用場景API列表名詞API列表Springboot使用mavenyamlTest 注意事項 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存儲和操作地理位置信息 使用場景 滴滴打車&#xff1a;這是一個對地理位置精度要求較高的場景。通過使用Redis的GEO功能&#xff0c;滴滴…

12月8日作業

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數&#xff1b;將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷u界面上輸入的賬號是否為"admin"&#xff0c;…

kafka學習筆記--安裝部署、簡單操作

本文內容來自尚硅谷B站公開教學視頻&#xff0c;僅做個人總結、學習、復習使用&#xff0c;任何對此文章的引用&#xff0c;應當說明源出處為尚硅谷&#xff0c;不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;從入門到調優…

Day54力扣打卡

打卡記錄 出租車的最大盈利&#xff08;動態規劃&#xff09; 鏈接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《考慮源網荷效益的峰谷電價與峰谷時段雙層優化模型》

這個標題涉及到電力定價和能源效益的優化模型。讓我來分解一下&#xff1a; 峰谷電價&#xff1a;這是一種電力定價策略&#xff0c;即在一天內不同時間段設定不同的電價。通常&#xff0c;高峰時段&#xff08;需求高&#xff09;的電價相對較高&#xff0c;而低谷時段&#x…

人工智能學習9(LightGBM)

編譯工具&#xff1a;PyCharm 文章目錄 編譯工具&#xff1a;PyCharm lightGBM原理lightGBM的基礎使用案例1&#xff1a;鳶尾花案例2&#xff1a;絕對求生玩家排名預測一、數據處理部分1.數據獲取及分析2.缺失數據處理3.數據規范化4.規范化輸出部分數據5.異常數據處理5.1刪除開…

利用私域運營的四大策略實現企業營銷目標

私域運營指的是企業利用各種網絡技術和工具&#xff0c;以自己的平臺為基礎&#xff0c;建立、維護、更新和升級與用戶的私人關系。這種運營模式讓企業能更準確地了解客戶需求和喜好&#xff0c;通過定制化服務、優惠政策、個性化體驗等方式&#xff0c;獲取更多的客戶價值。相…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了銀牌總結)

感謝 感謝艾兄&#xff08;大佬帶隊&#xff09;、rich師弟&#xff08;師弟通過這次比賽機械轉碼成功、耐心學習&#xff09;、張同學&#xff08;也很有耐心的在學習&#xff09;&#xff0c;感謝開源方案&#xff08;開源就是銀牌&#xff09;&#xff0c;在此基礎上一個月…

基于Lucene的全文檢索系統的實現與應用

文章目錄 一、概念二、引入案例1、數據庫搜索2、數據分類3、非結構化數據查詢方法1&#xff09; 順序掃描法(Serial Scanning)2&#xff09;全文檢索(Full-text Search) 4、如何實現全文檢索 三、Lucene實現全文檢索的流程1、索引和搜索流程圖2、創建索引1&#xff09;獲取原始…