搞懂Nginx一篇文章就够了
目录
-
1.Nginx知识网结构图
-
- 1.1反向代理
- 1.2负载均衡
- 1.3动静分离
-
2. 在Linux系统上的安装流程是怎样的?
-
3. Nginx执行常见操作指令有哪些?
-
4.nginx的配置参数管理策略是怎样的?
-
- 4.1 距离客户端最近的服务器实现方法是什么?
-
4.2 反向代理服务的主要功能有哪些?
-
4.3 如何实现负载均衡分配请求资源?
-
4.4 动态静态平衡实践的关键点是什么?
-
5.nginx高可用
-
- 5.1安装keepalived
-
6.原理解析
-
7.保存post请求参数到ngixn日志
-
小结
-
1.Nginx知识网结构图

Nginx充当了一个高效率的HTTP和反向代理服务器。其主要特点包括占用内存少和并发能力强。事实上,在同类网页服务器中展现出卓越的性能。
为了提升性能而设计的Nginx核心功能是其最为关键的部分;该服务器不仅追求高效运行还特别注重处理能力;据报告显示其最高可支持多达5万 concurrent connections。
1.1反向代理
正向代理
正向代理:普通局域网终端用户想要实现远程接入互联网是无法直接实现的,在此情况下就必须依赖于特定的网络服务 intermediary,并因此被定义为正向代理服务。
正向代理
正向代理:普通局域网终端用户想要实现远程接入互联网是无法直接实现的,在此情况下就必须依赖于特定的网络服务 intermediary,并因此被定义为正向代理服务。

所谓反向 proxy是指一种技术手段,在这种模式下,在客户端看来,并没有直接连接到真实的服节点(server),而是通过中间的reverse proxy server间接获得所需的数据资源。由于客户端访问网络时无需进行任何配置操作——只需简单地发送请求至reverse proxy server即可;后者则会根据需求选择目标服务节点以获取所需数据,并将结果返回给客户端。在这一过程中,在客户端看来,“reverse proxy server”和实际的目标服节点之间的作用犹如一个整体服务节点——它提供的是虚拟的服务地址,并保护了真实服务的IP地址。

1.2负载均衡
客户端向服务器发送多个请求,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有处理后,在完成所有4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后4. 在完成后, 一些可能需要与数据库执行复杂操作, 然后将结果返回给客户端
普通请求和响应过程

然而在信息数据急剧增加的情况下访问流量与数据规模呈现爆发式增长态势传统架构体系已难以支撑当前的数据处理与管理需求
我们最先考虑的措施是升级服务器配置。鉴于摩尔定律日益失效的趋势,在仅凭硬件性能提升已显不够的情况下,请问您该如何有效应对这一需求?
我们可以扩展服务规模并部署分布式架构,在多台服务器上实现数据分发。与单一节点处理大量请求的方式不同,在这种模式下每个请求会被分散至多个服务器以提高性能和可靠性。即为常见的负载均衡策略。
图解负载均衡

当有15个请求被发送至代理服务器时,在此基础上代理服务器将基于其数量进行均匀分配。每个服务节点负责处理5个请求,并通过这一机制通常被称为负载均衡策略来实现资源优化。
1.3动静分离
为了提升网站的响应速度, 可以将动态内容与静态内容分配至独立的服务节点处理, 并通过这种方式提升处理效率.
动静分离之前的状态

动静分离之后

2. nginx如何在linux安装
<>
3. nginx常用命令
查看版本
./nginx -v
代码解读
启动
./nginx
代码解读
关闭(有两种方式,推荐使用 ./nginx -s quit)
./nginx -s stop
./nginx -s quit
代码解读
重新加载nginx配置
./nginx -s reload
代码解读
4.nginx的配置文件
配置文件分三部分组成
全局块,在配置文件与events块之间主要设置了影响nginx服务器整体运行的一些参数
配置参数设置中,并发服务的支持数值越大,则能够支撑的并发请求数量增加;然而,在实际应用中, 该数值受硬件资源和软件架构等因素的影响。

