侧边栏壁纸
博主头像
LYMTICS

海纳百川,有容乃大

  • 累计撰写 45 篇文章
  • 累计创建 37 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

Nginx学习笔记(二):配置文件

LYMTICS
2022-02-11 / 0 评论 / 0 点赞 / 76 阅读 / 7,025 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Nginx学习笔记(二):配置文件

学习资源:

参考了其对应的学习资料,并进行重排、总结和补充。

位置:/usr/local/nginx/conf/nginx.conf

文件结构

# 默认配置且去除了注释后的剩余内容

#全局块,主要设置Nginx服务器整体运行的配置指令
worker_processes  1;

# events块
# 主要设置Nginx服务器与用户的网络连接
# 对Nginx服务器的性能影响较大
events {
    worker_connections  1024;
}

# http块
# 是Nginx服务器配置中的重要部分
# 代理、缓存、日志记录、第三方模块配置...
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

简单小结下:

nginx.conf配置文件中默认有三大块:全局块、events块、http块

http块中可以配置多个server块,每个server块又可以配置多个location块。

全局块

user

用于配置运行Nginx服务器的worker进程的用户和用户组。

语法user user [group]
默认值nobody
位置全局块
作用指定启动运行工作进程的用户及用户组
使对系统的权限访问控制的更加精细,也更加安全

该属性也可以在编译的时候指定,语法如下./configure --user=user --group=group,如果两个地方都进行了设置,最终生效的是配置文件中的配置。

master_process

语法master_process on|off;(需重启)
默认值master_process on;
位置全局块
作用指定是否开启工作进程

work_processes

语法worker_processes num/auto;
默认值1
位置全局块
作用配置Nginx生成工作进程的数量

是Nginx服务器实现并发处理服务的关键所在。理论上来说workder process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致。

daemon

语法daemon on|off;(需重启)
默认值daemon on;
位置全局块
作用设定Nginx是否以守护进程的方式启动

守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。

pid

语法pid file;
默认值默认为:/usr/local/nginx/logs/nginx.pid
位置全局块
作用配置Nginx当前master进程的进程号ID存储的文件路径
安装指定通过./configure --pid-path=PATH来指定

error_log

语法error_log file [日志级别];
默认值error_log logs/error.log error;
位置全局块、http、server、location
作用配置Nginx的错误日志存放路径
安装指定通过./configure --error-log-path=PATH来指定

日志级别的值有:debug|info|notice|warn|error|crit|alert|emerg,翻译过来为试|信息|通知|警告|错误|临界|警报|紧急,这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能。

include

语法include file;
默认值
位置any
作用用来引入其他配置文件,使Nginx的配置更加灵活

events块

accept_mutex

语法accept_mutex on|off;
默认值accept_mutex on;
位置events
作用用来设置Nginx网络连接序列化

这个配置主要可以用来解决常说的"惊群"问题。大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。

multi_accept

语法multi_accept on|off;
默认值multi_accept off;
位置events
作用用来设置是否允许同时接收多个网络连接

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接

worker_connections

语法worker_connections number;
默认值worker_commections 512;
位置events
作用用来配置单个worker进程最大的连接数

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number值不能大于操作系统支持打开的最大文件句柄数量。

use

语法use method;
默认值根据操作系统定
位置events
作用用来设置Nginx服务器选择哪种事件驱动来处理网络消息

此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,之前在准备centos环境的时候,我们强调过要使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx。

另外这些值的选择,我们也可以在编译的时候使用如下参数来设置是否需要将对应的事件驱动模块编译到Nginx的内核:

  • --with-select_module
  • --without-select_module
  • --with-poll_module
  • --without-poll_module

http块

MIME_TYPE

在Nginx的配置文件中,默认有两行配置:

include mime.types;

default_type application/octet-stream;

include mime.types :相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中

语法default_type mime-type;
默认值default_type text/plain;
位置http、server、location
作用用来配置Nginx响应前端请求默认的MIME类型

**另外:**有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。举例:

location /get_text {
	#这里也可以设置成text/plain
    default_type text/html;
    return 200 "This is nginx's text";
}
location /get_json{
    default_type application/json;
    return 200 '{"name":"TOM","age":18}';
}

自定义日志

语法access_log path[format[buffer=size]]
默认值access_log logs/access.log combined;
位置http, server, location
作用用来设置用户访问日志的相关属性
语法log_format name [escape=default|json|none] string....;
默认值log_format combined "...";
位置http
作用用来指定日志的输出格式

其他配置

sendfile

语法sendfile on|off;
默认值sendfile off;
位置http、server、location
作用设置Nginx服务器是否使用sendfile()传输文件
该属性可以大大提高Nginx处理静态资源的性能

keepalive

我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接。
如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。

