[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塊
-
全域性塊:配置影響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;
-
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 }
-
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 }
-
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 }
-
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伺服器傳 }