nginx作業原理與配置
文章目錄
- nginx作業原理與配置
- nginx的模塊與作業原理
- nginx的模塊分類
- nginx的作業原理
- nginx的安裝與配置
- nginx安裝
- nginx配置
- nginx的組態檔詳解
- nginx.conf配置詳解
- 用于除錯、定位問題的配置引數
nginx的模塊與作業原理
? nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的作業也非常簡單,僅僅通過查找組態檔將客戶端請求映射到一個location block(location是nginx配置中的一個指令,用于URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的作業,
nginx的模塊分類
? nginx的模塊從結構上分為核心模塊、基礎模塊和第三方模塊
- HTTP模塊、EVENT模塊和MAIL模塊等屬于核心模塊
- HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬于基本模塊
- HTTP Upstream模塊、Request Hash模塊、Notice模塊和HTTP Access Key模塊屬于第三方模塊
用戶根據自己的需要開發的模塊都屬于第三方模塊,正是有了如此多模塊的支撐,nginx的功能才會如此強大
nginx模塊從功能上分為三類,分別是:
- Handlers(處理器模塊),此類模塊直接處理請求,并進行輸出內容和修改headers資訊等操作,handlers處理器模塊一般只能有一個
- Filters(過濾器模塊),此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最后由nginx輸出
- Proxies(代理器模塊),就是nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務比如fastcgi等操作互動,實作服務代理和負載均衡等功能
nginx模塊分為:核心模塊、事件模塊、標準Http模塊、可選Http模塊、郵件模塊、第三方模塊和補丁等
- nginx基本模塊:所謂基本模塊,指的是nginx默認的功能模塊,它們提供的指令,允許你使用定義nginx基本功能的變數,在編譯時不能被禁用,包括:
- 核心模塊:基本功能和指令,如行程管理和安全,常見的核心模塊指令,大部分是放置在組態檔的頂部
- 事件模塊:在Nginx內配置網路使用的能力,常見的events(事件)模塊指令,大部分是放置在組態檔的頂部
- 配置模塊:提供包含機制
nginx的作業原理
nginx的模塊直接被編譯進nginx,因此屬于靜態編譯方式,
啟動nginx后,nginx的模塊被自動加載,與Apache不一樣,首先將模塊編譯為一個so檔案,然后在組態檔中指定是否進行加載,
在決議組態檔時,nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成,
nginx的行程架構:
啟動nginx時,會啟動一個Master行程,這個行程不處理任何客戶端的請求,主要用來產生worker執行緒,一個worker執行緒用來處理n個request,

下圖展示了nginx模塊一次常規的HTTP請求和回應的程序

下圖展示了基本的WEB服務請求步驟

nginx的安裝與配置
nginx安裝
創建系統用戶nginx
[root@localhost ~]# useradd -r -M -s /sbin/nologin nginx
安裝依賴環境
[root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
[root@localhost ~]# yum -y groups mark install 'Development Tools'
上次元資料過期檢查:2:59:11 前,執行于 2021年10月25日 星期一 01時04分32秒,
依賴關系解決,
=============================================================
軟體包 架構 版本 倉庫 大小
=============================================================
安裝組:
Development Tools
事務概要
=============================================================
完畢!
創建日志存放目錄
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx.nginx /var/log/nginx
下載nginx
[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz
--2021-10-25 04:06:16-- http://nginx.org/download/nginx-1.12.0.tar.gz
正在決議主機 nginx.org (nginx.org)...
編譯安裝
[root@localhost src]# ls
debug kernels nginx-1.12.0.tar.gz
[root@localhost src]# tar xf nginx-1.12.0.tar.gz
[root@localhost src]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
[root@localhost nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
nginx配置
服務控制方式,使用nginx命令
配置環境變數
[root@localhost ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@localhost ~]# . /etc/profile.d/nginx.sh
服務控制方式,使用nginx命令
-t 檢查組態檔語法
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
-v 輸出nginx的版本
[root@localhost ~]# nginx -v
nginx version: nginx/1.20.1
-c 指定組態檔的路徑
[root@localhost ~]# nginx -s stop ; nginx -c /opt/nginx.conf ##直接停掉然后啟動
[root@localhost ~]# ps -ef|grep nginx
root 99290 1 0 03:32 ? 00:00:00 nginx: master process nginx -c /opt/nginx.conf
nginx 99291 99290 0 03:32 ? 00:00:00 nginx: worker process
nginx 99292 99290 0 03:32 ? 00:00:00 nginx: worker process
root 101138 1653 0 03:33 pts/0 00:00:00 grep --color=auto nginx
-s 發送服務控制信號,可選值有{stop|quit|reopen|reload}
[root@localhost ~]# nginx -s quit
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
nginx的組態檔詳解
主組態檔:/usr/local/nginx/conf
- 默認啟動nginx時,使用的組態檔是:安裝路徑/conf/nginx.conf檔案
- 可以在啟動nginx時通過-c選項來指定要讀取的組態檔
nginx常見的組態檔及其作用
| 組態檔 | 作用 |
|---|---|
| nginx.conf | nginx的基本組態檔 |
| mime.types | MIME型別關聯的擴展檔案 |
| fastcgi.conf | 與fastcgi相關的配置 |
| proxy.conf | 與proxy相關的配置 |
| sites.conf | 配置nginx提供的網站,包括虛擬主機 |
nginx.conf配置詳解
nginx.conf的內容分為以下幾段:
- main配置段:全域配置段,其中main配置段中可能包含event配置段
- event {}:定義event模型作業特性
- http {}:定義http協議相關的配置
Nginx組態檔示例
[root@localhost ~]# vim /usr/local/nginx/conf
# 全域塊
user www-data; ##用戶
worker_processes 2; ## 默認1,一般建議設成CPU核數1-2倍
error_log logs/error.log; ## 錯誤日志路徑
pid logs/nginx.pid; ## 行程id
# Events塊
events {
# 使用epoll的I/O 模型處理輪詢事件,
# 可以不設定,nginx會根據作業系統選擇合適的模型
use epoll;
# 作業行程的最大連接數量, 默認1024個
worker_connections 2048;
# http層面的keep-alive超時時間
keepalive_timeout 60;
# 客戶端請求頭部的緩沖區大小
client_header_buffer_size 2k;
}
# http塊
http {
include mime.types; # 匯入檔案擴展名與檔案型別映射表
default_type application/octet-stream; # 默認檔案型別
# 日志格式及access日志路徑
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# 允許sendfile方式傳輸檔案,默認為off,
sendfile on;
tcp_nopush on; # sendfile開啟時才開啟,
# http server塊
# 簡單反向代理
server {
listen 80;
server_name domain2.com www.domain2.com;
access_log logs/domain2.access.log main;
# 轉發動態請求到web應用服務器
location / {
proxy_pass http://127.0.0.1:8000;
deny 192.24.40.8; # 拒絕的ip
allow 192.24.40.6; # 允許的ip
}
# 錯誤頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 負載均衡
upstream backend_server {
server 192.168.0.1:8000 weight=5; # weight越高,權重越大
server 192.168.0.2:8000 weight=1;
server 192.168.0.3:8000;
server 192.168.0.4:8001 backup; # 熱備
}
server {
listen 80;
server_name big.server.com;
access_log logs/big.server.access.log main;
charset utf-8;
client_max_body_size 10M; # 限制用戶上傳檔案大小,默認1M
location / {
# 使用proxy_pass轉發請求到通過upstream定義的一組應用服務器
proxy_pass http://backend_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
配置指令:要以分號結尾,語法格式如下:
derective value1 [value2 ...];
支持使用變數:
- 內置變數:模塊會提供內建變數定義
- 自定義變數:
set var_name value
用于除錯、定位問題的配置引數
daemon {on|off}; //是否以守護行程方式運行nginx,除錯時應設定為off
master_process {on|off}; //是否以master/worker模型來運行nginx,除錯時可以設定為off
error_log 位置 級別; //配置錯誤日志

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336209.html
標籤:其他
