一、基本了解
- nginx安裝方式比較多,yum安裝和二進(jìn)制安裝的路徑不同,配置文件路徑在nginx安裝目錄下。
- 默認(rèn)啟動nginx時,使用的配置文件是:安裝路徑/conf/nginx.conf文件。
- 也可以在啟動nginx時,通過-c選項指定其他配置文件啟動。
配置文件類型 | 作用 | 釋義 |
---|---|---|
nginx.conf | nginx的基本配置文件 | 一般都是修改這個配置文件參數(shù)。 |
mime.types | MIME類型關(guān)聯(lián)的擴(kuò)展文件 | 默認(rèn)被包含引用在主配置文件中, 當(dāng)客戶端訪問網(wǎng)站網(wǎng)站、視頻、超鏈接等內(nèi)容時,是該文件起作用。 |
fastcgi.conf | 與fastcgi相關(guān)的配置 | 通用網(wǎng)關(guān)接口配置。 |
proxy.conf | 配置方向代理 | 需要編譯時額外添加該功能。 |
sites.conf | 配置nginx提供的網(wǎng)站,包括虛擬主機(jī) | 需要編譯時額外添加該功能。 |
二、nginx.conf配置參數(shù)
- main配置段:全局配置段。其中main配置段中可能包含event配置段。
- event {}:定義event模型工作特性。enents塊配置參數(shù)
- http {}:定義http協(xié)議相關(guān)的配置
1.配置指令語法如下,需要以分號結(jié)尾。
derective value1 [value2 ...];
2.支持使用變量。
內(nèi)置變量:模塊會提供內(nèi)建變量定義。
自定義變量:set var_name value
2.1 調(diào)試參數(shù)
參數(shù) | 釋義 | 備注 |
---|---|---|
daemon {on|off}; | 是否以守護(hù)進(jìn)程方式運行nginx,調(diào)試時應(yīng)設(shè)置為off | 不實用 |
master_process {on|off}; | 是否以master/worker模型來運行nginx,調(diào)試時可以設(shè)置為off | 默認(rèn)能看到一個master進(jìn)程, 關(guān)閉后只顯示worker進(jìn)程。 不利于業(yè)務(wù),保持默認(rèn)即可。 |
error_log {文件路徑} {級別}; | 配置錯誤日志。 日志級別:info、notice、warn、error、crit、alert、emerg |
推薦使用 |
error_log配置位置 | 格式 | 釋義 |
---|---|---|
file | error_log /error.log error | 這是nginx安裝路徑的相對路徑,也可以寫絕對路徑。推薦使用 |
stderr | error_log stderr error | 輸出標(biāo)準(zhǔn)錯誤日志,前臺顯示。 |
syslog:server=address[,parameter=value] | error_log syslog:server=ip | 把日志記錄到另外一臺服務(wù)器上。 |
memory:size | error_log memory:4G | 記錄到本機(jī)內(nèi)存,存在丟失風(fēng)險。 |
1.daemon參數(shù)用法。
2.master_process參數(shù)用法。
3.error_log參數(shù)用法。
2023/07/17 23:35:05 [error] 16083#0: *2 open() "/usr/local/nginx/html/sdsa" failed (2: No such file or directory), client: 192.168.161.1, server: localhost, reost: "192.168.161.129"
//日志內(nèi)容:
2023/07/17 23:35:05 //時間.
[error] //日志級別.
16083 //作用該客戶端請求的nginx進(jìn)程號.
open() "/usr/local/nginx/html/sdsa" failed (2: No such file or directory) //請求錯誤描述。
client: 192.168.161.1 //請求客戶端。
server: localhost //請求服務(wù)端。
reost: "192.168.161.129" //服務(wù)端IP。
2.2 必配參數(shù)
參數(shù) | 釋義 | 備注 |
---|---|---|
user USERNAME [GROUPNAME]; | 指定運行worker進(jìn)程的用戶和組 | 一般改為nginx用戶。 |
pid /path/to/pid_file; | 指定nginx守護(hù)進(jìn)程的pid文件 | 取消注釋 |
worker_rlimit_nofile {number}; | 設(shè)置所有worker進(jìn)程最大可以打開的文件數(shù),默認(rèn)為1024 | 一般設(shè)置655350 |
worker_rlimit_core {size}; | 指明所有worker進(jìn)程所能夠使用的總體的最大核心文件大小 | 保持默認(rèn)即可 |
1.配置以上參數(shù)。
user nginx;
worker_rlimit_nofile 655350 ;
pid logs/nginx.pid;
2.重啟nginx即可。
nginx -s stop
nginx
2.3 優(yōu)化性能參數(shù)
參數(shù) | 釋義 | 備注 |
---|---|---|
worker_processes {n}; | 啟動n個worker進(jìn)程,可以避免CPU上下文切換。 通常設(shè)置為cpu總核心數(shù)-1 |
與worker_connections參數(shù)配合使用, 兩個參數(shù)共同作用計算nginx對外提供的負(fù)載量。 |
worker_cpu_affinity {cpu編碼}; | 將進(jìn)程綁定到某cpu中,避免頻繁刷新緩存 使用8位二進(jìn)制表示cpu核心。 0000 0001 ,表示第一顆cpu核心。 0000 0010 ,表示第二顆cpu核心。 0000 0100 ,表示第三顆cpu核心編碼。 0000 1000 ,表示第四顆cpu核心。 0001 0000 表示第五顆cpu核心。 0010 0000 ,第六顆cpu核心。 0100 0000 ,表示第七顆cpu核心。 1000 0000 ,表示第八顆cpu核心。 |
示例:worker_cpu_affinity 0001 表示第一個cpu只處理這個進(jìn)程任務(wù)。 |
timer_resolution interval; | 計時器解析度。降低此值,可減少gettimeofday()系統(tǒng)調(diào)用的次數(shù) | 保持默認(rèn) |
worker_priority {number}; | 指明worker進(jìn)程的nice值,number值可選范圍[-20,20]。 | 設(shè)置進(jìn)程運行優(yōu)先級。 nice值越低,優(yōu)先級越高。 |
1.worker_priority參數(shù)示例。
2.4 event{}段配置參數(shù)
參數(shù) | 釋義 | 備注 |
---|---|---|
accept_mutex {off|on}; | master調(diào)度用戶請求至各worker進(jìn)程時使用的負(fù)載均衡鎖。 on表示能讓多個worker輪流地、序列化地去響應(yīng)新請求。 |
保持默認(rèn) |
lock_file file; | accept_mutex用到的互斥鎖鎖文件路徑 | 保持默認(rèn) |
use [epoll | rtsig | select | poll]; | 指明使用的事件模型,建議讓nginx自行選擇 | 保持默認(rèn) |
worker_connections ; | 每個進(jìn)程能夠接受的最大連接數(shù) | 與worker_processes參數(shù)配合使用 |
2.5 網(wǎng)絡(luò)連接參數(shù)
參數(shù) | 釋義 |
---|---|
keepalive_timeout number; | 長連接的超時時長,默認(rèn)為65s |
keepalive_requests number; | 在一個長連接上所能夠允許請求的最大資源數(shù) |
keepalive_disable [msie6|safari|none]; | 為指定類型的UserAgent禁用長連接 |
tcp_nodelay on|off; | 是否對長連接使用TCP_NODELAY選項,為了提升用戶體驗,通常設(shè)為on |
client_header_timeout number; | 讀取http請求報文首部的超時時長 |
client_body_timeout number; | 讀取http請求報文body部分的超時時長 |
send_timeout number; | 發(fā)送響應(yīng)報文的超時時長 |
//案例.
公司開發(fā)了一款app,需要在app上連接服務(wù)器,在服務(wù)器里面下載文件到客戶端里去,但當(dāng)時怎么都下載不下來。
發(fā)現(xiàn)是因為文件太大,所以就把長連接超時時間調(diào)大,但不能調(diào)太大,同時也要雙管齊下,把公司服務(wù)端帶寬調(diào)高。
2.6 fastcgi配置參數(shù)
- 與后端程序交接的橋梁。
- LNMP:php要啟用fpm模型,把一下字段全部取消注釋即可。
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; //定義反向代理
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
2.7 總結(jié)常配參數(shù)
//指定錯誤日志。
error_log {文件路徑} {級別};
//指定運行worker進(jìn)程的用戶。
user nginx
//指定nginx守護(hù)進(jìn)程的pid文件。
pid /path/to/pid_file;
//置所有worker進(jìn)程最大可以打開的文件數(shù)。
worker_rlimit_nofile 655350
//指定nginx最大連接數(shù),兩個參數(shù)值相乘。
worker_processes 3;
worker_connections 1024;
//cpu核心與進(jìn)程綁定。
worker_cpu_affinity 0001 0010 0100;
//設(shè)置進(jìn)程優(yōu)先級。
worker_priority -20;
//設(shè)置長連接。
keepalive_timeout 65;
三、http{}段配置參數(shù)
- http{}段配置是核心,單獨拿出來演示。
- http{…}:配置http相關(guān),由ngx_http_core_module模塊引入。
3.1 配置結(jié)構(gòu)
- nginx的HTTP配置主要包括四個區(qū)塊,結(jié)構(gòu)如下。
- server_name NAME […]; 后面可跟多個主機(jī),名稱可使用正則表達(dá)式或通配符。當(dāng)有多個server時,匹配順序如下:
- 先做精確匹配檢查。
- 左側(cè)通配符匹配檢查,如*.idfsoft.com
- 右側(cè)通配符匹配檢查,如mail.*
- 正則表達(dá)式匹配檢查,如~ ^.*.idfsoft.com$
- default_server
http { //協(xié)議級別
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
upstream { //負(fù)載均衡配置,屬于第三方模塊,可以有多個upstream配置段。
...
}
server { //一個server代表一個網(wǎng)站,可以有多個server配置段。
listen 80; //網(wǎng)站訪問端口。
server_name www.qingjun.com; //網(wǎng)站域名。
location / { //網(wǎng)頁文件路徑。/代表根路徑,也就是/usr/local/nginx/html這個路徑。
root html; //訪問的URI。當(dāng)為root時,需要配合上面的/來查找,時相對路徑;當(dāng)為alias時,直接指定絕對路徑。
index index.html index.htm; //默認(rèn)首頁,從第一個文件開始查找。
}
}
}
3.2 精簡配置網(wǎng)頁
1.不定義location塊,直接指定網(wǎng)頁文件絕對路徑。網(wǎng)頁文件默認(rèn)名稱為index.html。
......
http {
server {
listen 80;
server_name www.qingjun.com;
root /opt; //讓進(jìn)程從/opt目錄下查找網(wǎng)頁文件,這里必須是絕對路徑。
}
}
2.配置網(wǎng)頁文件。
echo 'hehe' > /opt/index.html
3.重啟服務(wù),訪問網(wǎng)頁。
4.修改網(wǎng)頁文件名稱,再訪問查看效果。
3.3 location定義網(wǎng)頁
- location的請求頁面有兩種玩法,一個時根據(jù)root來查找網(wǎng)頁文件,一個是根據(jù)alias來查找網(wǎng)頁文件。
- root path:最終訪問的是,root指定路徑+location指定的uri,組合起來才是完整的前端文件絕對路徑。
- alias path:最終訪問的是,alias后面定義的絕對路徑。
3.3.1 root path用法
1.如下圖,root指定路徑為/usr/local/nginx/html,location指定的uri為/usr/local/nginx/html的相對路徑,所以會從/usr/local/nginx/html路徑下查找index.html文件。
2.指定訪問其他路徑下的index.html網(wǎng)頁文件。
3.指定訪問其他路徑下的非index.html網(wǎng)頁文件。
3.3.1 alias path用法
- 網(wǎng)頁訪問時,需要跟上location后面的uri,才能訪問到alias指定的絕對路徑下的首頁文件。
1.例一。
2.例二。
3.4 監(jiān)聽端口
1.可以通過IP+PORT指定。
2.也可以通過純IP指定,默認(rèn)端口為80.
3.5 配置錯誤頁面
- 可以自定義錯誤頁面。
1.指定錯誤頁面文件地址。
2.定義錯誤頁面文件。
<html>
<head>
<title>hehe</title>
</head>
<body>
<font size="50"><p>How are you today.</p></font>
</body></html>
3.重啟服務(wù),訪問一個不存在的頁面。
4.自定義錯誤返回狀態(tài)碼為200。
http {
server {
listen 192.168.161.129;
server_name www.qingjun.com;
location / {
root html;
index index.html index.htm;
}
}
error_page 404 =200 /404.html;
}
5.自定義錯誤返回調(diào)用其他網(wǎng)址。
<html>
<head>
<title>hehe</title>
</head>
<body>
<a >baidu</a>
</body></html>
2.訪問錯誤網(wǎng)頁,調(diào)用到百度網(wǎng)址。
3.5 自定義日志文件格式
1.修改nginx配置文件。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; //這里的main與上面定義main名稱必須一致。
2.訪問網(wǎng)站,查看輸出的日志。文章來源:http://www.zghlxwxcb.cn/news/detail-577460.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-577460.html
192.168.161.1 - - [18/Jul/2023:04:18:49 +0800] "GET /sda HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58" "-"
//配置文件定義日志參數(shù)與收集的日志數(shù)據(jù)對比:
'$remote_addr:客戶端ip,日志為192.168.161.1
-:-
$remote_user:客戶端用戶,日志為-
[$time_local]:本地時間,日志為 [18/Jul/2023:04:18:49 +0800]
$request" :訪問內(nèi)容,日志為"GET /sda HTTP/1.1"
$status:返回狀態(tài),日志為200
$body_bytes_sent:客戶端發(fā)送的字節(jié)數(shù),日志為0
"$http_referer":客戶端從哪里跳轉(zhuǎn)過來訪問的,日志為-
"$http_user_agent":客戶端訪問的瀏覽器類型,日志為"Mozilla/5.0......Edg/114.0.1823.58"
"$http_x_forwarded_for"':客戶端從哪里轉(zhuǎn)發(fā)過來的,日志為-
到了這里,關(guān)于nginx基本2——配置文件詳解(網(wǎng)頁配置篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!