一、event模块:
用于配置服务器的事件驱动机制的模块。它定义了 Nginx 如何处理并发连接和网络事件,以及如何与底层操作系统的事件机制交互。
1.最大并发连接数:
worker_connections 65536;
2.选择事件驱动:
nginx默认使用epoll时间驱动类型:
use epoll; ##不写默认是epoll
3.互斥锁:
使用互斥锁来限制同时只有一个 worker 进程能够接受新的连接。在高并发环境中可以提高性能和稳定性。在高流量和高并发的情况下,使用 accept_mutex on;
可能会导致性能下降,因为每个 worker 进程在接受新连接时都需要等待互斥锁的释放。
accept_mutex on;#追求稳定打开
4.网络多连接:
当 multi_accept
设置为 on
时,Nginx 的 worker 进程会一次性接受多个新连接,在高并发环境中,可以提高性能。可能会导致某些 worker 进程在某一时刻接受了更多的连接,而其他进程接受较少的连接。这可能会影响负载均衡。(建议设置on,处理高并发)
multi_accept on;
二、http模块:
是用于配置 HTTP 服务器功能的核心模块。定义和管理 HTTP 服务、虚拟主机、反向代理、负载均衡、缓存、访问控制等一系列与 Web 服务器相关的功能。
1.server块 基于域名构建虚拟主机:
1.1 指定子配置文件:
多个服务编写在不同的子配置文件中,可以更好地管理。
mkdir -p /apps/nginx/conf.dvim /apps/nginx/conf/nginx.conf include /apps/nginx/conf.d/*.conf;
1.2 编写子配置文件:
cd /apps/nginx/conf.dvim pc.confserver {listen 80;server_name www.wzw.com;root /apps/nginx/html/pc/;}vim m.confserver {listen 80;server_name m.wzw.com;root /apps/nginx/html/m/;}
1.3 构建数据文件:
1.创建文件夹mkdir /apps/nginx/html/{pc,m}2.构建数据echo pc > /apps/nginx/html/pc/index.html
echo mmm > /apps/nginx/html/m/index.htmlnginx -s reload
1.4 测试:
客户机更改host文件:
vim /etc/hosts192.168.88.100 www.wzw.com m.wzw.com
1.5 基于端口:
更改子配置文件
server{listen 192.168.91.100:80;server_name www.wzw.com;root /data/nginx/html/pc;}server{listen 192.168.91.100:8080;server_name m.wzw.com;root /data/nginx/html/m;
}
1.6 基于IP:
需要添加一块虚拟网卡
ifconfig ens33:0 192.168.88.101
更改子配置文件IP
server{listen 192.168.91.100;server_name www.wzw.com;root /data/nginx/html/pc;}server{listen 192.168.91.101;server_name m.wzw.com;root /data/nginx/html/m;
}
2.alias 设置别名:
server {listen 80;server_name www.wzw.com;location /nwes {root /data/nginx/html/pc/;#相当于追加 将文件夹news追加到/data/nginx/html/pc/news}location /study{alias /mnt/nginx/sports/;#相当于替换访问路径 你访问 study 就是访问/mnt/nginx/sports}
}
3.location:
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配。
3.1 格式:
location [ = | ~ | ~* | ^~ ] uri { ... }
= #需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止立即处理请求
^~ #表示包含正则表达式,并且匹配以指定的正则表达式开头,不区分字符大小写
~ #表示包含正则表达式,并且区分大小写
~* #表示包含正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的uri
\ #表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
#匹配优先级从高到低:
=, ^~ , ~/~* , 不带符号
3.2 案例:
location = / {[ configuration A ]
}
location / {[ configuration B ]
}
location /documents/ {[ configuration C ]
}
location ^~ /images/ {[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}访问路径是 /
访问路径是 /index.html
访问路径是 /documents/document.html
访问路径是 /images/1.gif
访问路径是 /documents/1.jpg
4.access四层控制模块:
location / {allow 192.168.1.0/24;allow 10.1.1.0/16;deny all;
}
匹配了之后就不往下匹配了,所以范围小的往上放
5.验证模块:
server {listen 80;server_name www.wzw.com;root /apps/nginx/html/pc/;location = / {root /apps/nginx/html/pc;
}location /admin{auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}
}
5.1 htpasswd:
此命令来自于 httpd-tools 包,如果没有安装 一下即可
yum -y install httpd-tools
第一次生成文件:
htpasswd -bc 文件路径 姓名 密码 直接将密码跟在后面
第二次生成文件:
htpasswd -b 文件路径 姓名 密码 直接将密码跟在后面
-c 代表新建用户名和密码对应的文件
-b 将密码跟在用户名后
6.自定义错误界面:
server {listen 80;server_name www.wzw.com;root /apps/nginx/html/pc/;error_page 404 /40x.html; location = /40x.html {root /apps/nginx/html/pc/error/;location = / {root /apps/nginx/html/pc; ##当出现404就去找40x.html这个文件
}location /admin{auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}}
6.1 自定义状态码:
server {listen 80;server_name www.wzw.com;error_page 404 =302 /40x.html; #建议使用302location = /40x.html {root /apps/nginx/html/pc/error/;location = / {root /apps/nginx/html/pc;
}location /admin{auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}}
把错误码 404 指定成302 注意此处的 40x.html 需要真实存在建立的页面必须一致
7.日志位置存放:
server {listen 80;server_name www.wzw.com;root /apps/nginx/html/pc/;access_log /apps/nginx/logs/wzw_access.log;##添加日志存放位置location = / {root /apps/nginx/html/pc/;
}location /admin{root /apps/nginx/html/pc/admin.html;auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;
}
}
8.检测文件是否存在:
try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。
server {listen 80;server_name 192.168.88.100;root /apps/nginx/html;location / {root /apps/nginx/html;try_files $uri $uri.html $uri/index.html /about/default.html;
}
}
当test存在时:
当test被删除时,会找到test.html:
没有匹配项时,托底的default:
9.作为下载服务器配置:
server {listen 80;server_name 192.168.88.100;root /apps/nginx/html;location /download {autoindex on; #开启下载服务器autoindex_exact_size on; #开启确切大小autoindex_localtime on; #使用当地时间limit_rate 1024k; #所有人限速1024k,默认单位是字节数alias /opt/download; #别名,当访问download时跳转到/opt/download
}
}mkdir /opt/downloadmount /dev/sr0 /opt/download/
10.其他设置:
limit_except method ... { ... },仅用于location
#限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND,
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
allow 192.168.91.101;
deny all;
}
#除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用
三、高级配置:
1.网页的状态页:
基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态
这里为了安全起见添加了验证模块:
server {listen 80;server_name 192.168.88.100;root /apps/nginx/html/pc/;location /admin{stub_status; #启用statusauth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}
}
1.1.状态信息介绍:
Active connections:
#当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts:
#统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:
#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests:
#统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:
#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing:
#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting:
#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)