Nginx配置文件内容
一、查看配置文件内容
一、打开配置文件的命令
1.cd /usr/local/nginx/conf(虚拟机上nginx的配置文件目录)
2.vi nginx.conf(打开配置文件)
二.配置文件的内容
// 这个大括号就代表了一个server
server {
listen 80; // 1.用于监听80端口
server_name localhost; // 2.请求的IP,如果是在Linux系统上可以通过localhost去访问,
如果存在域名,这里也可以填写对应的域名
// 映射(只有满足上满1,2两个条件之后,对应请求进行映射)
location / {
root html; // location后面的"/"是定位到我们的根目录,
即nginx.conf存在的目录,因为conf和html是在同一路径下,
所以只写了相对路径
index index.html index.htm; // 配置了一个默认的页面
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
二、Nginx的进程模型
1.master进程:主进程 (引导者),接受请求之后下发给worker进行去处理,如果woker出现异常退出了,maste就会去启动新的worker去执行操作,master会向worker发送一下信号,去执行某些事情(这行信号就是操作做在控制台上输入的,master下发给worker执行)
2.worker进程:工作进程 (服务者,为master提供服务)
信号
./nginx -s stop // 停止
./nginx -s quit // 退出
./nginx -s reload // 重启
./nginx -t // 检查配置文件
三、配置对应的worker数量
1.配置文件中的worker进程的数量,我们可以对其进行配置
#user nobody;
worker_processes 1; // 配置工作者进程数,默认只有1个
2.配置完成之后我们在sbin目录下使用下面的命令判断配置是否OK
nginx -t
3.之后再sbin目录下使用这个命了之后查看nginx的运行情况,从截图中我们可以看到已经有两个woker进程在运行了
1.nginx -s reload // 配置完成后重启nginx使其生效
2.ps -ef | grep nginx // 查看nginx的运行情况
四、Worker抢占机制
1.当客户发送请求给master,之后master分配给对应的worker,如果存在多个worker进程,就会出现抢占机制,多个worker回去抢占一把锁(accept_mutex)谁抢到谁去执行
六、传统服务器事件处理
1.同步阻塞的处理方式(BIO):当有三个请求进来,这个时候如果只有一个worker进程worker1,如果有三请求,他先回先处理第一个请求,如果第一个请求阻塞了,后年的请求就不会执行了,这个时候后master可以再次fork一个进程,来处理第二个和第三个请求,如果第二个请求阻塞了,第三个请求就不会执行了,所以这个时候master再次fork一个进程来处理第三个请求
2.性能比较低,如果并发达到了几十万,服务器就会开很多进程去处理客户端请求,如果都出现阻塞对于资源开销会很大哦,对于云服务器成本就会增加
7、Nginx事件处理
1.异步非阻塞的处理方式(多路复用器):当这时候我们有三个请求进来,此时我们只有一个woker进程,他会求取处理第一个请求,如果第一个请求阻塞了他就会去处理第二个请求,如果第二个阻塞了,他就会去处理第三个请求,下面的worker2,、3都是一致的
2.nginx默认的事件处理机制:epoll
1.使用epoll的话,一个工作进程可以处理6-8万个请求
2.epoll和处理器的核数和内存有关的,参数越大处理的并发量也就越大
3.Nginx的处理事件方式和传统方式的就不一样了,传统方式有多少个请求就要创建多少个worker进程,Nginx处理方式3-5worker就可以处理数十万个请求
7.设置Nginx中worker参数
1.设置Nginx中worker的并发数(默认1024),不能设置的太高不然我们的cpu老是处于满负荷状态,设置的太少的话用户请求可能会出现卡顿的现象
2.nginx配置文件内容
events {
# 默认使用epoll(可加可不加,因为nginx默认使用的就是epoll)
use epoll;
# 每个worker允许连接的客户端最大连接数,处理并发的数量
worker_connections 1024;
}
8、nginx核心配置文件讲解
1.nginx的配置文件nginx.conf,改配置文件其实就是有很多不同的指令和指令块构成的
1.指令的结尾是一个分号
2.指令块就是一个大括号,将中间的指令包裹起来,大括号的后面是没有分号的
3."#" 是nginx配置文件中的注释符号
4. $ 符号是代表一个参数,例如:$remote_addr,获取nginx的内部参数
5.指令和他后面的值需要至少一个空格分隔
#user nobody; // worker进程在执行的时候,它是由系统中哪
// 个用户去执行的,默认的情况下是nobody,如图b1-1
worker_processes 2; // 这个就是一个指令(设置worker进程的数量)
// 这个数据配置结构中的 main(全局配置)
// worker进程数量可以根据服务器的核心数数量有多少个,
// 就可以设置多少个,如果有别的设备占用了核数,那就是n-1
// nginx的日志级别 debug,info,notice,warn,error,crit;
// debug日志级别最低,crit日志级别最高
#error_log logs/error.log; // 默认日志
#error_log logs/error.log notice; // 日志级别
#error_log logs/error.log info; // 日志级别
#pid logs/nginx.pid; // nginx的一个进程号
events { // 这个event是有一个大括号,这个是一个指令块
# 默认使用epoll(可加可不加,因为nginx默认使用的就是epoll)
use epoll; // 我们一般使用的系统是linux或者是centos最适用的就是epoll,如果是window或者是MacOS都可以修改成对应的操作模式
# 每个worker允许连接的客户端最大连接数,处理并发的数量
worker_connections 10240;
}
http { // 指令块:http相关网络传输的模块
include mime.types; // 导入外部的文件(下面有mime.types的内容),增加代码的可读性,因为types中内容比较多
default_type application/octet-stream; // 默认的type类型
// 自定义日志格式,nginx包含了一些自带的参数和自带的变量,可以通过$符号进行引入
// 对应的nginx的参数解释截图如:图b1-2
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
// 记录请求日志,日志格式如果一般使用默认的,
// 如果log_format的内容修改了,该日志格式也会进行修改
#access_log logs/access.log main;
sendfile on; // 用于文件的高效传输,打开的话,文件传输性能会提升(默认是)
#tcp_nopush on; // 当我们数据包累计到一定大小之后在进行发送,和sendfile配套使用
#keepalive_timeout 0; // 客户端请求服务端的连接的超时时间,默认是0,我们这边配置的是65秒(长连接),在这个时间请求过来不会创建新的连接
keepalive_timeout 65;
#gzip on; // 压缩,对用内容传输进行压缩,例如:html,css,js;
// 使内容体积变小传输速率更快,节约服务器带宽和渲染速度,
// 同时也会消耗服务器cpu的性能
server { // 包含在http指令块中:
listen 88; // 监听的端口号
server_name localhost; // 监听对应的IP或者域名
location / { // 当对应的地址符合上面监听的内容便会路由到location下的对应内容
// 路由规则,也可以通过相应的表达式进行构建
root html;
index index.html index.htm;
}
// 当发生错误的的时候路由到的对应页面
error_page 500 502 503 504 /50x.html;
location = /50x.html { // 和上面一致匹配对应的规则后路由到对应界面
// 路由规则,也可以通过相应的表达式进行构建
root html;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
mime.types文件内容(单独提取出来,然后引入到nginx配置文件中)
types { // 指令块,该指令块中包含了许多http传输的类型
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
// 中间省略了一部分,之后可以去该路径下 "/usr/local/nginx/conf" 查看对应的mime.types文件内容
}
9、nginx常用命令分析
1.关闭nginx的命令(在nginx命令下使用):./nginx -s stop
该命令需要谨慎使用,因为使用了改命令不管请求是否完成都会被关闭
适用场景:当某些非法请求进入或者黑客入侵可以使用这个命令,直接关闭某个服务
2.关闭nginx命令:./nginx -s quit
使用该命令后我们的一些请求正在和nginx正在通信,他不会立即停止,会等待通信结束后再关闭nginx,在这期间其他的请求会被拒绝
适用场景:关闭http请求,如果不是他是 不起作用的
3.配置文件更改后,查看配置文件是否正确:./nginx -t
4.查看nginx的版本号:./nginx -v
5.查看nginx的具体信息,例如:nginx的版本号,gcc版本号,对应的nginx的初始化配置:./nginx -V
6.获取指令帮助文档指令:./nginx -? 或者./nginx -h
10、nginx路径路由的写法已经当同种位置过多的处理方式
1.当我们的server过多的时候都写在nginx.conf阅读性会降低很多,所以我们专门创建一个"capuda.conf"文件将对应的server监听的端口和路由路径全部写到这个文件中,然后在nginx.conf的使用incloud将这个单独封装的配置导入到nginx.conf配置文件中
include capuda.conf
2.下面是另外配置的server的一些规则,即capuda.conf中的内容
server {
listen 90;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /capuda { // "location /"这样子的形式只能存在一种,
//其他的就需要在"/"前添加的名称。例如现在这
// 样子"capuda"会自动拼接到home的后面,即:"/home/capuda"
root /home;
}
location /static{ // 如果路径过长的话我们就可以通过起别名,使用该参数"alias"来实现,当前端地址是"static"会自动路由到"/home/capuda"这个地址
alias /home/capuda
}
}
11、使用Nginx的gzip功能
1.nginx.conf配置文件下开启gzip的,并配置一些对应参数
// 开启 gzip 压缩功能,目的:提高传输效率,节约带宽
gzip on;
// 限制最小压缩,小于1字节文件不会压缩
gzip_min_length 1;
// 定义压缩级别(压缩比,文件越大,压缩越多,但是cpu使用会越多)
gzip_comp_level 3;
// 定义压缩文件的类型
gzip_types text/plain application/x-javascript text/css text/javascript;
12、nginx的location的匹配规则解析
1.精确匹配
server {
listen 92;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
// 加上了等于号“=”代表了精确匹配
location = / {
root html;
index index.html index.htm;
}
// 精确的匹配到face1.png的地址,如果前端输入face2就会报404,因为我们只能精准的匹配到face1图片
location = /capuda/img/face1.png {
root /home;
}
}
2.正则表达式
server {
listen 92;
server_name localhost;
// 正则表达式。*代表不区分大小写,不写*好的话,就要区分大小写
location ~* \.(GIF|png|bmp|jpg|jpeg) {
root /home;
}
}
server {
listen 93;
server_name localhost;
// 以某个字符路径开头请求,
location ^~ /capuda/img {
root /home;
}
}