Nginx
2021-02-25 11:35:49 6 举报
AI智能生成
nginx基本配置, 用法, 原理
作者其他创作
大纲/内容
特点
占有内存少
并发能力强(50000)
使用
基本用法
命令行参数
查看端口
ps -ef |grep nginx
启动
nginx
停止
从容停止
kill -QUIT nginx主进程号
nginx -s stop
快速停止
kill -TERM nginx主进程号
重启
nginx -s reload
基本配置
文件结构
配置文件参考
设置GZIP
一般情况下压缩后的html、css、js、PHP、jhtml等文件,大小能降至原来的25%
一般情况下只要在nginx.conf的http段中加入下面几行配置即可
gzip on;
gzip_min_length 1000;
gzip_buffers 48k;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
gzip on;
gzip_min_length 1000;
gzip_buffers 48k;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
应用
IMAP/POP3 代理服务
HTTP基础功能
反向代理
用户请求反向代理服务器,反向代理服务器选择目标服务器,获取数据后再返回给客户端
location 指令说明:
~ : 表示uri包含正则表达式,且区分大小写。
~* : 表示uri包含正则表达式,且不区分大小写。
= : 表示uri不含正则表达式,要求严格匹配。
~ : 表示uri包含正则表达式,且区分大小写。
~* : 表示uri包含正则表达式,且不区分大小写。
= : 表示uri不含正则表达式,要求严格匹配。
样例
正向代理
...
server {
resolver 192.168.1.1; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
...
正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理
...
server {
resolver 192.168.1.1; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
...
设置nginx代理服务,一般是配置到一个server块中。
注意:
1. 在server块中,不要出现server_name指令,即不要设置虚拟主机的名称和IP。
2. resolver是必需的,如果没有该指令,nginx无法处理接收到的域名。
3. nginx代理服务不支持正向代理HTTPS站点。
注意:
1. 在server块中,不要出现server_name指令,即不要设置虚拟主机的名称和IP。
2. resolver是必需的,如果没有该指令,nginx无法处理接收到的域名。
3. nginx代理服务不支持正向代理HTTPS站点。
在需要访问外网的客户端上执行以下一种操作即可:
1. 方法1(推荐)
export http_proxy=http://你的正向代理服务器地址:代理端口
2. 方法2
vim ~/.bashrc export http_proxy=http://你的正向代理服务器地址:代理端口
1. 方法1(推荐)
export http_proxy=http://你的正向代理服务器地址:代理端口
2. 方法2
vim ~/.bashrc export http_proxy=http://你的正向代理服务器地址:代理端口
重定向
rewrite
按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行
按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行
作用域: server, location, if
例:
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
注意:
1. 作用域locattion域时, 需要注意使用标记last, 避免陷入死循环
2. 如果替换字段中包含参数,那么其余的请求参数将附加到后面,为了防止附加,可以在最后一个字符后面跟一个问号
rewrite ^/users/(.*)$ /show?user=$1? last;
1. 作用域locattion域时, 需要注意使用标记last, 避免陷入死循环
2. 如果替换字段中包含参数,那么其余的请求参数将附加到后面,为了防止附加,可以在最后一个字符后面跟一个问号
rewrite ^/users/(.*)$ /show?user=$1? last;
负载均衡
将原先请求集中到单个服务器上的情况改为增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器
样例
nginx 分配服务器策略
轮询(默认)
按请求的时间顺序依次逐一分配,如果服务器down掉,能自动剔除。
按请求的时间顺序依次逐一分配,如果服务器down掉,能自动剔除。
权重
weight 越高,被分配的客户端越多,默认为 1。
weight 越高,被分配的客户端越多,默认为 1。
ip
按请求 ip 的 hash 值分配,每个访客固定访问一个后端服务器。
按请求 ip 的 hash 值分配,每个访客固定访问一个后端服务器。
fair
按后端服务器的响应时间来分配,响应时间短的优先分配到请求。
缓存
静态资源缓存
expires
是给一个资源设定一个过期时间,通过 expires 参数设置,可以使浏览器缓存过期时间之前的内容,减少与服务器之间的请求和流量。也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。
是给一个资源设定一个过期时间,通过 expires 参数设置,可以使浏览器缓存过期时间之前的内容,减少与服务器之间的请求和流量。也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。
高可用
为了提高系统的可用性和容错能力,可以增加nginx服务器的数量,当主服务器发生故障或宕机,备份服务器可以立即充当主服务器进行不间断工作。
keepalived配置样例
实现效果:
准备两台 nginx 服务器,通过浏览器地址栏访问虚拟 ip 地址,把主服务器的 nginx 停止,再次访问虚拟 ip 地址仍旧有效。
准备两台 nginx 服务器,通过浏览器地址栏访问虚拟 ip 地址,把主服务器的 nginx 停止,再次访问虚拟 ip 地址仍旧有效。
具体配置
1. 在两台 nginx 服务器上安 keepalived。
keepalived 相当于一个路由,它通过一个脚本来检测当前服务器是否还活着,如果还活着则继续访问,否则就切换到另一台备份服务器。
keepalived 相当于一个路由,它通过一个脚本来检测当前服务器是否还活着,如果还活着则继续访问,否则就切换到另一台备份服务器。
2. 修改主备服务器 /etc/keepalived/keepalivec.conf 配置文件(可直接替换),完成高可用主从配置。
keepalived 将 nginx 服务器绑定到一个虚拟 ip , nginx 高可用集群对外统一暴露这个虚拟 ip,客户端都是通过访问这个虚拟 ip 来访问 nginx 服务器 。
keepalived 将 nginx 服务器绑定到一个虚拟 ip , nginx 高可用集群对外统一暴露这个虚拟 ip,客户端都是通过访问这个虚拟 ip 来访问 nginx 服务器 。
3. 在 /usr/local/src 目录下添加检测脚本 nginx_check.sh。
4. 启动两台服务器的 nginx 和 keepalived。
5. 查看虚拟 ip 地址 ip a 。把主服务器 192.168.4.32 nginx 和 keepalived停止,再访问虚拟 ip 查看高可用效果。
结构与扩展
Ngnix使用hash表来协助完成请求的快速处理
io 多路复用机制
Nginx 和 redis 类似,都采用了 io 多路复用机制.
优点
每个 worker 都是一个独立的进程,每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求.
每个 worker 的线程可以把一个 cpu 的性能发挥到极致,因此,worker 数和服务器的 cpu 数相等是最为适宜的。
每个 worker 的线程可以把一个 cpu 的性能发挥到极致,因此,worker 数和服务器的 cpu 数相等是最为适宜的。
每个 worker 是独立的进程,如果其中一个 worker 出现问题,其它 worker 是独立运行的,会继续争抢任务,实现客户端的请求过程,而不会造成服务中断
可以使用 nginx -s reload 进行热部署。
问题
发送一个请求,会占用 worker 几个连接数?
从用户的角度,http 1.1协议下,由于浏览器默认使用两个并发连接
所以发送一个请求,会占用 worker 两个连接数
从用户的角度,http 1.1协议下,由于浏览器默认使用两个并发连接
所以发送一个请求,会占用 worker 两个连接数
有一个 master 和 4个 worker,每个 worker 支持的最大连接数为 1024,该系统支持的最大并发数是多少?
这需要从两个方面来讨论:
❶nginx作为http服务器:max_clients = worker_processes * worker_connections/2
也就是最大并发数 = 4*1024/2=2028
❷nginx作为反向代理服务器:max_clients = worker_processes * worker_connections/4
也就是最大并发数 = 4*1024/4=1024
这需要从两个方面来讨论:
❶nginx作为http服务器:max_clients = worker_processes * worker_connections/2
也就是最大并发数 = 4*1024/2=2028
❷nginx作为反向代理服务器:max_clients = worker_processes * worker_connections/4
也就是最大并发数 = 4*1024/4=1024
自由主题
0 条评论
下一页