事件块配置为Nginx服务器与用户的通信连接提供管理功能;常用的设置包括:是否启用多workprocess下的有序编号连接和同时建立多个这样的连接。
支持的最大连接数

http块
诸如反向代理和负载均衡都在此配置
location指令说明
- 该语法用来匹配url,语法如下
location[ = | ~ | ~* | ^~] url{
}
代码解读
- = 符号在不带正则表达式的 URL 前使用时具有特殊作用,在于它要求字符串与 URL 严格匹配并在匹配成功后立即停止向下搜索并完成处理请求。
- ~ 符号标记的 URL 包含了相应的 regular expression 并且对大小写的敏感性有所区别。
- ~* 符号标记的 URL 则包含了 regular expression 但对大小写的敏感性不存在区别。
- ^~ 符号在不含 regular expression 的 URL 前使用时会指示 Nginx 立即找到最符合的位置并开始处理请求。
- 如果某个 URL 包含了 regular expression 的话,则无需附加任何特殊字符即可识别并完成相应的匹配工作。
4.1 反向代理实战
设置反向代理
目标是使得浏览器地址栏输入网址www.123.com后自动切换至Linux系统Tomcat主页。
具体实现
先配置tomcat:因为比较简单,此处不再赘叙
并在windows访问

具体流程

修改之前

配置

再次访问

反向代理2
1.目标
访问http://192.168.25.132:9001/edu/ 直接跳转到192.168.25.132:8080
访问http://192.168.25.132:9001/vod/ 直接跳转到192.168.25.132:8081
2.准备
配置两个tomcat,端口分别为8080和8081,都可以访问,端口修改配置文件即可。


新建文件内容分别添加8080!!!和8081!!!


响应如下


3.具体配置

重新加载nginx
./nginx -s reload
代码解读
访问


实现了同一个端口代理,通过edu和vod路径的切换显示不同的页面
4.2 反向代理小结
第一个例子:浏览器访问www.123.com,由host文件解析
出服务器ip地址
192.168.132.25 www.123.com 然后默认映射了HTTP/HTTPS协议下的标准端口80,并通过Nginx服务器在本地机器的HTTP/HTTPS协议下的标准端口80进行监听并进行流量转发至本地机器上的HTTP/HTTPS协议下的标准端口8080上。进而完成了对www.123.com网站的正常访问,并成功地将流量成功地转发至Tomcat服务器运行在本地机器上的HTTP/HTTPS协议下的标准端口8080上。
第二个例子:
访问http://192.168.25.132:9001/edu/ 直接跳转到192.168.25.132:8080
访问http://192.168.25.132:9001/vod/ 直接跳转到192.168.25.132:8081
具体来说,就是由nginx在9001端口进行监听,并利用正则表达式来判断最终将请求发送至8080号还是8081号tomcat上。
4.3 负载均衡实战
1.修改nginx.conf


2.重启nginx
./nginx -s reload
代码解读
在8081的tomcat webapps目录下新增教育类目录和a.html文件,并将其中的内容配置为指定路径。
4.在地址栏回车,就会分发到不同的tomcat服务器上


3.负载均衡方式
- 轮询(默认)
- weight,代表权,权越高优先级越高

- fair,按后端服务器的响应时间来分配请求,相应时间短的优先分配

ip\_hash用来为每个请求确定目标后端服务器的位置;依据访问者IP地址计算出的ip\_hash值进行判断后, 每个客户端将被固定地分配到一个特定的后端服务器上; 从而实现了 session 问题的有效处理.

4.4 动静分离实战
静动分离的概念是什么 静动分离是指将动态请求数据与静态资源进行区分处理,并非将动态网页内容与静态资源进行物理上的隔离管理。实际上可以用nginx服务器负责存储并 served 静态资源文件,并由tomcat 作为后端服务处理生成的响应数据
动静分离主要包含两种常见做法:第一种是将静态文件独立托管在独立服务器上,并各自分配专属域名;这是目前最为普遍的做法;第二种则是通过Nginx实现对动态和静态文件的混合发布,并实现分隔。
动静分离图析

