Web前端必备-Nginx知识汇总
本文已同步到專業技術網站 www.sufaith.com, 該網站專注于前后端開發技術與經驗分享, 包含Web開發、Nodejs、Python、Linux、IT資訊等板塊.
一、Nginx簡介
Nginx是一個高性能、輕量級的Web和反向代理服務器, 其特點是占有內存及資源少、抗并發能力強。Nginx安裝簡單、配置簡潔、啟動快速便捷、支持熱部署、支持 SSL、擁有高度模塊化的設計。
Nginx的主要功能有:
- Web服務器
- 反向代理
- 負載均衡
二、運行和控制Nginx
備注: 以下命令中的 /usr/local/nginx 是nginx二進制文件的絕對路徑,需根據自己實際的安裝路徑而定。1.啟動
/usr/local/nginx/sbin/nginx復制代碼2.重新打開日志文件
/usr/local/nginx/sbin/nginx -s reopen復制代碼3.重新載入配置文件
/usr/local/nginx/sbin/nginx -s reload復制代碼4.停止
/usr/local/nginx/sbin/nginx -s stop復制代碼5.從容停止
(1) 查看進程號
ps -ef|grep nginx復制代碼(2) 殺死進程kill -QUIT <進程號> 或 kill -TERM <進程號>復制代碼
6.強制停止
pkill -9 nginx復制代碼三、Nginx作為Web服務器
Nginx作為Web服務器, 需要定義server虛擬主機,讓這些虛擬主機去處理對于特定域名或IP地址的請求。每個server虛擬主機都定義了 location 指令,location 定義了對于指定的一組 URI 是如何匹配和進行處理的。
1.web服務器基本實例
server {listen 80;server_name www.example.com;location / {root /usr/local/www;index index.html;} }復制代碼參數說明:- server 代表1個虛擬主機,可以有多個
- server_name 匹配請求的指定域名或IP地址
- location 配置請求的路由,匹配對應的URI
- root 查找資源的路徑(文件夾目錄)
- index 默認查找
2.location匹配規則(請求過濾)
(1) 語法server {location 表達式 {} }復制代碼
(2) location表達式的類型
- @ 它定義一個命名的 location,使用在內部定向時,例如 error_page, try_files
- / 通用匹配,任何請求都會匹配到
- = 開頭, 表示精確匹配, 只有請求的url路徑與=后面的字符串完全相等才會匹配到(優先級最高)
- ^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其他location
- ~ 開頭表示區分大小寫的正則匹配
- ~* 開頭表示不區分大小寫的正則匹配
(3) location表達式的優先級
- = 的優先級最高。一旦匹配成功,則不再查找其他匹配項。
- ^~ 類型表達式。一旦匹配成功,則不再查找其他匹配項。
- ~ 和 ~* 的優先級次之。如果有多個location的正則能匹配的話,則使用正則表達式最長的那個。
- 常規字符串匹配類型。按前綴匹配。
3.URL重寫
URL重寫是指: 當請求的URL滿足事先定義好的規則時, 將跳轉/定向到某個規則,比如常見的偽靜態、301重定向、瀏覽器定向等。(1) 語法
- 規則:字符串或者正則來表示想匹配的目標url
- 定向路徑:匹配到規則后要定向的路徑,如果規則里有正則,則可以使用$index來表示正則里的捕獲分組
- 重寫類型:
- last :表示完成rewrite,瀏覽器地址欄URL地址不變
- break;本條規則匹配完成后,終止匹配,不再匹配后面的規則,瀏覽器地址欄URL地址不變
- redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址
- permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
(2) 示例
4.try_files
try_files是指: 按順序檢查文件是否存在,返回第一個找到的文件。如果所有的文件都找不到,會進行一個內部重定向到最后一個參數.(1) 語法
try_files file1 files2 ... uri復制代碼參數說明:- 最后一個參數是回退URI, 且必須存在,否則將會出現內部500錯誤。
- 只有最后一個參數可以引起一個內部重定向,之前的參數只設置內部URI的指向。
- 最后一個參數也可以是一個命名的location。
- 最后一個參數如果不是命名的location那么$args不會自動保留,如果你想保留$args,必須在最后一個參數里明確聲明。示例為:
(2) 示例
- 跳轉到文件
當訪問:www.example.com/test 時會依次查找,若 1.html,2.html 都不存在,最終返回 3.html
- 跳轉到變量
當訪問:www.example.com/test 時會依次查找,若 1.html,2.html 都不存在,則跳轉到命名為abc的location
- vue-router設置HTML5 History 模式時, nginx的配置如下:
5.Gzip配置
server {# 開啟gzip 壓縮gzip on;# 設置gzip所需的http協議最低版本 (HTTP/1.1, HTTP/1.0)gzip_http_version 1.1;# 設置壓縮級別(1-9), 值越大壓縮率越高,同時消耗cpu資源也越多,建議設置在4左右gzip_comp_level 4;# 設置壓縮的最小字節數, 頁面Content-Length獲取gzip_min_length 1000;# 設置壓縮文件的類型 (text/html), 不建議壓縮圖片(如jpg、png本身已壓縮)gzip_types text/plain application/javascript text/css;#配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持)gzip_disable "MSIE [1-6]\."; }復制代碼6.https配置
http {# 配置共享會話緩存大小,視站點訪問情況設定ssl_session_cache shared:SSL:10m;# 配置會話超時時間ssl_session_timeout 10m;server {listen 443;server_name www.example.com;ssl on;# 設置長連接keepalive_timeout 70;# HSTS策略add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;# 證書文件ssl_certificate www.example.com.crt;# 私鑰文件ssl_certificate_key www.example.com.key; # 優先采取服務器算法ssl_prefer_server_ciphers on;# 指定SSL協議ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# 定義算法ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";# 減少點擊劫持add_header X-Frame-Options DENY;# 禁止服務器自動解析資源類型add_header X-Content-Type-Options nosniff;# 防XSS攻擊add_header X-Xss-Protection 1;} }復制代碼四、Nginx作為反向代理服務器
server {listen 80;server_name www.example.com;root html;index index.html; location /test { # 請求hostproxy_set_header Host $http_host;# 請求ipproxy_set_header X-Real-IP $remote_addr;# 請求協議proxy_set_header X-Scheme $scheme;# 代理服務器proxy_pass http://localhost:3000;} }復制代碼當訪問http://www.example.com/test時, nginx會將請求轉發到http://localhost:3000上。五、Nginx作為負載均衡
1.負載均衡的介紹
在服務器集群中,Nginx起到一個代理服務器的角色(即反向代理),為了避免單獨一個服務器壓力過大,將來自用戶的請求轉發給不同的服務器。負載均衡用于從 "upstream" 模塊定義的后端服務器列表中選取一臺服務器接受用戶的請求。2.負載均衡的基本實例
(1) upstream模塊
一個最基本的upstream模塊如下:
在upstream模塊配置完成后,要讓指定的訪問反向代理到服務器組。
http {upstream my_server {server localhost:8001;server localhost:8002;server localhost:8003;}server {listen 80;server_name www.example.com;root html;index index.html;location / {# 反向代理到定義好的服務器組my_serverproxy_pass my_server;}} }復制代碼
3. 負載均衡策略
(1) 輪詢(默認方式)
表示每個請求按時間順序逐一分配到不同的后端服務器。
表示在輪詢策略的基礎上指定輪詢的服務器的權重,默認為1,權重越高分配到需要處理的請求越多。
表示指定負載均衡器按照基于客戶端IP的分配方式,這個方法確保了相同的客戶端的請求一直發送到相同的服務器,以保證session會話。這樣每個訪客都固定訪問一個后端服務器,可以解決session不能跨服務器的問題。
- 在nginx版本1.3.1之前,不能在ip_hash中使用權重(weight)。
- ip_hash不能與backup同時使用。
- 此策略適合有狀態服務,比如session。
- 當有服務器需要剔除,必須手動down掉。
(4) least_conn
表示當前的server暫時不參與負載均衡。
表示預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因 此這臺機器的壓力最輕。
轉載于:https://juejin.im/post/5cb0b220f265da03937858ba
總結
以上是生活随笔為你收集整理的Web前端必备-Nginx知识汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何利用手持终端信息化仓储管理呢
- 下一篇: 科大讯飞的web前端的offer