总字符数: 10.98K
代码: 6.19K, 文本: 2.21K
预计阅读时间: 37 分钟
Nginx安装
1 | cd /opt |
Nginx平滑升级
把服务器从低版本升级为高版本,强行停止服务器,会影响正在运行的进程.平滑升级不会停掉正在进行中的进程,这些进程会继续处理请求.但不会再接受新请求,这些老的进程在处理完请求之后会停止.此平滑升级过程中,新开的进程会被处理.
1 | # 下载高版本nginx |
Nginx命令
nginx
启动nginx/nginx -c nginx
配置文件
nginx
重启(重启是建立在nginx
服务器已经启动的基础上)nginx -s reload
nginx
停止nginx -s stop
stop
是快速关闭,不管有没有正在处理的请求nginx -s quit
quit
是一个优雅的关闭方式,Nginx
在退出前完成已经接受的连接请求
nginx
重启打开日志nginx -s reopen
nginx
检查配置文件nginx -t
Nginx信号控制
从容关闭旧进程
具体语法:kill -信号选项 nginx的主进程号
例:kill -INT 26661
ps -ef grep nginx
获得进程号
- 从容”优雅”停止
kill -QUIT master进程号
Nginx
服务可以正常地处理完当前所有请求再停止服务- 步骤:首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程
- 快速停止
kill -TERM master进程号
kill -INT master进程号
- 快速停止服务时,
worker
进程与master
进程在收到信号后会立刻跳出循环,退出进程
- 强制停止
kill -9 nginx
系统强杀nginx
进程
- 重启
nginx
kill -HUP master进程号
Nginx基本配置
1 | # Nginx的主配置文件是:nginx.conf,nginx.conf主要组成如下: |
nginx配置连接数
1 | # 表示开启nginx的worker进程的个数,nginx启动会开两种进程,master进程用来管理调度,worker进程用来处理请求: |
nginx
作为http
服务器
最大的客户端连接数 max_cloents = worker_processes * worker_connections/2
nginx
作为反向代理服务器的时候
最大的客户端连接数 max_cloents = worker_processes * worker_connections/4
由此,我们可以进算出nginx
作为http
服务器最大并发量(作为反向代理服务器自己类推),可以作为压测和线上环境的优化提供一些理论依据:
单位时间keepalive_timeout
内nginx
最大并发量CC = worker_processes * worker_connections/2=8*65535/2
每秒并发量CS:CS = worker_processes * worker_connections/(2*65)
虚拟主机
虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术.虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器.
其技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应用于HTTP,FTP,EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源.如果划分是系统级别的,则称为虚拟服务器.
配置虚拟主机
我们先配置在一个nginx
中配置一个虚拟主机,编辑nginx.conf
配置文件,在http
模块中,配置server
模块,一个server
模块就针对一个虚拟主机. 我们模拟一个独立的网站,此网站域名访问为www.server1.com;网站的根目录放到nginx
目录下htm1/server1
目录,我们创建一个首页index.html
到server1
中,编辑index.html
1 |
|
下面我们回到nginx.conf
配置文件中,配置server
模块
1 | # 下面我们回到nginx.conf配置文件中,配置server模块 |
注意:在配置server模块时,监听的端口listen
和server_name
组合起来是唯一的,如果server_name
一样,那么listen
监听的端口就不一样:如端口一样,server_name
就不一样.这是很好理解的,虚拟主机的请求映射系统才能够判别.
日志文件格式配置
nginx服务在运行的时候,会有各种操作,操作的信息会记录到日志文件中,日志文件的记录是有格式的.那我们如何设置日志文件的格式呢?
1 | # 使用log_format指令进行配置文件格式 |
access_log指令
1 | # 语法: |
配置段:
gzip
压缩等级. buffer
设置内存缓存区大小. flush
保存在缓存区中的最长时间.不记录日志:access_log off;
使用默认combined
格式记录日志:access_log logs/access.log
或 access_log logs/access.log combined;
值得注意的是,Nginx
进程设置的用户和组必须对日志路径有创建文件的权限,否则,会报错. 此外,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.可以使用open_log file_cache
来设置日志文件缓存(默认是off
).
日志切割
wordpress.log
-—>wordpress-2021-09-16.log
以日期命名存放
1 | # 将log文件修改为想存放的日志格式 |
系统自动切割
利用sh脚本的方式执行刚才的手动操作,在每天凌晨执行一个计划任务调用sh脚本,就完成了系统自动切割日志文件
在opt/
目录下编写sh脚本
1 | # 进入目录 |
location配置详解
语法规则:
location [=~~*^~] /uri/ {...}
location
区分普通匹配和正则匹配1
2
3
4
5
6用前缀"~"和" \~*"修饰的为正则匹配
~ 前缀表示区分大小写的正则匹配
~* 前缀表示不区分大小写的正则匹配
除上面修饰的前缀("="和"^~",或没有前缀修饰)都为普通匹配
= 前缀表示精确匹配
^~前缀表示uri以某个常规字符串开头,可以理解为url的普通匹配location
作用于server
模块,且支持多个location
模块1
2
3
4
5
6
7
8
9
10
11
12
13server {
location /test {
root html/p;
index index.html index.htm;
}
location = /50x.html {
root html;
}
location / {
root html/server1;
index index.html index.htm;
}
}匹配的原则
普通匹配,最大前缀匹配原则
1
2
3
4
5
6
7
8
9
10server {
location /prefix/ {
#规则A
}
location /prefix/mid/ {
#规则B
}
}
请求ur1为:/prefix/mid/t.html
此请求匹配的是规则B,是以最大的匹配原则进行的,跟顺序无关正则匹配 为顺序匹配
1
2
3
4
5
6
7
8
9
10
11server {
location ~ \.(gifljpglpngljscss)$
{
#规则C
}
location~* \.png$
{
#规则D
}
}
请求http://localhost/1.png,匹配的是规则c,因为规则c在前面,即叫做顺序匹配在实际场景中,通常至少有三个匹配规则定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理.
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
#第一个必选规则
location =/ {
····
}
#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
#有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gifjpgjpegpngcssjsico)$ {
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行、带.php,.jsp后缀的情况很少了
location / {
·····
}
负载均衡
负载平衡(Load balancing)是一种电脑技术,用来在多个电脑(电脑集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的. 使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性.负载平衡服务通常是由专用软件和硬件来完成. 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题.
nginx
实现负载均衡原理,用户访问首先访问到nginx
服务器,然后nginx
服务器再从应用服务器集群中选择压力比较小的服务器,然后将该访问请求引向该服务器.如果应用服务器集群中某一台服务器崩溃,那么从待选择服务器列表中将该服务器删除,也就是说一个服务器崩溃了,那么nginx
服务器不会把请求引向到该服务器.
1 | upstream myproxy{ |
负载均衡方案
随机(轮询)
1
2
3
4upstream myproxy{
server 10.10.1.2:8080;
server 10.10.1.3:8080;
}权重
1
2
3
4upstream myproxy{
server 10.10.1.2:8080 weight=5;
server 10.10.1.3:8080 weight=10;
}ip_hash
1
2
3
4
5upstream myproxy{
ip_hash;
server 10.10.1.2:8080;
server 10.10.1.3:8080;
}