使用Nginx反向代理来实现简单的负载均衡
Nginx反向代理的原理优点:
反向代理可以简单的理解为:代理服务器来接收internet上的服务器请求,然后将请求转发给内部的服务器上,然后将结果返回给internet上请求的客户端,所以代理服务器对外表现出来的只是一台服务器。反向代理服务器也称为Web服务器加速,针对web服务器提供加速功能。他作为代理服务器,并不针对浏览器用户,而是针对一台或者多台特定的web服务器。可以缓存web的页面,降低web服务器的访问量,从而来降低web服务器的负载,实施反向代理,只要将反向代理设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是代理服务器的IP地址,而非原始Web服务器的IP地址,这时代理服务器设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被转载到反向代理服务上。不但能够很大程度上减轻web服务器的负担,提高访问速度,而且能够防止外部网主机直接和web服务器直接通信带来的安全隐患。
Nginx proxy是Nginx的王牌功能,利用proxy基本可以实现一个完整的7层负载均
衡,它有这 些特色:
1. 功能强大,性能卓越,运行稳定。
2. 配置简单灵活。
3. 能够自动剔除工作不正常的后端服务器。
4. 上传文件使用异步模式。
5. 支持多种分配策略,可以分配权重,分配方式灵活
项目拓扑:
配置环境:
三台CentOS6.2X86 1台做Nginx Proxy 2台Apache做页面测试服务器
配置步骤:
在安装之前首先解决依赖包的问题,pcre-devel openssl zlib-devel
一、安装nginx服务器
1. 后台的web服务我们使用的是Apache服务,关于Apache的安装部署我们在这里就不做详细说明了,我们的重点在nginx方向代理怎么配置。
2. 安装Nginx服务
- yum -y install make
- yum -y install pcre pcre-devel openssl-devel zlib-devel gcc gcc-c++
- mkdir /usr/local/site/nginx -p
- useradd -s /sbin/nologin www
- rpm -qa | grep httpd
- ./configure --prefix=/usr/local/site/nginx/ --user=www --group=www \ 指定Nginx用户组
- --with-http_stub_status_module \ 非核心模块,获取从上次开启之后Nginx的状态
- --with-http_ssl_module 开启SSL模块
- make && make install
3. 修改nginx主配置文件,主配置文件路径:/usr/local/site/nginx/conf/nginx.conf,最好配置文件作下备份;
- user www; 指定nginx的运行用户,
- worker_processes 1; 指定线程,默认情况下Nginx是单线程运行,
- #error_log logs/error.log; 日志模块
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #pid logs/nginx.pid; //inx主进程ID
- events {
- user epoll; //inx的高效模式;
- worker_connections 65535; //文件最大的连接数;
- }
- http {
- include mime.types; //置文件模块;
- default_type application/octet-stream; //核心配置文件模块;
- sendfile on; //开启高效传输模式;
- tcp_nopush on; //防止网络端口阻塞;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #gzip on; //开启压缩模块,需要注意的是在配置文件中开启之后是不生效的,还需要加载gzip模块
- server {
- listen 80; //监听的80端口
- server_name proxy.rsyslog.net; //指定代理服务器的域名
- location / {
- root html; //配置文件所在的目录,这里是相对路径
- index index.html index.htm; //页面文件的类型;
- }
- error_page 404 /404.html; //相关错误提示页面
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
然后重启服务测试服务是否正常,links proxy.rsyslog.net 域名需要在dns服务器上配置正确
Nginx支持不间断运行,启动的命令
kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid`
查看Nginx服务状态,确定正常之后我们来配置Nginx Proxy,查看Nginx端口
- [root@localhost conf]# ps -ef | grep nginx
- root 27276 1 0 15:53 ? 00:00:00 nginx: master process ./nginx
- www 27315 27276 0 16:03 ? 00:00:00 nginx: worker process
- root 27317 25195 0 16:05 pts/0 00:00:00 grep nginx
二、配置Nginx 反向代理服务器,反向代理服务器的配置如下;需要修改两个两个地方,在HTTP字段里面修改和Server字段中修改,在下图中只把需要添加的文件列出来即可。
- http {
- include mime.types;
- default_type application/octet-stream;
- client_max_body_size 300m; //允许客户端请求的最大的单个文件字节数
- client_body_buffer_size 128k; //缓存区代理用户端文件字节数
- client_body_temp_path /dev/shm/client_body_temp; //请求试图写入到缓存文件的目录路径
- proxy_connect_timeout600; //和后端服务器连接的超时时间,
- proxy_read_timeout 600; //连接成功等待后端相应的时间,默认是60S
- proxy_send_timeout 600; //后端服务器的回传时间,规定服务器在一定的时间内传送完。
- proxy_buffer_size 16k; //代理服务器的缓存文件头部文件大小,默认是4K
- proxy_buffers 4 32k; //后端真是服务器的数量和大小
- proxy_busy_buffers_size 64k; //当系统忙事,申请更大proxy_buffer
- proxy_temp_file_write_size 64k; //写入临时目录的文件大小
- proxy_temp_path /dev/shm/proxy_temp; //指定一个目录来缓存比较大的代理请求
- 如下是HTTP负载均衡模块upstream 指定设置一群服务器,服务器可以指定不同的权重,默认为1。Nginx支持5种方式的查询,
- 1、 轮询 Nginx默认的查询方式
- 2、 Weight 指定分配的轮询方式,根据后端服务器的性能来做权重,在此案例中我们使用这种方式来轮询的
- 3、 Ip_hash 每个请求按照ip的hash结果分配,这样每个IP地址就可以固定的访问后端的一台服务器,解决了session的问题
- 4、 Fair 第三方模块,这个原理是按照响应时间的优先来分配的,
- 5、 url_hash 按照url的hash结果来分配请求,使每个url定向到同一个后端的服务器;
- upstream cluster {
- server 192.168.100.238:80 weight=8 max_fails=2 fail_timeout=30s;
- server 192.168.100.248:80 weight=8 max_fails=2 fail_timeout=30s;
- }
- server {
- listen 80;
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- proxy_pass http://cluster/; //指定需要代理的URL,
- proxy_redirect off; //如果需要从后端打开location和Refresh字段,可以开启。
- proxy_set_header X-Real-IP $remote_addr; //允许将发送到后端的服务器请求重新定义或者增加一个字段,这个可以是变量也是文本组合。
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息 X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。
- proxy_set_header Host $host; //首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。
- proxy_next_upstream error timeout invalid_header http_500 http_502 http_503
- http_504 http_404; 服务器头部超时相应的各种状态
- }
- }
- }
配置完成之后平滑重启Nginx服务
- kill -HUP `cat /usr/local/site/nginx/logs/nginx.pid`
三、测试,刷新测试能正常进行负载,可以根据自己的环境来对nginx proxy的设置轮询模式;
本文转自devilangel 51CTO博客,原文链接:http://blog.51cto.com/devliangel/1142008,如需转载请自行联系原作者
使用Nginx反向代理来实现简单的负载均衡相关推荐
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...
Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...
- Nginx 反向代理、动静分离、负载均衡及配置实例
文章目录 Nginx 代理 正向代理 反向代理 配置实例 动静分离 概念 配置实例 负载均衡 概念 分配策略 配置实例 Nginx Nginx ("engine x") 是一个高性 ...
- Nginx运维之一 反向代理、动静分离、负载均衡
Nginx运维之一 反向代理.动静分离.负载均衡 Nginx简述 Nginx 优势功能 Tengine 反向代理 正向代理 反向代理 动静分离 负载均衡 Nginx简述 Nginx是lgor Syso ...
- Nginx代理——正向、反向代理,动静分离和负载均衡
文章目录 一.Nginx代理概述 (1)什么是正向代理和反向代理 -正向代理: -反向代理 -反向代理和正向代理的区别 (2)配置代理 -Nginx代理配置语法 -配置正向代理 -Nginx反向代理示 ...
- Nginx配置文件说明-反向代理,动静分离,负载均衡
#user nobody;#开启进程数 <=CPU数 worker_processes 1;#错误日志保存位置 #error_log logs/error.log; #error_log log ...
- Nginx 基本概念(反向代理、动静分离、负载均衡、高可用)、安装配置(JDK\Tomcat\Nginx\Keepalived)、配置实例效果
这篇文章将先阐述Nginx相关概念,然后介绍Nginx相关环境的安装配置过程(包括Linux下JDK\Tomcat的安装,都是自己动手操作的记录),及反向代理.负载均衡.动静分离.高可用的配置及测试过 ...
- nginx 反向proxy多个 tomcat,负载均衡
负载均衡 一,正向proxy与反向proxynginx 二,nginx安装 三,nginx负载均衡 场景 四,配置nginx访问代理多个tomcat 一,正向proxy与反向proxynginx 正向 ...
- nginx反向代理缓存服务器构建
博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...
最新文章
- windows10上使用一个tomcat部署2个项目
- 简单介绍基于PostgreSql 别名区分大小写的问题
- 软件开发环境-工具集
- 在JavaScript中逐个遍历数组?
- 诺奖团队最新研究:独居太久容易睡眠不足、暴饮暴食 | Nature
- 记一次理想浪漫的毕旅
- 服务器操作系统与安装步骤,服务器操作系统与安装步骤
- 31销售是让用户用到货真价实的产品
- RTX5 | 时间延时
- 能量谱与功率谱(转自百度文库与维基百科)
- 在安卓上运行 TensorFlow:让深度学习进入移动端
- 计算机系统的组成一般不包括,建筑设备监控子系统组成一般不包括( )A.中央计算机系统B.布线系统C.DDCD.各类传感器及执 - 作业在线问答...
- canvas基础学习笔记
- 如何将计算机硬盘导出,移动硬盘坏了怎么导出数据?这几点一定要牢记!
- STM32F103C8T6在Arduino框架下驱动SH1106 1.3“ IIC OLED显示
- 【GNSS】GREAT多频多系统GREAT-UPD开源代码-第4.1章 代码解读之gnss.h/gnss.cpp
- 2022爱分析・出海数字化系列报告之“出海实时互动与通信”厂商全景报告 | 爱分析报告
- make: *** No targets specified and no makefile found. Stop.错误解决办法
- linux 应用层gpio中断_linux下GPIO中断驱动US100传感器--Apple的学习笔记
- U-boot启动流程(Linux内核)的分析(四)
热门文章
- 程序一旦发觉写得不理想,那就得重构它
- Oracle正则表达式的用法
- linux部署redis集群遇到的问题
- scanf和printf在c语言中的作用,C语言中的scanf与printf
- android 滚动列表框,建立滚动列表框
- oracle 内存分配,Oracle调优修改10g,11g内存分配
- c语言printf %llo,c++ - Printf疯狂了 - 堆栈内存溢出
- redis linux 运行依赖,在Ubuntu系统下安装Redis Desktop Manager的方法
- mysql referential_constraints_hibernate4.3.8与spring mvc结合遇到的问题
- python 案例串接_Python基础系例--字典串操作