语法keepalive_timeout time;
默认值keepalive_timeout 75s;
位置http、server、location
作用设置超时时间
语法keepalive_requests number;
默认值keepalive_requests 100;
位置http、server、location
作用设置一个keep-alive连接使用的次数

server块和location块

	server {
        listen       80;	# 监听的端口
        server_name  localhost;	# 名称
        location / {
            root   html;	# 根目录位置
            index  index.html index.htm;	# 首页位置
        }
       
        error_page   500 502 503 504 404  /50x.html;	# 错误页面
        location = /50x.html {
            root   html;
        }
    }

server块

listen

语法listen address[:port] [default_server]...;
listen port [default_server]...;
默认值listen *:80 | *:8000
位置server
作用配置监听端口

案例:

listen 127.0.0.1:8000; // listen localhost:8000 监听指定的IP和端口
listen 127.0.0.1;	监听指定IP的所有端口
listen 8000;	监听指定端口上的连接
listen *:8000;	监听指定端口上的连接

default_server属性是标识符,用来将此虚拟主机设置成默认主机。所谓的默认主机指的是如果没有匹配到对应的address:port,则会默认执行的。如果不指定默认使用的是第一个server。

server{
	listen 8080;
	server_name 127.0.0.1;
	location /{
		root html;
		index index.html;
	}
}
server{
	listen 8080 default_server;
	server_name localhost;
	default_type text/plain;
	return 444 'This is a error request';
}

server_name

语法server_name name ...;
name可以提供多个中间用空格分隔
默认值server_name "";
位置server
作用用来设置虚拟主机服务名称

关于server_name的配置方式有三种,分别是:

  1. 精确匹配,如:www.baidu.com
  2. 通配符匹配,如:*.baidu.comwww.baidu.*,但是不能:www.*.com
  3. 正则表达式,以~开头,如:~www\.ab.*\.com

越精确的优先级越高

location

语法location [ = | ~ | ~* | ^~ |@ ] uri
默认值
位置server,location
作用用来设置请求的URI
  • uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式
  • 先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求

不带符号,要求必须以指定模式开始:

server {
	listen 80;
	server_name 127.0.0.1;
	location /abc{
		default_type text/plain;
		return 200 "access success";
	}
}
以下访问都是正确的
http://192.168.200.133/abc
http://192.168.200.133/abc?p1=TOM
http://192.168.200.133/abc/
http://192.168.200.133/abcdef

= : 用于不包含正则表达式的uri前,必须与指定的模式精确匹配

server {
	listen 80;
	server_name 127.0.0.1;
	location =/abc{
		default_type text/plain;
		return 200 "access success";
	}
}
可以匹配到
http://192.168.200.133/abc
http://192.168.200.133/abc?p1=TOM
匹配不到
http://192.168.200.133/abc/
http://192.168.200.133/abcdef

~ : 用于表示当前uri中包含了正则表达式,并且区分大小写
~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写

换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识

server {
	listen 80;
	server_name 127.0.0.1;
	location ~^/abc\w${
		default_type text/plain;
		return 200 "access success";
	}
}
server {
	listen 80;
	server_name 127.0.0.1;
	location ~*^/abc\w${
		default_type text/plain;
		return 200 "access success";
	}
}

^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。

server {
	listen 80;
	server_name 127.0.0.1;
	location ^~/abc{
		default_type text/plain;
		return 200 "access success";
	}
}

root alias

语法root path;
默认值root html;
位置http、server、location
作用设置Nginx接收到请求后查找资源的根目录
语法alias path;
默认值
位置location
作用用来更改location的URI为path

区别:

例如访问 /images/mv.png

location /images {
	root /usr/local/nginx/html;
}
# 或:
location /images {
	alias /usr/local/nginx/html;
}
  • root的处理结果是: root路径+location路径
    /usr/local/nginx/html/images/mv.png
  • alias的处理结果是:使用alias路径替换location路径
    /usr/local/nginx/html/mv.png(找不到)

**alias注意:**如果location路径是以/结尾,则alias也必须是以/结尾

index

语法index file ...;
默认值index index.html;
位置http、server、location
作用设置网站的默认首页

index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。

error_page

语法error_page code ... [=[response]] uri;
默认值
位置http、server、location......
作用设置网站的错误页面

例如:

# 指定具体跳转的地址
server {
	error_page 404 http://www.xxx.cn;
}

# 指定重定向地址
server{
	error_page 404 /50x.html;
	error_page 500 502 503 504 /50x.html;
	location =/50x.html{
		root html;
	}
}

# 使用location的@符合完成错误信息展示
server{
	error_page 404 @jump_to_error;
	location @jump_to_error {
		default_type text/plain;
		return 404 'Not Found Page...';
	}
}

# 将响应码换成另外一个
server{
	error_page 404 =200 http:/xxx.com;

}
0

评论区