- nginx安装方式比较多,yum安装和二进制安装的路径不同,配置文件路径在nginx安装目录下。
- 默认启动nginx时,使用的配置文件是:安装路径/conf/nginx.conf文件。
- 也可以在启动nginx时,通过-c选项指定其他配置文件启动。
配置文件类型 | 作用 | 释义 |
---|---|---|
nginx.conf | nginx的基本配置文件 | 一般都是修改这个配置文件参数。 |
mime.types | MIME类型关联的扩展文件 | 默认被包含引用在主配置文件中, 当客户端访问网站网站、视频、超链接等内容时,是该文件起作用。 |
fastcgi.conf | 与fastcgi相关的配置 | 通用网关接口配置。 |
proxy.conf | 配置方向代理 | 需要编译时额外添加该功能。 |
sites.conf | 配置nginx提供的网站,包括虚拟主机 | 需要编译时额外添加该功能。 |
- main配置段:全局配置段。其中main配置段中可能包含event配置段。
- event {}:定义event模型工作特性。enents块配置参数
- http {}:定义http协议相关的配置
1.配置指令语法如下,需要以分号结尾。
derective value1 [value2 ...];
2.支持使用变量。
内置变量:模块会提供内建变量定义。
自定义变量:set var_name value
参数 | 释义 | 备注 |
---|---|---|
daemon {on|off}; | 是否以守护进程方式运行nginx,调试时应设置为off | 不实用 |
master_process {on|off}; | 是否以master/worker模型来运行nginx,调试时可以设置为off | 默认能看到一个master进程, 关闭后只显示worker进程。 不利于业务,保持默认即可。 |
error_log {文件路径} {级别}; | 配置错误日志。 日志级别:info、notice、warn、error、crit、alert、emerg |
推荐使用 |
error_log配置位置 | 格式 | 释义 |
---|---|---|
file | error_log /error.log error | 这是nginx安装路径的相对路径,也可以写绝对路径。推荐使用 |
stderr | error_log stderr error | 输出标准错误日志,前台显示。 |
syslog:server=address[,parameter=value] | error_log syslog:server=ip | 把日志记录到另外一台服务器上。 |
memory:size | error_log memory:4G | 记录到本机内存,存在丢失风险。 |
1.daemon参数用法。
2.master_process参数用法。
3.error_log参数用法。
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"
//日志内容:
2023/07/17 23:35:05 //时间.
[error] //日志级别.
16083 //作用该客户端请求的nginx进程号.
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" //服务端IP。
参数 | 释义 | 备注 |
---|---|---|
user USERNAME [GROUPNAME]; | 指定运行worker进程的用户和组 | 一般改为nginx用户。 |
pid /path/to/pid_file; | 指定nginx守护进程的pid文件 | 取消注释 |
worker_rlimit_nofile {number}; | 设置所有worker进程最大可以打开的文件数,默认为1024 | 一般设置655350 |
worker_rlimit_core {size}; | 指明所有worker进程所能够使用的总体的最大核心文件大小 | 保持默认即可 |
1.配置以上参数。
user nginx;
worker_rlimit_nofile 655350 ;
pid logs/nginx.pid;
2.重启nginx即可。
nginx -s stop
nginx
参数 | 释义 | 备注 |
---|---|---|
worker_processes {n}; | 启动n个worker进程,可以避免CPU上下文切换。 通常设置为cpu总核心数-1 |
与worker_connections参数配合使用, 两个参数共同作用计算nginx对外提供的负载量。 |
worker_cpu_affinity {cpu编码}; | 将进程绑定到某cpu中,避免频繁刷新缓存 使用8位二进制表示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只处理这个进程任务。 |
timer_resolution interval; | 计时器解析度。降低此值,可减少gettimeofday()系统调用的次数 | 保持默认 |
worker_priority {number}; | 指明worker进程的nice值,number值可选范围[-20,20]。 | 设置进程运行优先级。 nice值越低,优先级越高。 |
1.worker_priority参数示例。
参数 | 释义 | 备注 |
---|---|---|
accept_mutex {off|on}; | master调度用户请求至各worker进程时使用的负载均衡锁。 on表示能让多个worker轮流地、序列化地去响应新请求。 |
保持默认 |
lock_file file; | accept_mutex用到的互斥锁锁文件路径 | 保持默认 |
use [epoll | rtsig | select | poll]; | 指明使用的事件模型,建议让nginx自行选择 | 保持默认 |
worker_connections ; | 每个进程能够接受的最大连接数 | 与worker_processes参数配合使用 |
参数 | 释义 |
---|---|
keepalive_timeout number; | 长连接的超时时长,默认为65s |
keepalive_requests number; | 在一个长连接上所能够允许请求的最大资源数 |
keepalive_disable [msie6|safari|none]; | 为指定类型的UserAgent禁用长连接 |
tcp_nodelay on|off; | 是否对长连接使用TCP_NODELAY选项,为了提升用户体验,通常设为on |
client_header_timeout number; | 读取http请求报文首部的超时时长 |
client_body_timeout number; | 读取http请求报文body部分的超时时长 |
send_timeout number; | 发送响应报文的超时时长 |
//案例.
公司开发了一款app,需要在app上连接服务器,在服务器里面下载文件到客户端里去,但当时怎么都下载不下来。
发现是因为文件太大,所以就把长连接超时时间调大,但不能调太大,同时也要双管齐下,把公司服务端带宽调高。
- 与后端程序交接的桥梁。
- 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;
}
//指定错误日志。
error_log {文件路径} {级别};
//指定运行worker进程的用户。
user nginx
//指定nginx守护进程的pid文件。
pid /path/to/pid_file;
//置所有worker进程最大可以打开的文件数。
worker_rlimit_nofile 655350
//指定nginx最大连接数,两个参数值相乘。
worker_processes 3;
worker_connections 1024;
//cpu核心与进程绑定。
worker_cpu_affinity 0001 0010 0100;
//设置进程优先级。
worker_priority -20;
//设置长连接。
keepalive_timeout 65;
- http{}段配置是核心,单独拿出来演示。
- http{…}:配置http相关,由ngx_http_core_module模块引入。
- nginx的HTTP配置主要包括四个区块,结构如下。
- server_name NAME […]; 后面可跟多个主机,名称可使用正则表达式或通配符。当有多个server时,匹配顺序如下:
- 先做精确匹配检查。
- 左侧通配符匹配检查,如*.idfsoft.com
- 右侧通配符匹配检查,如mail.*
- 正则表达式匹配检查,如~ ^.*.idfsoft.com$
- default_server
http { //协议级别
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
upstream { //负载均衡配置,属于第三方模块,可以有多个upstream配置段。
...
}
server { //一个server代表一个网站,可以有多个server配置段。
listen 80; //网站访问端口。
server_name www.qingjun.com; //网站域名。
location / { //网页文件路径。/代表根路径,也就是/usr/local/nginx/html这个路径。
root html; //访问的URI。当为root时,需要配合上面的/来查找,时相对路径;当为alias时,直接指定绝对路径。
index index.html index.htm; //默认首页,从第一个文件开始查找。
}
}
}
1.不定义location块,直接指定网页文件绝对路径。网页文件默认名称为index.html。
......
http {
server {
listen 80;
server_name www.qingjun.com;
root /opt; //让进程从/opt目录下查找网页文件,这里必须是绝对路径。
}
}
2.配置网页文件。
echo 'hehe' > /opt/index.html
3.重启服务,访问网页。
- location的请求页面有两种玩法,一个时根据root来查找网页文件,一个是根据alias来查找网页文件。
- root path:最终访问的是,root指定路径+location指定的uri,组合起来才是完整的前端文件绝对路径。
- alias path:最终访问的是,alias后面定义的绝对路径。
1.如下图,root指定路径为/usr/local/nginx/html,location指定的uri为/usr/local/nginx/html的相对路径,所以会从/usr/local/nginx/html路径下查找index.html文件。
2.指定访问其他路径下的index.html网页文件。
3.指定访问其他路径下的非index.html网页文件。
- 网页访问时,需要跟上location后面的uri,才能访问到alias指定的绝对路径下的首页文件。
1.例一。
1.可以通过IP+PORT指定。
2.也可以通过纯IP指定,默认端口为80.
- 可以自定义错误页面。
1.指定错误页面文件地址。
hehe
How are you today.
3.重启服务,访问一个不存在的页面。
4.自定义错误返回状态码为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;
}
hehe
baidu
2.访问错误网页,调用到百度网址。
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.访问网站,查看输出的日志。
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" "-"
//配置文件定义日志参数与收集的日志数据对比:
'$remote_addr:客户端ip,日志为192.168.161.1
-:-
$remote_user:客户端用户,日志为-
[$time_local]:本地时间,日志为 [18/Jul/2023:04:18:49 +0800]
$request" :访问内容,日志为"GET /sda HTTP/1.1"
$status:返回状态,日志为200
$body_bytes_sent:客户端发送的字节数,日志为0
"$http_referer":客户端从哪里跳转过来访问的,日志为-
"$http_user_agent":客户端访问的浏览器类型,日志为"Mozilla/5.0......Edg/114.0.1823.58"
"$http_x_forwarded_for"':客户端从哪里转发过来的,日志为-