Nginx配置文件内容即指令讲解

本文详细介绍了Nginx的配置文件内容,包括server块、location块、worker进程模型、事件处理机制以及配置优化。重点讲解了配置worker数量、使用epoll事件处理、配置gzip压缩等功能。此外,还探讨了location的匹配规则和路径路由的写法,以及nginx常用命令的使用。通过对Nginx的深入理解,可以更好地进行服务器性能调优。
摘要由CSDN通过智能技术生成

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;
        }        
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值