文章目录
- 一、配置详细解释
- 关闭版本
- 修改启动的进程数
- cpu与work进程绑定
- nginx进程的优先级
- work进程打开的文件个数
- event事件
- 二、Http设置
- 协议配置说明
- mime
- 虚拟主机
- alias
- location
- access模块
- 验证模块
- 自定义错误页面
- 自定义日志存放位置
- try_files检测文件是否存在
- 长连接
一、配置详细解释
Nginx的配置文件
- 配置文件由指令和指令块构成
- 每条指令以;分号结尾,指令与值之间以空格符号分隔
- include语句允许组合多个配置文件以提升可维护性
- include语句允许组合多个配置文件以提升可维护性
- pid号 /run/nginx.pid(yum安装)
- 主配置文件 /etc/nginx/nginx.conf
- 子配置文件 /etc/nginx/conf.d/*.conf
关闭版本
在主配置文件中http语句中加上 server_tokens off; 然后重新载入配置文件即可。
验证成功
修改启动的进程数
cpu与work进程绑定
将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
这种称之为cpu的亲缘性。
注意:要绑定一起绑定
worker_cpu_affinity 00000001 00000010 00000100 00001000;第0号—第3号CPU
nginx进程的优先级
即调整worker进程的优先级;工作进程的优先级默认为0,工作进程的优先级为-20~19
在主配置文件中加上worker_priority x;
验证成功
work进程打开的文件个数
worker_rlimit_nofile 65536;
上述所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制。需要与ulimit -n 或者limits.conf的值保持一致。
event事件
events {worker_connections 65536; use epoll;accept_mutex on; multi_accept on; }
worker_connections 65536; #设置单个工作进程的最大并发连接数
use epoll; #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
accept_mutex on; #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
multi_accept on; #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
二、Http设置
http是一个大的语句块,包含若干个小的语句块
协议配置说明
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 /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 4096;include /etc/nginx/mime.types;default_type application/octet-stream;server_tokens off;include /etc/nginx/conf.d/*.conf;
log_format 定义日志的格式,并取名为main;
access_log /var/log/nginx/access.log main;定义日志存放的位置,并采用main格式
sendfile on; 开启高性能的文件传输机制,可以直接在内核空间和应用程序空间之间传输数据,而无需将数据从内核空间复制到应用程序空间,从而提高了文件传输的效率和性能。零拷贝技术
tcp_nopush on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
tcp_nodelay off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
keepalive_timeout 65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
include mime.types; #导入支持的文件类型
default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
include /etc/nginx/conf.d/*.conf;#表明子配置文件所在的位置。
mime
此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上。
/etc/nginx/mime.types
虚拟主机
将一台主机虚拟成多台主机,有三种方式,基于端口,基于IP地址,基于域名。
1.基于端口
root指定了主页文件的位置
2.基于域名
3.基于IP地址
alias
验证成功
location
在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。
基本语法规则
location [ = | ~ | ~* | ^~ ] uri { … }
- = 用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
- ^~ 用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
- ~ 用于标准uri前,表示包含正则表达式,并且区分大小写
- ~* 用于标准uri前,表示包含正则表达式,并且不区分大写
- 不带符号 匹配起始于此uri的所有的uri
匹配优先级从高到低
=, ^~, ~ / ~*(谁写在前面谁优先级高), 不带符号
特别说明:
~* 用来对用户请求的uri做模糊匹配,uri中无论都是大写、都是小写或者大小写混合,此模式也都会匹配,通常使用此模式匹配用户request中的静态资源并继续做下一步操作,此方式使用较多注意: 此方式中,对于Linux文件系统上的文件仍然是区分大小写的,如果磁盘文件不存在,仍会提示404。
~* 虽然 不区分大小写 但是系统的文件系统区分大小写。
location遍历规则
解释:优先遍历未开启正则的三种形式,如果匹配上=字符串这种形式,意味着精确匹配,则立即停止匹配。
如果没有匹配上,则开始其他两种形式的匹配,并记住最长字符的匹配。如果匹配上^ ~的形式,则停止匹配,如果最长匹配不是^ ~,则需要继续进行正则匹配,如果没有正则匹配,则返回使用最长匹配。
access模块
访问控制模块,用于控制访问的主机地址。可以用精准的IP地址,也可以用网段。同时,注意这个模块也是一旦命中就不会往下继续匹配了,所以范围越小写的往上。
验证模块
htpasswd 此命令来自于httpd-tools包中,没有的话自己安装下即可。
如何生成账号和用户
htpasswd -c 文件路径 姓名 交互式生成密码
htpasswd -bc 文件路径 姓名 密码 直接将密码跟在后面 -c 代表新建用户名和密码对应的文件
-b 将密码跟在用户名后
验证成功。
自定义错误页面
我们可以改变默认的错误页面,同时也可以用指定的响应状态码进行响应。
error_page code ... [=[response]] uri;
页面错误代码
error_page 固定写法
code 响应码
= 可以将响应码转换
uri 访问连接
验证成功
自定义日志存放位置
默认日志文件放在/var/log/nginx下面,但一台真实主机会虚拟成多台主机,故将各自虚拟主机的日志文件分开放就很有需要。
当然,错误日志可以规定当达到什么级别才记录。
error_log 文件路径 级别(info debug等 可以忽略不写)
try_files检测文件是否存在
try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。
注意如果没有托底的/about文件将会出现50X错误,所以一定要设置。
验证成功。
优化操作:如果没有托底界面,可以自定义响应码返回,然后结合重定义错误界面,将客户引导至新的界面。
server{listen 80;server_name www.pc.com;root /data/nginx/pc;location / {root /data/nginx/pc/;try_files $uri $uri.html $uri/index.html =489;}error_page 489 /40x.html;location = /40x.html {root /data/nginx/error/;}
}
长连接
http 基于tcp协议,需要三次握手再传输数据。肯定不想一次三次握手才能下载一个资源,要一次三次握手下载多个资源。
这个时候就需要用到长连接。
keepalive_timeout timeout [header_timeout];
#设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置。
keepalive_requests number;
#在一次长连接上所允许请求的资源的最大数量,默认为100次,建议适当调大。
keepalive_requests 3;
#最大下载三个资源就会断开
keepalive_timeout 60 65; #只能有一个空格
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能,将如下显示:
Connection:close #浏览器收到的服务器返回的报文
对某种浏览器禁用长连接
keepalive_disable none | browser ...;
#对哪种浏览器禁用长连接