前端開發者必備Nginx知識
nginx在應用程序中的作用
解決跨域
請求過濾
配置gzip
負載均衡
靜態資源服務器
# 正向代理與反向代理
代理
在服務器和客戶端之間假設的一層服務器
將接收客戶端的請求并將它轉發給服務器,然后將服務端的響應轉發給客戶端
::: tip 正向代理
是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。
為我們服務的,即為客戶端服務的,客戶端可以根據正向代理訪問到它本身無法訪問到的服務器資源。
對我們是透明的,對服務端是非透明的,即服務端并不知道自己收到的是來自代理的訪問還是來自真實客戶端的訪問。
:::
::: tip 反向代理
是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
為服務端服務的,反向代理可以幫助服務器接收來自客戶端的請求,幫助服務器做請求轉發,負載均衡等。
對服務端是透明的,對我們是非透明的,即我們并不知道自己訪問的是代理服務器,而服務器知道反向代理在為他服務。
:::
# 基本配置
nginx配置文件的基本結構
events { }
http {
server {
location path { ... }
location path { ... }
}
server { ... }
}
main:nginx的全局配置,對全局生效。
events:配置影響nginx服務器或與用戶的網絡連接。
http:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。
server:配置虛擬主機的相關參數,一個http中可以有多個server。
location:配置請求的路由,以及各種頁面的處理情況。
upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。
# 內置變量
下面是nginx一些配置中常用的內置全局變量,你可以在配置的任何位置使用它們。
# 解決跨域
跨域的定義
同源策略限制了從同一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的重要安全機制。通常不允許不同源間的讀操作。
同源的定義
如果兩個頁面的協議,端口(如果有指定)和域名都相同,則兩個頁面具有相同的源。
nginx解決跨域的原理
例如:
前端server的域名為:fe.server.com
后端服務的域名為:dev.server.com
現在我在fe.server.com對dev.server.com發起請求一定會出現跨域。
現在我們只需要啟動一個nginx服務器,將server_name設置為fe.server.com,然后設置相應的location以攔截前端需要跨域的請求,最后將請求代理回dev.server.com。如下面的配置:
server {
listen 80;
server_name fe.server.com;
location / {
proxy_pass dev.server.com;
}
}
這樣可以完美繞過瀏覽器的同源策略:
fe.server.com訪問nginx的fe.server.com屬于同源訪問,而nginx對服務端轉發的請求不會觸發瀏覽器的同源策略。
# 請求過濾
根據狀態碼過濾
error_page 500 501 502 503 504 506 /50x.html;
location = /50x.html
{
#將跟路徑改編為存放html的路徑。
root /root/static/html;
}
根據URL名稱過濾,精準匹配URL,不匹配的URL全部重定向到主頁。
location / { rewrite ^.*$ /index.html redirect; }
根據請求類型過濾
if ( $request_method !~ ^(GET|POST|HEAD)$ ) { return 403; }
# 配置gzip
對于文本文件,GZip 的效果非常明顯,開啟后傳輸所需流量大約會降至 1/4 ~ 1/3。
啟用gzip同時需要客戶端和服務端的支持,如果客戶端支持gzip的解析,那么只要服務端能夠返回gzip的文件就可以啟用gzip了,我們可以通過nginx的配置來讓服務端支持gzip。
gzip on;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_min_length 1000;
gzip_types text/csv text/xml text/css text/plain text/java application/java application/x-java application/json application/xml;
gzip
開啟或者關閉gzip模塊
默認值為 off
可配置為 on / off
gzip_http_version
啟用 GZip 所需的 HTTP 最低版本
默認值為 HTTP/1.1
gzip_comp_level
壓縮級別,級別越高壓縮率越大,當然壓縮時間也就越長(傳輸快但比較消耗cpu)。
默認值為 1
壓縮級別取值為1-9
gzip_min_length
設置允許壓縮的頁面最小字節數,Content-Length小于該值的請求將不會被壓縮
默認值:0
當設置的值較小時,壓縮后的長度可能比原文件大,建議設置1000以上
gzip_types
要采用gzip壓縮的文件類型(MIME類型)
默認值:text/html(默認不壓縮js/css)
# 負載均衡
用來幫助我們將眾多的客戶端請求合理的分配到各個服務器,以達到服務端資源的充分利用和更少的請求時間
如何實現
Upstream指定后端服務器地址列表
upstream balanceServer {
server 10.1.22.33:12345;
server 10.1.22.34:12345;
server 10.1.22.35:12345;
}
在server中攔截響應請求,并將請求轉發到Upstream中配置的服務器列表。
server {
server_name fe.server.com;
listen 80; l
ocation /api {
proxy_pass http://balanceServer;
}
}
指定分配策略
輪詢策略
默認策略:將所有客戶端請求輪詢分配給服務端,某一臺服務器壓力太大會出現延遲影響本臺機器所服務的用戶
upstream balanceServer {
server 10.1.22.33:12345;
server 10.1.22.34:12345;
server 10.1.22.35:12345;
}
最小連接數策略
請求優先分配給壓力較小的服務器,它可以平衡每個隊列的長度,并避免向壓力大的服務器添加更多的請求
最快響應時間策略
依賴于NGINX Plus,優先分配給響應時間最短的服務器。
upstream balanceServer {
fair;
server 10.1.22.33:12345;
server 10.1.22.34:12345;
server 10.1.22.35:12345;
}
客戶端ip綁定
同一個ip的請求永遠只分配一臺服務器,有效解決了動態網頁存在的session共享問題
upstream balanceServer {
ip_hash;
server 10.1.22.33:12345;
server 10.1.22.34:12345;
server 10.1.22.35:12345;
}
靜態資源服務器
location ~* \.(png|gif|jpg|jpeg)$ {
root /root/static/;
autoindex on;
access_log off;
expires 10h;# 設置過期時間為10小時
}
匹配以png|gif|jpg|jpeg為結尾的請求,并將請求轉發到本地路徑,root中指定的路徑即nginx本地路徑。同時也可以進行一些緩存的設置。
轉自:https://segmentfault.com/a/1190000018454271
Nginx web前端 開發者
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。