前言
大家好,我是老馬。很高興遇到你。
我們為 java 開發者實現了 java 版本的 nginx
https://github.com/houbb/nginx4j
如果你想知道 servlet 如何處理的,可以參考我的另一個專案:
手寫從零實現簡易版 tomcat minicat
壓縮與解壓縮
壓縮伺服器響應,或者對不支援壓縮的客戶端進行解壓縮,以提高交付速度並減少伺服器的開銷。
這一部分描述瞭如何配置響應的壓縮或解壓縮,以及傳送壓縮檔案。
介紹
壓縮響應通常會顯著減小傳輸資料的大小。然而,由於壓縮發生在執行時,它也可能會增加相當大的處理開銷,從而對效能產生負面影響。
NGINX 在將響應傳送給客戶端之前執行壓縮,但不會對已經壓縮的響應進行“雙重壓縮”(例如,透過代理伺服器壓縮的響應)。
啟用壓縮
要啟用壓縮,請使用 gzip 指令,並使用 on 引數。
gzip on;
預設情況下,NGINX 只會壓縮 MIME 型別為 text/html 的響應。要壓縮其他 MIME 型別的響應,請包含 gzip_types 指令並列出其他型別。
gzip_types text/plain application/xml;
要指定響應的最小長度以進行壓縮,請使用 gzip_min_length 指令。預設值為 20 位元組(在此調整為 1000):
gzip_min_length 1000;
預設情況下,NGINX 不會壓縮代理請求的響應(來自代理伺服器的請求)。請求來自代理伺服器的事實是由請求中的 Via 標頭欄位的存在確定的。要配置這些響應的壓縮,請使用 gzip_proxied 指令。該指令具有許多引數,指定 NGINX 應壓縮哪些型別的代理請求。例如,僅對不會在代理伺服器上快取的請求壓縮響應是合理的。為此,gzip_proxied 指令具有引數,指示 NGINX 檢查響應中的 Cache-Control 標頭欄位,並在該值為 no-cache、no-store 或 private 時壓縮響應。此外,必須包括 expired 引數以檢查 Expires 標頭欄位的值。以下是這些引數的設定示例,以及 auth 引數,該引數檢查 Authorization 標頭欄位的存在(授權響應特定於終端使用者,通常不會被快取):
gzip_proxied no-cache no-store private expired auth;
與大多數其他指令一樣,配置壓縮的指令可以包含在 http 上下文或伺服器或位置配置塊中。
壓縮 gzip 的整體配置可能如下所示。
server {
gzip on;
gzip_types text/plain application/xml;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
...
}
啟用解壓縮
一些客戶端不支援使用 gzip 編碼方法的響應。
與此同時,可能希望儲存壓縮資料,或者在執行時壓縮響應並將其儲存在快取中。
為了成功為既接受壓縮資料又不接受壓縮資料的客戶端提供服務,NGINX 可以在傳送給後一種型別的客戶端時實時解壓縮資料。
要啟用執行時解壓縮,請使用 gunzip 指令。
location /storage/ {
gunzip on;
...
}
gunzip 指令可以在與 gzip 指令相同的上下文中指定:
server {
gzip on;
gzip_min_length 1000;
gunzip on;
...
}
請注意,此指令是在一個單獨的模組中定義的,預設情況下可能不包含在 NGINX Open Source 構建中。
傳送壓縮檔案
為了向客戶端傳送檔案的壓縮版本而不是常規版本,請在適當的上下文中將 gzip_static 指令設定為 on。
location / {
gzip_static on;
}
在這種情況下,為了處理對 /path/to/file 的請求,NGINX 嘗試找到併傳送檔案 /path/to/file.gz。
如果檔案不存在,或者客戶端不支援 gzip,則 NGINX 傳送檔案的未壓縮版本。
請注意,gzip_static 指令不啟用實時壓縮。它僅使用由任何壓縮工具預先壓縮的檔案。要在執行時壓縮內容(而不僅僅是靜態內容),請使用 gzip 指令。
此指令是在一個單獨的模組中定義的,預設情況下可能不包含在 NGINX Open Source 構建中。
nginx 系列
從零手寫實現 nginx-01-為什麼不能有 java 版本的 nginx?
從零手寫實現 nginx-02-nginx 的核心能力
從零手寫實現 nginx-03-nginx 基於 Netty 實現
從零手寫實現 nginx-04-基於 netty http 出入參最佳化處理
從零手寫實現 nginx-05-MIME型別(Multipurpose Internet Mail Extensions,多用途網際網路郵件擴充套件型別)
Nginx 實戰-01-nginx ubuntu 安裝筆記
Nginx 實戰-01-nginx windows 安裝筆記
Nginx 實戰-02-nginx proxy_pass 服務代理訪問 使用筆記 ubuntu nodejs
Nginx 實戰-03-nginx 負載均衡
Nginx 實戰-04-nginx 不同的地址訪問不同的服務
Nginx 實戰-05-nginx 反向代理實現域名到指定的 ip
Nginx-01-聊一聊 nginx
Nginx-01-Nginx 是什麼
Nginx-02-為什麼使用 Nginx
Nginx-02-Nginx Ubuntu 安裝 + windows10 + WSL ubuntu 安裝 nginx 實戰筆記
Nginx-02-基本使用
Nginx-03-Nginx 專案架構
Nginx-04-Docker Nginx
Nginx-05-nginx 反向代理是什麼?windows 下如何配置使用 nginx
Nginx-06-nginx 彙總入門介紹