第三章nginx详解
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
nginx高性能轻量级的web服务软件。
特点
1稳定性高。没有apache稳定
2系统资源消耗地较低。处理http请求的并发能力非常高单台物理服务器可以处理30000-50000个并发请求
稳定一般在企业中为了保持服务器的稳定并发量的设置在20000个左右。占用内存2M左右。
nginx主要功能
1静态文件服务nginx可以直接提供静态文件的服务HTMLCSSJAVAScript图片等。能够高效的处理并且响应静态文件的请求。
2反向代理可以作为一个反向代理的服务器然后将客户端的请求转发给后端多个服务器可以实现负载均衡高可用。提高整个集群的性能以及可靠性
反向代理的核心客户端在请求时通过代理服务器会把请求的流量按照轮询算法转发到后台不同的服务器实现负载均衡和高可用
3处理动态内容nginx处理动态内容很差nginx可以代理请求发送到后端的动态服务处理动态服务器处理完之后nginx把动态请求响应给客户端。
4SSL/TLS 加密HTTPS的加密方式数字证书验证机制。
5虚拟主机nginx可以在一台服务器上设置多个虚拟主机同一个服务器上可以有多个域名和站点。
6URL重定向功能可以实现灵活的url重写和重定向。
7缓存功能nginx自带缓存功能
8日志功能可以详细的记录请求的信息包括访问的时间请求路径ip地址响应状态有助于故障排查。系统控制的日志记录在/var/log/messages自己的业务日志access.log error.log access记录的谁访问的我都是访问成功的记录error日志也记录谁访问我但是记录的是失败访问记录
nginx的主要应用场景
1静态服务
2反向代理负载均衡
3缓存服务
4动态服务
nginx命令
-t检查配置文件是否正确
-v查看nginx的版本号
-s stopstart向主进程传输信号停止开启重启重新加载
-c设置配置文件的默认路径
-V当前nginx所有模块组
信号符
信号符结合kill使用只要是kill只能跟pid号
kill-USR1 + nginx服务的pid号 日志分割
kill -s HUP + nginx服务的pid号 重新加载
kill -s HUP nginx 可以跟服务名也可以用pid号
kill -s QUIT + nginx服务的pid号 优雅推出有人访问时不会就结束进程访问结束才会结束进程。
kill -s WINCH + nginx服务的pid号 优雅的结束worker知道请求完成才会结束worker的进程。
location模块当中
root拼接模式root指定的目录和 location 之间做的一个拼接/opt/ky30/ 这两个路径都是真实存在而且都是目录并且在uri目录里面要有web文件。
alias匹配指定路径下的web文件
/ root后面有没有 / 无所谓加不加都可以alias加了 / 后面也必须有 / 否则匹配不到
root 标签可以使用重定向
alias 不可以设置重定向。
总结
1全局快全局生效所有模块所有用户都生效。
2events一个像nginx服务器和用户的网络连接问题。
3http只要模块配置代理缓存虚拟主机方向代理只能是http的请求才可以写http模块中。
1upstream反向代理指定服务器的命令七层基于ip和端口走http协议只能在http模块中。
4serber块包含在http模块中不能单独设置。
5location匹配uri包含在sever当中的也不能单独设置。
1porxy_pass反向代理
6strean块四层·12345678走的是tcp或者udp流量并不能卸载http当中要写在全局配置中。
访问状态统计
基于用户名和密码的访问控制
基于ip地址的访问规则
nginx的优化和防盗链
重点是优化
1隐藏版本号
方法一修改配置文件
在http模块中加入一个命令
server_tokens off;
方法二在源码包里改
/opt/nginx-1.22.0/src/core/nginx.h #define NGINX_VERSION "1.1.1" #修改版本号 #define NGINX_VER "burun/" NGINX_VERSION
要配置好之后重新编译安装
serve_tokens on
nginx的日志分割
代码
#!/bin/bash #获取日期 d=$(date +%Y-%m-%d) #定义存储目录 dir="/usr/local/nginx/logs"
#分割日志 logs_file="/usr/local/nginx/logs/access.log" logs_error='/usr/local/nginx/logs/error.log'
#定义nginx的pid文件 pid_file='/usr/local/nginx/run/nginx.pid'
if [ ! -d "$dir" ] then mkdir -p $dir fi
#移动日志并且重命名
mv $logs_file ${dir}/access_${d}.log
mv $logs_error ${dir}/error_${d}.log
#发送信号给nginx主程序让他生成一个新的日志文件
kill -USR1 $(cat ${pid_file}) #cat /usr/local/nginx/run/nginx.pid
#日志文件清理的命令 find ${dir} -mtime +30 -exec rm -rf {} \;
nginx的页面压缩
作用节约带宽提升用户的访问速度
gzip on; #取消注释开启gzip的压缩功能 gzip_min_length 1k; #最小压缩文件的大小 gzip_buffers 4 64k; #压缩缓冲区大小为4个64K缓冲区Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。 gzip_http_version 1.1; #压缩版本默认为1.1 gzip_comp_level 6; #压缩比率(压缩等级为1-96是中等等级也是常用等级)Gzip 压缩级别的范围是 1 到 9 其中 1 表示压缩速度最快但压缩比最低9 表示压缩速度最慢但压缩比最高。默认值为 1。 gzip_vary on; #支持前端缓存服务器支持压缩页面 gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #压缩的类型哪些文档启用压缩功能
压缩的功能是自带的可以不取消注释但是需要添加压缩细节需要把gzip打开后进行配置
图片缓存
连接超时
http1.1会有一个keepalive模式告诉web服务器在处理玩一个请求之后把保持当前连接的tcp的状态为打开状态如果当前连接有新的请求服务端就会利用这个没有关闭的连接继续给客户端响应不需要在建立一个新的连接
keep alive在一段时间
nginx的并发配置
在高并发的场景中需要启动更多的nginx进程以保证响应速度。可以更快的处理用户的请求避免阻塞
1cpu的核心数来进行设置
2/worker_cpu_affinity 设置work进程绑定到指定的cpu的命令。可以减少cpu切换带来的开销确保worker进程在一个独立的cpu核心上运行。
TIME_WAIT
不是一个报错信息是tcp连接状态中的一种状态出现在tcp连接的四次挥手中
fin=1
ack=1
当连接的乙方发送fin报文而且收到了对方的ack保温之后就会进入time_wait tcp处理等待的状态是一个持续时间65秒确保网络中的所有数据包都被完全处理完毕。
两个作用
1确保可靠的关闭连接。如果立刻关闭连接旧的数据包也会被处理从而会干扰新的连接
2避免连接服用time_wait的时间太短了可能会导致九的链接仍然在网络中会被误认为是新的连接导致连接复用。
而且在连接的生命周期time_wait占用的资源是非常小的而且对服务器整体的影响也很有限。
大量的短链接频繁创造和销毁或者大并发连接时负载均衡time_wat连接会积累服务器会出现大量的time_wait状态的链接在这种状况下需要优化处理。
内核设置进行优化。
查看系统的所有tcp连接的状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
closed 表示连接未活动或者关闭
listen 监听等待连接
syn_recv :syn接受服务端收到了来自客户端的syn连接请求正在等待确认
syn_sent syn发送客户端已经向服务器发送了syn请求等待服务器确认
ESTABLELISHED已经建立了tcp连接正在传送数据
fin_wait1 表示一端已经发送了连接关闭的请求等待另一端确认
fin_wait2表示一段已经关闭连接但是应用程序还未关闭连接
close_wait表示一段已经关闭连接但是应用程序还欸关闭连接
closing正在关闭
time_wait连接等待
last_ack表示应用程序已经发送了最后确认等待另一端进入closed状态
valid_refers 设置信任网站 *.kgc.com kgc.com 都可以访问图片
none允许没有http_refer的请求访问资源
www.kgc.com也可以访问显示图片。
面试题
nginx是如何实现高并发的
1nginx自身代码的问题大量的底层代码进行了优化同时自带了一个功能模块。epoll模块自带的支持高并发。‘
2nginx也是一个master进程控制多个work进程。master负责收集和分发请求work是实际的执行者。每一个请求进来时mester就会拉起一个work进程来处理请求。同时master进程也负责监控work的状态work的数量要和cpu的数量一致或者两倍。work处理请求只受内存大小的限制所以可以处理多个请求再加上nginx本身就是轻量级的服务处理请求时占用的内存本身就少所以可以实现大并发处理。
如何修改Linux服务器文件的最大打开数量
ulimit -n 65535 零时修改 Linux只支持打开65535
vim /etc/security/limits.conf
*soft nproc 65535
*hard nproc 65535
*soft nofile 65535
*hard nofile 65535
底行输入必须重启才能生效