nginx基本应用(二)(上)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: nginx基本应用(二)

反向代理


正向代理与反向代理


正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。


反向代理实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。


反向代理工作在服务期的前端,作为前端服务器,正向代理工作在客户端的前端,为客户端做代理。


反向代理的作用


  1. 保证内网的安全,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
  2. 可以通过反向代理来实现负载均衡,通过反向代理服务器来优化网站的负载


反向代理示例


环境


192.168.0.168  代理服务器(nginx)
192.168.0.52   后端服务器(httpd)


修改nginx代理配置


location /wanger {
            proxy_pass http://192.168.0.52;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }


添加后端192.168.0.52/wanger首页


mkdir /var/www/html/wanger
echo 192.168.0.52 > /var/www/html/wanger/index.html


在前端服务器进行访问测试


当客户端访问192.168.0.168/wanger/时,会将请求转发给后端192.168.0.52/wanger/index.html


[root@192.168.0.168]# curl 127.0.0.1/wanger/
192.168.0.52


可以看到反向代理测试成功


proxy_set_header指令解释


proxy_set_header指令设置nginx发送到后端服务器的标头


上述配置中,将请求标头的Host字段设置为$ host变量。


将X-Real-IP字段设置proxy_add_x_forwarded_for变量,$proxy_add_x_forwarded_for是ngx_http_proxy_module内置变量


proxy_add_x_forwarded_for变量


proxy_add_x_forwarded_for变量包含了X-Forward-For字段和remote_addr变量,并用逗号分隔,当X-Forwarded-For字段不存在时,那么$proxy_add_x_forwarded_for变量等于$remote_addr变量,当一个web应用被两台nginx代理服务器转发的时候,第一台的nginx代理的X-Forwarded-For字段为真实的客户端ip,第二台nginx代理的X-Forwarded-For字段为客户端ip,第一台代理的ip地址,也就是说,只有当代理服务器的数量大于1的时候,proxy_add_x_forwarded_for才有效果


640.png


修改后端web日志格式


首先查看访问后端的日志,可以看到访问ip显示的还是nginx代理的ip


640.png


修改httpd日志格式,将日志中的ip修改为客户端ip


vim /etc/httpd/conf/httpd.conf
LogFormat "%{X-Real-IP}i %{Host}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


修改后的日志格式如下:


640.png


这样就会在后端服务器中显示真实的客户端ip了


proxy_pass加不加/的区别


当proxy_pass在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走


示例


location /wanger {
            proxy_pass http://192.168.0.52;
        }


此时后端的url为192.168.0.52/wanger/index.html


location /wanger {
            proxy_pass http://192.168.0.52/;
        }


此时后端的url为192.168.0.52/index.html


负载均衡


负载均衡可以将请求前端的请求分担到后端多个节点上,提升系统的响应和处理能力。


环境


192.168.0.168   负载均衡服务器
192.168.0.52  上游节点1
192.168.0.84   上游节点2


负载均衡调度策略


weight轮询(默认)


将请求按时间顺序分配到后端服务器,通过weight可以定义轮询权重,权重越高,访问几率越高


upstream read{
        server 192.168.0.52 weight=2 max_fails=3 fail_timeout=20s;
        server 192.168.0.84:8080 weight=1 max_fails=3 fail_timeout=20s;
        server 192.168.0.96 down;
        server 192.168.0.168  backup;
}


  1. max_fails,允许fail_timeout时间内请求失败的最大次数,否则后端服务器将被标记为不可用
  2. fail_timeout,表示错误次数的超时时间;
    当被标记为不可用后,暂停服务的时间。
  3. down,将当前的server标记为不可用,即不参与负载均衡。
  4. backup,标记为备用服务器,当所有非backup服务器不可用或者忙时,会请求该服务器。


请求结果如下:


640.png


ip_hash


将请求按照访问ip的hash结果分配到后端服务器,这样同一ip每次请求都能够访问到同一台后端服务器,可以解决动态网页的session问题


upstream read{
        ip_hash
        server 192.168.0.52;
        server 192.168.0.84:8080;
}


请求结果如下:


640.png


最少连接(least_conn)


根据后端服务器当前的连接情况,将请求分配给当前连接数最少的一台后端服务器上


upstream read{
        least_conn;
        server 192.168.0.52;
        server 192.168.0.84:8080;
}


请求结果如下:


640.png


fair


将请求分配给响应时间短的后端服务器


upstream read{
        fair;
        server 192.168.0.52;
        server 192.168.0.84:8080;
}


url_hash


根据访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率


upstream read{
        hash $request_uri;
        server 192.168.0.52;
        server 192.168.0.84:8080;
}
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
64 4
|
1月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
1月前
|
Java Serverless 应用服务中间件
Serverless 应用引擎产品使用合集之Web函数启动的Spring Boot项目可以通过什么方式配置Nginx
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
应用服务中间件 nginx
蓝易云 - 编写Dockerfile制作Web应用系统nginx镜像
这是一个基本的例子,你可能需要根据自己的应用进行调整。例如,你可能需要添加更多的配置,或者使用不同的Nginx版本。
57 2
|
2月前
|
Java 关系型数据库 Docker
docker打包部署spring boot应用(mysql+jar+Nginx)
docker打包部署spring boot应用(mysql+jar+Nginx)
|
2月前
|
运维 Serverless 应用服务中间件
Serverless 应用引擎产品使用之在阿里云Serverless中函数计算FC nginx 部署上去之后放置静态页面如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
310 0
|
2月前
|
Java 应用服务中间件 网络安全
Nginx配置静态页面+springboot应用+swagger+SSL的实现
Nginx配置静态页面+springboot应用+swagger+SSL的实现
138 0
|
2月前
|
NoSQL 关系型数据库 应用服务中间件
redis,memcached,nginx网络组件,网络编程——reactor的应用
目标 明白网络模块要处理那些事情 reactor 是怎么处理这些事情的 reactor 如何封装的 网络模块与业务逻辑的关系 如何优化 reactor 网络编程关注的问题
62 1
|
2月前
|
负载均衡 应用服务中间件 nginx
Nginx四层负载均衡在秒杀系统中的应用
Nginx四层负载均衡在秒杀系统中的应用
39 0
|
2月前
|
负载均衡 应用服务中间件 nginx
Nginx负载均衡选择在秒杀系统中的应用
Nginx负载均衡选择在秒杀系统中的应用
59 0