实战准备
准备静态文件


配置nginx

5.nginx高可用
如果nginx出现问题

解决办法

前期准备
- 两台nginx服务器
- 安装keepalived
- 虚拟ip
5.1安装keepalived
[root@192 usr]# yum install keepalived -y
[root@192 usr]# rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64
代码解读
修改配置文件
[root@192 keepalived]# cd /etc/keepalived
[root@192 keepalived]# vi keepalived.conf
代码解读
分别将如下配置文件复制粘贴,覆盖掉keepalived.conf
虚拟ip为192.168.25.50
需要对相关主机的ip地址进行调整。具体来说:
- 确保将.smtp服务器配置为... smtp_server 192.168.25.147...和... smtp_server 192.168.25.147...
- 设置主状态为MASTER,并备用状态设为BACKUP。
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.25.147
smtp_connect_timeout 30
router_id LVS_DEVEL # 访问的主机地址
}
vrrp_script chk_nginx {
script "/usr/local/src/nginx_check.sh" # 检测文件的地址
interval 2 # 检测脚本执行的间隔
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP # 主机MASTER、备机BACKUP
interface ens33 # 网卡
virtual_router_id 51 # 同一组需一致
priority 90 # 访问优先级,主机值较大,备机较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.50 # 虚拟ip
}
}
代码解读
启动
[root@192 sbin]# systemctl start keepalived.service
代码解读

访问虚拟ip成功

关闭主机147的nginx和keepalived,发现仍然可以访问
6.原理解析

如下图所示,在配置中打开了一个 master 角色和一个 worker 进程,在这种情况下, master 角色由管理员担任,负责管理权限分配与资源分配;而 worker 进程则负责执行具体的工作流程.

worker如何工作

7.保存post请求参数到ngixn日志
为了将POST请求中的参数记录至Nginx日志中
以下是一些步骤,可以帮助您实现此目的:
配置脚本以捕获POST请求参数。您可以使用Nginx模块ngx_http_log_module来记录原始的请求行;同时使用ngx_http_post_filter_module模块来过滤并修改日志消息。
请在服务器上编写一个脚本以实现捕获POST请求参数的功能。您可以利用Nginx模块ngx_http_log_module来获取原始的请求信息,并通过ngx_http_post_filter_module滤镜对日志信息进行处理和修改。
在 Nginx 的配置文件中,找到您要配置的服务器块(server)。
在服务器块中,添加以下配置:
nginx
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
server {
...
location / {
...
# 启用 POST 请求参数捕获
post_filter_types application/json;
post_filter_recursive on;
# 将请求参数添加到日志消息中
log_subrequest on;
# 指定要记录的请求参数
post_filter_parameters $request_body;
}
}
代码解读
在配置设置中,请注意log_format指令明确了日志消息的格式。其中main指的是日志格式的主要名称,并且您可以根据具体需求调整这一部分设置。对于format字符串中的$request变量来说,在其表示完整HTTP请求行时包含了方法、完整的URL地址以及协议版本信息。其他相关变量同样可以根据实际需求进行适当调整。
在服务器块中的 location /字段被配置为指定请求路径的位置,在 location 块内启用了POST请求参数捕获功能,并将其值记录到日志消息中
请特别注意:以上配置仅为参考使用,请根据实际需求进行相应调整和进一步优化
保存配置文件并退出。
重新加载 Nginx 配置,以使更改生效。您可以使用以下命令重新加载 Nginx:
shell
sudo service nginx reload
代码解读
当您的应用程序接收到POST请求时,Nginx将捕获请求参数并记录于日志中。您可参考Nginx的日志文件以获取包含POST参数的具体消息。
小结
- 工作节点数量应与CPU数量配置一致。
- 每个master节点可管理多个worker节点,并采用热部署策略;每个Worker都是独立运行的;若某台Worker发生故障,则不会影响其他Worker。
