Nginx进阶篇—web模块及proxy代理
1|0Nginx连接状态:
stub_status_module
展示用户和nginx链接数量信息。
查询模块是否安装
nginx -V 2>&1 | grep stub_status --with-http_stub_status_module
1|1启动状态模块:
在Nginx主配置文件下的server模块里添加
vim /etc/nginx/conf.d/default.conf
重启nginx
systemctl restart nginx
2|0Nginx随机主页:
andom_index_module
将主页设置成随机页面,是一种微调更新机制
2|1启动随机主页:
1、创建主页目录
mkdir /app
2、创建多个主页
touch /app/{blue.html,green.html,red.html,.yellow.html}
在不同的页面书写不同的内容,例如
3、在Nginx子配置文件下添加
vim /etc/nginx/conf.d/default.conf
systemctl restart nginx
3|0Nginx替换模块:
sub_module
目的
网页内容替换
如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。
3|1启用替换
vim /etc/nginx/conf.d/default.conf #启动nginx默认页面 这里是打算把Nginx默认页面进行替换
systemctl restart nginx
只替换了一处
将单次替换关闭,再次刷新页面,即可看见全文替换。
sub_filter_once off
4|0文件读取原理介绍:
sendfile #nginx默认启用
未使用sendfile() 的传统网络传输过程:
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
使用 sendfile() 来进行网络传输的过程:
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
sendfile() 不但能减少切换次数而且还能减少拷贝次数。
tcp_nopush
未使用tcp_nopush()网络资源浪费:
应用程序每产生一次操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据以及40个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。同时也浪费资源
使用tcp_nopush()网络传输效率提升:
当包累计到一定大小后再发送。
tcp_nodelay
开启或关闭nginx使用TCP_NODELAY选项的功能。 这个选项仅在将连接转变为长连接的时候才被启用。
TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去。
由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以tcp_nodelay会将ack立刻发出去。 如果不在长连接时,可以关闭此模块,因为ack会被立刻发出去。
4|1启用模块在Nginx主配置文件下
默认启动,无需验证
5|0Nginx文件压缩
5|1原理介绍
启动该模块,使文件传输前进行压缩,提升传输效率。
5|2模块
ngx_http_gzip_module
5|3启用模块
在Nginx主配置文件下的 http { 在http标签中启动该功能
gzip_static on;# nginx对于静态文件的处理模块
systemctl restart nginx
6|0Nginx页面缓存
ngx_http_headers_module
expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。
Nginx(expires 缓存减轻服务端压力)
原理介绍
无缓存,每次访问服务器,均是全文传输。
开启缓存可以加速浏览网站。
启用缓存
开启浏览器缓存,浏览页面。(默认)点击F12查看返回状态码
第一次返回状态码200.页面对象全文传输
第二次返回状态304.页面对象部分传输。
6|1开启服务器缓存模块
vim /etc/nginx/conf.d/default.conf
再次浏览页面,观察响应头中出现服务器回复的缓存时间
理解nginx服务器启动缓存时间,加速浏览。缺点是时效性降低。
7|0Nginx防盗链
启动a.com防盗链功能,在a网站配置文件location下写
vi /etc/nginx/conf.d/a.com.conf
这个是禁用所有盗链
如果希望某些网站能够使用(盗链)资源:
生产环境下:
测试环境下:
再次盗链,合法盗链成功。
8|0Nginx访问限制
ngx_http_limit_req_module
网站压测工具
yum install -y httpd-tools
ab -n 100 -c 10 http://域名/
8|1启动请求频率限制
vim /etc/nginx/nginx.conf
定义
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
限制请求 二进制地址 限制策略的名称 占用10M空间 允许每秒1次请求
引用
limit_req zone=req_zone;
引用 限制策略的名称
其他网站压测工具: Apache-ab,webbench,Apache-Jemeter
9|0Nginx访问控制
9|1基于主机(ip)
module
ngx_http_access_module
Directives
allow
允许某些主机
deny
拒绝某些主机
Syntax:
Syntax: allow address | CIDR | unix: | all;
Context: http, server, location, limit_except
启用控制
限制主机访问
vim /etc/nginx/conf.d/default.conf
9|2基于用户(username&password)
module
ngx_http_auth_basic_module
Syntax:
方法一
Syntax: auth_basic string | off;
Context: http, server, location, limit_except
方法二
Syntax: auth_basic_user_file file;
Context: http, server, location, limit_except
9|3启用控制
建立认证文件
yum install -y httpd-tools
cat /etc/nginx/conf.d/passwd
观察口令文件是否生成。已生成
9|4启动认证
vim /etc/nginx/conf.d/default.conf
systemctl restart nginx #重启认证
10|0Nginx代理
在代理服务器下/etc/nginx/conf.d/default.conf下添加
10|1模块介绍
proxy_pass :真实服务器
proxy_redirect :如果真实服务器使用的是的真是IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP :启用客户端真实地址(否则日志中显示的是代理在访问网站)
proxy_set_header X-Forwarded-For:记录代理地址
proxy_connect_timeout::后端服务器连接的超时时间_发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
proxy_buffering on;开启缓存
proxy_buffer_size:proxy_buffer_size只是响应头的缓冲区
proxy_buffers 4 128k; 内容缓冲区域大小
proxy_busy_buffers_size 256k; 从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方
proxy_max_temp_file_size 256k;超大的响应头存储成文件。
11|0Nginx代理缓存
11|1启动代理缓存
在代理服务器下/etc/nginx/nginx.conf下添加
在代理服务器下/etc/nginx/conf.d/default.conf
location模块下添加
mkdir -p /app/hqd/cache 准备缓存文件的存放目录
__EOF__

本文作者:Echo
本文链接:https://www.cnblogs.com/Jqazc/p/16707873.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Jqazc/p/16707873.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术