nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 一、启用gzip 1 gzip on; 2 gzip_min_length 1k; 3 gzip_buffers 4 16k; 4 gzip_http_version 1.

一、启用gzip

1     gzip  on;
2     gzip_min_length 1k;
3     gzip_buffers 4 16k;
4     gzip_http_version 1.1;
5     gzip_comp_level 2;
6     gzip_types text/plain application/x-javascript text/css application/xml application/json;
7     gzip_vary on;
View Code

将上面这段放在nginx.conf文件 http{...}之间即可

 

二、虚拟主机

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;
 4         access_log logs/aaa.access.log combined;
 5         location / {
 6             root   r:/www/aaa.com;
 7             index  index.html index.htm;
 8         }       
 9     }
10 
11     server {
12         listen       80;
13         server_name  www.bbb.com;
14         access_log logs/bbb.access.log combined;
15         location / {
16             root   r:/www/bbb.com;
17             index  index.html index.htm;
18         }       
19     }
View Code

这里配置了二个虚拟主机,分别绑定到域名www.aaa.com及www.bbb.com

 

三、请求转发

如上图,为了安全起见,通常会把真正的web 应用服务器放在内网,不允许外界直接访问,这时可利用nginx的反向代理将请求转到内部服务器

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;    
 4     location / {
 5         proxy_pass http://192.168.1.201:8080 ;
 6         proxy_set_header Host $host:8080;
 7         proxy_set_header X-Real-IP $remote_addr;
 8         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 9         proxy_set_header Via "nginx";
10     }
11     access_log off;    
12     }
View Code

这样,访问 http://www.aaa.com/home/index.aspx 就相当于访问http://192.168.1.201:8080/home/index.aspx

有些时候,我们希望将共用的静态资源(比如:jquery,共用css),直接放在nginx下,背后的web app server,只处理动态资源(比如:.aspx/.do/.jsp),可以改进一下:

 1     server {
 2         listen       80;
 3         server_name  www.aaa.com;
 4     root R:/www/aaa.com;
 5 
 6     location / {
 7         proxy_pass http://192.168.1.201:8080 ;
 8         proxy_set_header Host $host:8080;
 9         proxy_set_header X-Real-IP $remote_addr;
10         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11         proxy_set_header Via "nginx";
12     }
13 
14     location ~ .*\.(js|css)?$ {
15         expires 1h;
16     }
17 
18     access_log off;    
19     }
View Code

这样,访问http://www.aaa.com/content/site.css 实际上读取的是R:/www/aaa.com/content/site.css 这个文件

 

四、负载均衡

如上图,nginx在前端利用反向代理实现软件负载均衡,nginx不仅能实现负载均衡,当某一个node失效时,还能自动故障转移,关键配置如下:

 1     proxy_connect_timeout 5; 
 2     
 3     upstream aaa_server_group{    
 4     server 172.21.129.181:9091 max_fails=1 fail_timeout=60s; 
 5     server 172.21.129.181:9092 max_fails=1 fail_timeout=60s; 
 6     server 172.21.129.57:9012 max_fails=1 fail_timeout=60s;
 7     ip_hash;
 8     }
 9 
10     server {
11         listen       80;
12         server_name  www.aaa.com;
13     root R:/www/aaa.com;
14 
15     location / {
16         proxy_next_upstream http_502 http_504 error timeout invalid_header;
17         proxy_pass http://aaa_server_group ;            
18         proxy_set_header X-Forwarded-For $remote_addr;        
19     }
20 
21     location ~ .*\.(js|css)?$ {
22         expires 1h;
23     }
24 
25     access_log off;    
26     }
View Code

解释一下:

第1行, proxy_connect_timeout 5;表示nginx连接后端服务器时,如果超过5秒没反应,则认为超时

第3行,这里定义了一组服务器aaa_server_group,其中max_fails=1 fail_timeout=60s 表示如果该节点转发失败1次,接下来的60秒内,将不再转发到这台服务器

第6行,表示如果后端服务器返回502,504,超时等错误时,即认为节点失效,自动将请求转发到其它节点

nginx负载均衡的方案有好几种,这里我们配置为ip_hash;表示会根据客户端的IP生成hash,固定转发到某一台node,这样可解决集群环境中session丢失的问题。如果web应用中没有使用session,去掉ip_hash;即变成轮讯方案。此外,4-6行上,还可以加weight=N来指定权重,按权重转发,如果服务器配置不均衡,比如某一台服务器配置特别强,可以考虑将这台服务器的weight值加大。

如果某台服务器暂时不想加入负载均衡,在最后加 down即可。

 

最后附送一个小技巧:nginx -t 可以检查配置文件是否正确 

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
7天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
7天前
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
|
7天前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
|
7天前
|
Kubernetes 负载均衡 网络协议
k8s学习--负载均衡器matelLB的详细解释与安装
k8s学习--负载均衡器matelLB的详细解释与安装
|
2月前
|
应用服务中间件 nginx
nginx配置gzip压缩
nginx配置gzip压缩
|
3月前
|
缓存 负载均衡 算法
(四)网络编程之请求分发篇:负载均衡静态调度算法、平滑轮询加权、一致性哈希、最小活跃数算法实践!
先如今所有的技术栈中,只要一谈关于高可用、高并发处理相关的实现,必然会牵扯到集群这个话题,也就是部署多台服务器共同对外提供服务,从而做到提升系统吞吐量,优化系统的整体性能以及稳定性等目的。
|
3月前
|
运维 负载均衡 Serverless
Serverless 应用引擎使用问题之如何将应用部署到多个实例中,并利用SLB来分发请求负载
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
43 1
|
2月前
|
负载均衡 前端开发 数据处理
"揭秘!ALB负载均衡器如何赋能Airflow,让数据处理命令请求在云端翩翩起舞,挑战性能极限,你不可不知的秘密!"
【8月更文挑战第20天】在现代云计算环境中,负载均衡ALB作为七层HTTP/HTTPS流量分发器,能显著提升系统的可用性和扩展性。结合Airflow这一开源工作流管理平台,ALB可以有效分发其REST API命令请求。通过配置ALB实例监听HTTP/S请求,并将多个Airflow实例加入目标组,再配合健康检查确保实例稳定,即可实现对Airflow命令的高效负载均衡,进而增强数据处理任务的可靠性和性能。
27 0
|
3月前
|
运维 负载均衡 算法
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
224 2