Nginx配置负载均衡及反向代理

简介:

简单介绍:

1、Nginx优点

Nginx 负均衡实现比较简单,可配置性很强,可以按URL做负载均衡,默认对后端有健康检查的能力。后端机器少的情况下(少于10台)负载均衡能力表现好。其优点主要有:

1)功能强大,支持高并发连接,内存消耗少:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3 万并发连接数,且在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

2)成本低廉:Nginx 为开源软件,免费使用。

3)Nginx 工作在网络的7 层,所以它可以针对Http应用本身来做分流策略,比如针对域名、目录结构等进行分流,可以实现多种分配策略,如:可以实现轮训、IP hash 等分配策略。

2、Nginx负载均衡的实现(Nginx的upstream模块所支持负载均衡的算法

  Nginx 的负载均衡是一个基于内容和应用的七层交换负载均衡,是以反向代理服务器方式实现负载均衡。因此使用Nginx 实现服务器负载均衡的关键在于ngx_http_upstream_hash_module 模块的使用和设置Nginx 反向代理配置。

1)轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。

2)权重轮询均衡(weight):可以指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。

3)ip_hash:每个请求按访问ip 的hash 结果分配,解决session问题,这样每个访客固定访问一个后端服务器,在有些应用情况下,需要将来自同一客户端的所有请求都分配给同一台服务器去负担,例如服务器将客户端注 册、购物等服务请求信息保存的本地数据库的情况下,把客户端的子请求分配给同一台服务器来处理就显的至关重要了。

4)fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5)url_hash(第三方):按访问url 的hash 结果来分配请求,使每个url 定向到同一个后端服务器,后端服务器为缓存时比较有效。

在nginx.conf 配置文件中,用upstream 指令定义一组(以4 台服务器为例)负载均衡后端服务器池:

1
2
3
4
5
upstream  test .com {     #test.com表示集群组名,随意命名;支持多组负载均衡
         ip_hash;  #设置分配方式
  server 192.168.0.203:80 weight=2 max_fails=3 fail_timeout=20s;
  server 192.168.0.204:80 weight=2 max_fails=3 fail_timeout=20s;
  }

设备状态说明:

max_fails=3:允许请求失败的次数,默认是1,当超过最大次数时,则返回proxy_next_upstream模块定义的错误

fail_timeout=20s:当max_fails访问失败3次时,这台服务器暂停时间20s

weight:默认是1,权重值越大,分配请求负载越大

down:不参与集群

backup:除backup这台外其他机器down或忙时,请求backup机器

3、设置Nginx的反向代理配置

   反向代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,反向代理方式是多个客户使用它访问内部Web服务器,使用反向代理服务器可以将请求转发给内部的Web 服务器,从而提升静态网页的访问速度。因此可以使用这种技术,让代理服务器将请求均匀转发给多台内部Web 服务器之一上,从而达到负载均衡的目的。

   使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能,具备额外的安全性,外部客户不能直接访问真实的服务器。 并且实现起来可以实现较好的负载均衡策略,将负载可以非常均衡的分给内部服务器,不会出现负载集中到某个服务器的偶然现象。

nginx.conf 配置文件中,进行反向代理配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
  listen 80;
  server_name www. test .com;
  location / {
  root html;
  index index.html index.htm;
  proxy_pass http: //www . test .com;
  proxy_headers_hash_max_size 51200;
  proxy_headers_hash_bucket_size 6400;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  include proxy.conf;
  }
  }

拓扑图:

185207378.jpg

环境描述:

系统均为:CentOS6.3_x64

Nginx:192.168.0.202 #负载均衡

WEB1:192.168.0.203 #后端网站

WEB2:192.168.0.204

测试机做host记录:192.168.0.202 www.test.com

一、安装nginx

1、安装依赖包和创建用户和组

1
2
3
# yum install -y gcc gcc-c++ make kernel-headers glibc-headers zlib-devel openssl openssl-devel pcre-devel
# groupadd nginx
# useradd -g nginx -s /sbin/nologin nginx

2、安装nginx

1
2
3
4
# tar zxvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
# ./configure --perfix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
# make && make install

二、配置主配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# vi /usr/local/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 8;
error_log logs /error .log;
pid logs /nginx .pid;
events {
  worker_connections 1024;
}
http {
  include mime.types;
  default_type application /octet-stream ;
  log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"' ;
  access_log logs /access .log main;  #上面是访问日志格式和记录位置
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 65;
  gzip  on;
upstream www. test .com {
  server 192.168.0.203:80 weight=2;   #我们使用weight算法
  server 192.168.0.204:80 weight=3;   考虑到服务器性能不均
  }
  server {
  listen 80;
  server_name www. test .com;
  location / {
  root html;
  index index.html index.htm;  #请求转向mysvr 定义的服务器列表
  proxy_pass http: //www . test .com;
  proxy_headers_hash_max_size 51200;
  #设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数。
  proxy_headers_hash_bucket_size 6400;  #设置头部哈希表大小
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  include proxy.conf;
  }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
# vi /usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;  #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;  #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 90;  #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k;  #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 6 32k;  #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;  #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传

三、维护命令

1
2
3
4
5
6
7
# /usr/local/nginx/sbin/nginx #启动nginx
# /sbin/nginx -s stop #快速终止web服务
# /sbin/nginx -s quit #有安排的结束web服务
# /sbin/nginx -s reload #重新加载相关配置
# /logs/access.log #访问日志
# /logs/error.log #错误日志
# echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local #设置开机启动

配置完毕,后端web不需要配置,启动nginx后访问www.test.com可以看到轮训调度后端web!



本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1300684,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
10月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
940 87
|
6月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
565 1
|
10月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
962 14
|
5月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
374 18
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
597 17
|
7月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
8月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
1825 10
|
7月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
362 0
|
9月前
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
668 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