Nginx 最全詳解 -萬字圖文總結-

大家好,我是 mikechen。

Nginx 是非常重要的負載均衡中間件,被廣泛應用於大型網站架構,下面我就全面來詳解 Nginx@mikechen

Nginx

Nginx 是一款輕量級的高性能的 Web 服務器和反向代理服務器,是由俄羅斯的程序設計師 Igor Sysoev 所開發。

Nginx 處理高併發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個併發連接數。

Nginx 特點

由於以下這幾點,所以使用 Nginx 非常火,在互聯網項目中廣泛應用。

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 配置含義

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