Nginx 教程(3) SSL 設定

2021-08-15 19:29:41 字數 2933 閱讀 4807

英文:netguru,翻譯:開源中國翻譯

www.oschina.net/translate/nginx-tutorial-ssl-setup

我們將告訴你 nginx 的運作模式、蘊含的概念,怎樣通過調優 nginx 來提高應用效能,或是如何設定它的啟動和執行。

這個教程有三個部分:

建立這個系列,我們希望,一是作為參考書,可以通過快速查詢到相關問題(比如 gzip 壓縮,ssl 等)的解決方式,也可以直接通讀全文。為了獲得更好的學習效果,我們建議你在本機安裝 nginx 並且嘗試進行實踐。

ssl 和 tls

ssl(socket secure layer 縮寫)是一種通過 http 提供安全連線的協議。

ssl 1.0 由 netscape 開發,但由於嚴重的安全漏洞從未公開發布過。ssl 2.0 於 1995 年發布,它存在一些問題,導致了最終的 ssl 3.0 在 1996 年發布。

tls(transport layer security 縮寫)的第乙個版本是作為 ssl 3.0 的公升級版而編寫的。之後 tls 1.1 和 1.2 出來了。現在,就在不久之後,tls 1.3 即將推出(這確實值得期待),並且已經被一些瀏覽器所支援。

從技術上講,ssl 和 tls 是不同的(因為每個協議都描述了協議的不同版本),但其中使用的許多名稱是可以互換的。

基本 ssl/tls 配置

為了處理 https 流量,你需要具有 ssl/tls 證書。你可以通過使用 let』s encrypt 以生成免費的證書。

當你擁有證書之後,你可以通過以下的方式輕易切換至 https:

server

我們也想通過調整配置實現:

請牢記,上述設定總是在變化的。時不時重新更新是個好主意。

ssl_

protocols tlsv1 

tlsv1.1

tlsv1.2

;ssl

_ciphers 

eecdh

+chacha20

:eecdh

+aes128

:rsa

+aes128

:eecdh

+aes256

:rsa

+aes256

:!md5

;ssl_prefer_server

_ciphers on;

server

tls 會話恢復

使用 https,在 tcp 之上需要增加 tls 握手。這大大增加了此前實際資料傳輸的時間。假設你從華沙請求 /image.jpg,並接入到柏林最近的伺服器:

為了在 tls 握手期間節省乙個 roundtrip 時間,以及生成新金鑰的計算開銷,我們可以重用在第乙個請求期間生成的會話引數。客戶端和伺服器可以將會話引數儲存在會話 id 金鑰的後面。在接下來的 tls 握手過程中,客戶端可以傳送會話 id,如果伺服器在快取中仍然有正確的條目,那麼會重用前乙個會話所生成的引數。

server

ocsp stapling

server

security headers

有一些標頭確實值得調整以提供更高的安全性。有關更多關於標頭及其詳細資訊,你絕對應該檢視owasp 專案之安全標頭。

或簡稱 hsts,強制使用者**在向源傳送請求時使用 https。

add_header strict-transport-security "max-age=31536000; includesubdomains; preload";

x-frame-options

表示瀏覽器是否需要在一幀、乙個 iframe 或乙個物件標籤中渲染頁面。

add_header x-frame-options deny;

x-content-type-options

此選項將阻止瀏覽器在判斷檔案型別時嗅探檔案。檔案將會按照 content-type 頭中宣告的格式轉譯。

add_header x-content-type-options nosniff;

server tokens

另乙個很好的做法是在 http 響應頭字段中隱藏有關 web 伺服器的資訊:

server : nginx/1.13.2

實現此功能可以通過禁用 server_tokens 指令:

server_tokens off;

附錄 :: let』s encrypt

安裝

最新的安裝包可以在這裡找到。

為了測試使用暫存環境,不排除速率限制。

生成新證書

certbot certonly 

--webroot 

--webroot

-path 

/var

/www

/netguru

/current

/public/-

d foo

.netguru

.co -d 

bar.

netguru.co

確保能夠正確更新。

certbot renew --dry-run

確保你在 crontab 新增了自動更新。執行 crontab -e,同時新增下邊一行**

3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/nginx -s reload"

檢查 ssl 是否能夠通過 ssllabs 正常執行。

nginx教程(二) nginx安裝教程

目錄 在開始之前 首先,安裝下編譯環境和安裝編譯原始碼所需要的工具和庫,執行命令 yum install gcc gcc c ncurses devel perl 否則,安裝安裝編譯時會報如下錯誤 建立目錄 mk usr local software package 然後進入 cd usr loca...

Nginx教程 一 Nginx入門教程

nginx是一款輕量級的web伺服器 反向 伺服器及電子郵件 imap pop3 伺服器,並在乙個bsd like協議下發行。由俄羅斯的程式設計師igorsysoev所開發,供 大型的入口 及搜尋引擎rambler 俄文 使用。其特點是占有記憶體少,併發能力強,事實上nginx的併發能力確實在同型別...

Nginx安裝教程

nginx 是一款輕量級的 web伺服器 反向 伺服器及電子郵件 imap pop3 伺服器,並在乙個 bsd like 協議下發行。由俄羅斯的程式設計師 igor sysoev 所開發,供 大型的入口 及搜尋引擎 rambler 俄文 使用。其特點是占有 記憶體少,併發能力強,事實上 nginx ...