1. 程式人生 > 其它 >[Linux]Nginx - 基礎知識

[Linux]Nginx - 基礎知識

[Linux]Nginx基礎

目錄

參考:

尚矽谷Nginx教程由淺入深(一套打通丨初學者也可掌握)_嗶哩嗶哩_bilibili

Nginx 配置詳解 | 菜鳥教程 (runoob.com)

(總結)Nginx配置檔案nginx.conf中文詳解 (ha97.com)

Nginx 簡介

Nginx是一款輕量級的Web伺服器反向代理伺服器,作為中介軟體同時也提供了IMAP/POP3/SMTP服務,由於它的記憶體佔用少,啟動極快,高併發能力強,在網際網路專案中廣泛應用。

Nginx 應用

反向代理

  • 正向代理,代理的是客戶端,將客戶端隱藏起來,通過代理訪問外部服務。
  • 反向代理,代理的是伺服器,將伺服器隱藏起來,通過反代對外提供服務。

負載均衡

  • 伺服器硬體效能相同時,反向代理,輪詢。(平均分配)

  • 伺服器硬體效能不同時,反向代理,加權輪詢。(能者多勞)

動靜分離

  • 靜態頁面和動態資源,分離在不同的伺服器,通過反代將資源重定向至相應的伺服器。

Nginx 安裝

yum安裝

通過yum倉庫安裝:

yum install -y nginx

基礎操作:

# 啟動
systemctl start nginx
# 停止
systemctl stop nginx
# 狀態
systemctl status nginx
# 開機自啟動
systemctl enable nginx

下載編譯

先安裝依賴包:

yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl openssl-devel libtool
  • gcc、gcc-c++:GNU Compiler Collection,GNU編譯器套件,包括C、C++、Java、GO語言前端等,也包括了這些語言的庫(libstdc++,libgcj等)

  • make:make 是一個命令工具,它解釋 Makefile 中的規則,在 Makefile檔案中描述了整個工程所有檔案的編譯順序、編譯規則。

  • autoconf:是一個shell指令碼的工具,可以自動地配置軟體原始碼包以適應多種UNIX類系統。由autoconf生成的配置指令碼在執行的時候不需要使用者的手工干預;通常它們甚至不需要手工給出引數以確定系統的型別。其中autoconf需要用到m4,便於生成指令碼。

  • automake:是一個從檔案Makefile.am自動生成Makefile.in的工具。每個Makefile.am基本上是一系列make的巨集定義。生成的Makefile.in,服從GNU Makefile標準。為了生成Makefile.in,automake還需用到perl(它本身就是一個perl程式)。

  • pcre、pcre-devel:PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 相容的正則表示式庫。

  • zlib、zlib-devel:zlib是提供資料壓縮用的函式庫。

  • openssl、openssl-devel:OpenSSL是一個開放原始碼軟體包,應用程式可以使用這個包來進行安全通訊,避免竊聽,同時確認另一端連線者的身份。這個包廣泛被應用在網際網路的網頁伺服器上。

官方網站:nginx: download

wget http://nginx.org/download/nginx-1.20.1.tar.gz

切換到nginx目錄:

cd nginx-1.20.1

解壓:

tar -xzvf nginx-1.20.1.tar.gz

編譯配置,生成makefile:

# 檢視幫助可以輸入 ./configure --help
./configure

編譯:

make

安裝:

make install

安裝驗證

防火牆放行:

firewall-cmd --add-port=80/tcp

Nginx 配置

查詢目錄

查詢配置檔案所在目錄:

nginx -t

配置結構

初始化的配置檔案結構如下

  • /etc/nginx/nginx.conf
...              #全域性塊

events {         #events塊
   ...
}

