Nginx 最全詳解 -萬字圖文總結-
大家好,我是 mikechen。
Nginx 是非常重要的負載均衡中間件,被廣泛應用於大型網站架構,下面我就全面來詳解 Nginx@mikechen
Nginx
Nginx 是一款輕量級的高性能的 Web 服務器和反向代理服務器,是由俄羅斯的程序設計師 Igor Sysoev 所開發。
Nginx 處理高併發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個併發連接數。
Nginx 特點
由於以下這幾點,所以使用 Nginx 非常火,在互聯網項目中廣泛應用。
-
相較於 Apache 具有佔有內存少、穩定性高、併發能力強等優勢;
-
Nginx 使用基於事件驅動架構,使得其可以支持數以百萬級別的 TCP 連接;
-
高度的模塊化、擴展性好、和自由軟件許可證、使得第三方模塊層出不窮;
-
Nginx 是一個跨平臺服務器,可以運行在 Linux、Windows、Mac OS 等操作系統上。
Nginx 功能應用
1. 正向代理
正向代理最大的特點是:客戶端非常明確要訪問的服務器地址,服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端,正向代理模式屏蔽或者隱藏了真實客戶端信息。
例如:在大陸訪問 www.google.com,我們需要一個代理服務器,我們通過代理服務器去訪問谷歌,這個過程就是正向代理。
來看個示意圖:
我們可以通過這種方式,訪問原來無法訪問的資源,比如:Google。
2. 反向代理
反向代理,客戶端對代理是無感知的,因爲客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理服務器。
來看個示意圖:
由反向代理服務器去選擇目標服務器獲取數據後,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器 IP 地址。
3. 負載均衡
單個服務器解決不了,我們增加服務器的數量,然後將請求分發到各個服務器上。
來個示意圖:
將用戶訪問的請求,根據負載均衡算法,分發到集羣中的一臺處理服務器,這就是我們說的負載均衡。
4. 動靜分離
爲了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力。
來個示意圖:
Nginx 使用
1.Nginx 官網下載
Nginx 下載地址:https://nginx.org/en/download.html
2. 下載穩定版
如下圖所示:
然後再把 Nginx 的下載包,上傳 Linux 服務器。
3.Nginx 命令
Nginx 常用命令:
nginx -s stop 快速關閉Nginx,可能不保存相關信息,並迅速終止web服務。
nginx -s quit 平穩關閉Nginx,保存相關信息,有安排的結束web服務。
nginx -s reload 因改變了Nginx相關配置,需要重新加載配置而重載。
nginx -s reopen 重新打開日誌文件。
nginx -c filename 爲 Nginx 指定一個配置文件,來代替缺省的。
nginx -t 不運行,僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,並嘗試打開配置文件中所引用到的文件。
nginx -v 顯示 nginx 的版本。
nginx -V 顯示 nginx 的版本,編譯器版本和配置參數。
4.Nginx 目錄結構
├── conf # Nginx所有配置文件的目錄
│ ├── fastcgi.conf # fastcgi相關參數的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始備份文件
│ ├── fastcgi_params # fastcgi的參數文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒體類型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相關參數文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相關參數文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi臨時數據目錄
├── html # Nginx默認站點目錄
│ ├── 50x.html # 錯誤頁面優雅替代顯示文件,例如當出現502錯誤時會調用此頁面
│ └── index.html # 默認的首頁文件
├── logs # Nginx日誌目錄
│ ├── access.log # 訪問日誌文件
│ ├── error.log # 錯誤日誌文件
│ └── nginx.pid # pid文件,Nginx進程啓動後,會把所有進程的ID號寫到此文件
├── proxy_temp # 臨時目錄
├── sbin # Nginx命令目錄
│ └── nginx # Nginx的啓動命令
├── scgi_temp # 臨時目錄
└── uwsgi_temp # 臨時目錄
5.Nginx 配置
Nginx 配置文件所在位置:nginx/conf/nginx.conf。
Nginx 配置結構
main # 全局配置,對全局生效
├── events # 配置影響 nginx 服務器或與用戶的網絡連接
├── http # 配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置
│ ├── upstream # 配置後端服務器具體地址,負載均衡配置不可或缺的部分
│ ├── server # 配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊
│ ├── server
│ │ ├── location # server 塊可以包含多個 location 塊,location 指令用於匹配 uri
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
Nginx 配置含義
-
**全局塊 main:**nginx 的全局配置,對全局生效;
-
**events:**配置影響 nginx 服務器或與用戶的網絡連接;
-
**http:**可以嵌套多個 server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置;
-
**server:**配置虛擬主機的相關參數,一個 http 中可以有多個 server;
-
**location:**配置請求的路由,以及各種頁面的處理情況;
-
**upstream:**配置後端服務器具體地址,負載均衡配置不可或缺的部分。
Nginx 配置文件
worker_processes 1;# worker進程的數量
events { # 事件區塊開始
worker_connections 1024;# 每個worker進程支持的最大連接數
} # 事件區塊結束
http { # HTTP區塊開始
include mime.types;# Nginx支持的媒體類型庫文件
default_type application/octet-stream;# 默認的媒體類型
sendfile on;# 開啓高效傳輸模式
keepalive_timeout 65;# 連接超時
server { # 第一個Server區塊開始,表示一個獨立的虛擬主機站點
listen 80;# 提供服務的端口,默認80
server_name localhost;# 提供服務的域名主機名
location / { # 第一個location區塊開始
root html;# 站點的根目錄,相當於Nginx的安裝目錄
index index.html index.htm;# 默認的首頁文件,多個用空格分開
} # 第一個location區塊結果
error_page 500502503504 /50x.html;# 出現對應的http狀態碼時,使用50x.html迴應客戶
location = /50x.html { # location區塊開始,訪問50x.html
root html;# 指定對應的站點目錄爲html
}
}
6.使用示例
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
#server_name localhost;
server_name 192.168.71.167;
location / {
root html;
#添加下面的一句話
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ayCcuAsPXySx55uSxHFmrA