http      #http塊
{
    ...   #http全域性塊
    server        #server塊
    { 
        ...       #server全域性塊
        location [PATTERN]   #location塊
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全域性塊
}

配置詳情

nginx.conf檔案主要分為五塊:全域性塊、events塊、http塊、server塊、location塊

  1. 全域性塊:配置影響nginx全域性的指令。一般有執行nginx伺服器的使用者組,nginx程序pid存放路徑,日誌存放路徑,配置檔案引入,允許生成worker process數等。

    # 定義nginx執行的使用者和使用者組
    user <username> <groupname> ;
    # 定義nginx工作程序數
    worker_processes auto;
    # 全域性錯誤日誌定義型別,[ debug | info | notice | warn | error | crit ],可放入其他塊中。
    error_log /var/log/nginx/error.log;
    # 程序檔案
    pid /run/nginx.pid;
    
  2. events塊:配置影響nginx伺服器或與使用者的網路連線。有每個程序的最大連線數,選取哪種事件驅動模型處理連線請求,是否允許同時接受多個網路連線,開啟多個網路連線序列化等。

    events {
        accept_mutex on;   #設定網路連線序列化,防止驚群現象發生,預設為on
        multi_accept on;  #設定一個程序是否同時接受多個網路連線,預設為off
        #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections  1024;    #最大連線數,預設為512
    }
    
  3. http塊:可巢狀多個server,配置代理、快取、日誌定義等絕大多數功能和第三方模組的配置。例如檔案定義、日誌自定義、是否使用sendfile傳輸檔案,連線超時時間,但連線請求數等。

    http {
        include       mime.types;   #副檔名與檔案型別對映表
        default_type  application/octet-stream; #預設檔案型別,預設為text/plain
        #access_log off; #取消服務日誌    
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
        access_log log/access.log myFormat;  #combined為日誌格式的預設值
        sendfile on;   #允許sendfile方式傳輸檔案,預設為off,可以在http塊,server塊,location塊。
        sendfile_max_chunk 100k;  #每個程序每次呼叫傳輸數量不能大於設定的值,預設為0,即不設上限。
        keepalive_timeout 65;  #連線超時時間,預設為75s,可以在http,server,location塊。
    
        upstream mysvr {   
          server 127.0.0.1:7878;
          server 192.168.10.121:3333 backup;  #熱備
        }
        error_page 404 https://www.baidu.com; #錯誤頁
        server {
            keepalive_requests 120; #單連線請求上限次數。
            listen       4545;   #監聽埠
            server_name  127.0.0.1;   #監聽地址       
            location  ~*^.+$ {       #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。
               #root path;  #根目錄
               #index vv.txt;  #設定預設頁
               proxy_pass  http://mysvr;  #請求轉向mysvr 定義的伺服器列表
               deny 127.0.0.1;  #拒絕的ip
               allow 172.18.5.54; #允許的ip           
            } 
    
  4. server塊:配置虛擬主機的相關引數,一個http中可以由多個server。

    server {
            keepalive_requests 120; #單連線請求上限次數。
            listen       4545;   #監聽埠
            server_name  127.0.0.1;   #監聽地址       
            location  ~*^.+$ {       #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。
               #root path;  #根目錄
               #index vv.txt;  #設定預設頁
               proxy_pass  http://mysvr;  #請求轉向mysvr 定義的伺服器列表
               deny 127.0.0.1;  #拒絕的ip
               allow 172.18.5.54; #允許的ip           
            } 
    
  5. location塊:配置請求的路由,以及各種頁面的處理情況。

    #對 “/” 啟用反向代理
    location / {
            proxy_pass http://127.0.0.1:88;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            #後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #以下是一些反向代理的配置,可選。
            proxy_set_header Host $host;
            client_max_body_size 10m; #允許客戶端請求的最大單檔案位元組數
            client_body_buffer_size 128k; #緩衝區代理緩衝使用者端請求的最大位元組數,
            proxy_connect_timeout 90; #nginx跟後端伺服器連線超時時間(代理連線超時)
            proxy_send_timeout 90; #後端伺服器資料回傳時間(代理髮送超時)
            proxy_read_timeout 90; #連線成功後,後端伺服器響應時間(代理接收超時)
            proxy_buffer_size 4k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小
            proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的設定
            proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;#設定快取資料夾大小,大於這個值,將從upstream伺服器傳
    }