Nginx负载均衡初步搭建

负载均衡(Load Balance):将用户的访问分摊到多个服务器上,负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。

负载均衡也是反向代理所能实现的一个重要功能,区分于正向代理:

反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

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

nginx的负载均衡主要通过 upstream(ngx_http_upstream_module)和http_proxy(ngx_http_proxy_module)这两个模块完成。

1. upstream(ngx_http_upstream_module)

定义算法,设定负载均衡的服务器列表。

官方文档:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

用法:

upstream backend                //upstream是定义在server{ }之外的,不能定义在server{ }内部。
{
    server    backend1.example.com       weight=5;
    server    backend2.example.com:8080;
    server    unix:/tmp/backend3;
 
    server    backup1.example.com:8080   backup;
    server    backup2.example.com:8080   backup;
}

Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方调度算法。

轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。

fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

url_hash:此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

2. http_proxy(ngx_http_proxy_module)

官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

用法:

location / {
   proxy_pass      http://localhost:8000;
   proxy_set_header Host      $host;
   proxy_set_header X-Real-IP $remote_addr;
}

此模块主要是引用server{}外的upstream定义。

下面由实际情况来初步配置nginx的负载均衡:

LB机:  192.168.73.160

lamp机: 192.168.73.155

lnmp机: 192.168.73.156

注:为了学习才分别搭建apache和nginx的web服务器,正常生产一般只配一种。

  1. LB机安装nginx
# yum install -y pcre-devel pcre openssl-devel   安装必须的包
# tar zxvf nginx-1.6.3.tar.gz
# useradd -M -s /sbin/nologin nginx
# ./configure --prefix=/application/nginx --user=nginx--group=nginx --with-http_ssl_module --with-http_stub_status_module
# make&&make install

编辑nginx配置文件:

worker_processes  1;
error_log logs/error.log error;
events {
   worker_connections  1024;
        }
http {
   include       mime.types;
   default_type application/octet-stream;
   sendfile        on;
   keepalive_timeout  65;
   log_format  main  ‘$remote_addr - $remote_user [$time_local]"$request" ‘
             ‘$status $body_bytes_sent"$http_referer" ‘
             ‘"$http_user_agent" "$http_x_forwarded_for"‘;
upstream bbs_server_pools
{
        server 192.168.73.155:80;
        server 192.168.73.156:80;
}
 
  ##nginx vhosts config;
  ##include extra/lb_www.conf;
    include extra/lb_bbs.conf;
  ##include extra/lb_blog.conf;
    }

定义好之后,在extra/lb_bbs.conf中引用

# vim/application/nginx/conf/extra/lb_bbs.conf
   server {
       listen       80;
        server_name bbs.etiantian.org;
       location / {
           proxy_pass http://bbs_server_pools;
                   }
              }

验证:

LB主机配置完成,reload

# /etc/init.d/nginx reload
nginx: the configuration file /application/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx/conf/nginx.conf test is successful
重新载入 nginx:                                           [确定]

在lamp主机编辑主页文件:

# vim /var/html/www/index.php
<?php
        echo "apache web ";
?>

在lnmp主机编辑主页文件:

# vim /application/nginx/html/www/index.php 
<?php
        echo "nginx web ";
?>

使用其它同网段的主机访问:

[[email protected] ~]# for n in `seq 10`;do curl 192.168.73.160;sleep 1;done
nginx web apache web nginx web apache web nginx web apache web nginx web apache web nginx web apache web

简单的轮询负载均衡配置成功。

注:以上配置即可实现负载均衡功能,但请求bbs网站,返回的却是www,原因是客户请求BBS的header没有被LB负载均衡器传给web服务器,需要server标签添加参数:

vim/application/nginx/conf/extra/lb_bbs.conf

proxy_set_header Host $host;

此时查看web服务器日志,发现访问地址显示的是LB负载均衡的地址,我们需要的是用户访问源地址,需要在LB机nginx的server标签中添加:

vim/application/nginx/conf/extra/lb_bbs.conf

proxy_set_header X-Forwarded-For    $remote_addr;

同时web服务器的日志格式也需要修改:

nginx服务器:vimconf/nginx.conf

log_format main  ‘$remote_addr - $remote_user[$time_local] "$request" ‘

‘$status $body_bytes_sent"$http_referer" ‘

‘"$http_user_agent" "$http_x_forwarded_for"‘;

apache服务器:vim /application/apache2/conf/httpd.conf

LogFormat "%h %l %u %t\"%r\" %>s %b \"%{X-Forwarded-For}i\""common

重启nginx和apache即可

时间: 2024-11-12 13:23:56

Nginx负载均衡初步搭建的相关文章

nginx负载均衡的搭建和简单例子

一,nginx 下载地址:http://nginx.org/en/download.html 二,下载对应版本 三,打开下载的安装包:如下图 四,运行nginx.exe 1,这个是时候,程序运行都是一闪而过的,但我们要确认有没有运行成功,我们需要去查看log文件下的error,日志看有没有报错 第一次运行报错:2019/04/25 12:16:32 [emerg] 10856#10840: bind() to 0.0.0.0:80 failed (10013: An attempt was ma

使用Nginx负载均衡搭建高性能.NETweb应用程序二

在文章<使用Nginx负载均衡搭建高性能.NETweb应用程序一>中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用. 一.下载Nginx部署包 到Nginx官网去下载一个windows平台下面的Nginx部署包,目前我下载的是一个nginx-1.6.2版本的. 二.命令启动服务 启动:start nginx.exe 停止:nginx -s stop 重新加载: nginx -s reload 三.实例搭建 首 选:我们要在我们

用docker搭建nginx负载均衡测试环境

昨天收了一篇好文章 nginx常用功能全揭秘,想着今天来按照步骤配置一下nginx代理的,结果在使用docker的时候一直出问题,才诞生了这篇关于docker配置nginx负载均衡. 首先在宿主机上创建两个两个目录n1,n2,分别作为两台nginx服务器的目录. mkdir -p n1 n2 然后分别在目录里新建一个index.html文件,并输入内容作为nginx集群配置成功的后页面呈现的标识. cd n1 && echo 'this is n1' >> index.html

Linux CentOS搭建JDK+Mysql+Tomcat+Nginx负载均衡环境 &nbsp; &nbsp; &nbsp;

本文使用了Tomcat+Nginx环境,主要起到负载均衡的作用,使用Tomcat处理jsp后台程序,使用Nginx处理静态页面. 准备工作(下载软件版本,请自行百度下载) 安装包放至:/usr/local/src 安装地址:/usr/local/软件名 1.apache-tomcat-6.0.48 2.mysql-5.5.54 3.nginx-1.6.3 4.cmake-2.8.8 5.pcre-8.40 6.jdk-8u11-linux-x64 7.openssl-1.1.0d(https使用

搭建Nginx负载均衡服务文档一

搭建负载均衡服务的实际需求: 1.把单台服务器无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理,减少用户等待响应的时间,提升用户体验. 2.单个重负载的运算分担到多台节点设备上做并行处理,每个节点处理结束后,将结果汇总,返回给用户. 3.7*24小时的服务保证,任意一个或多个有限后面节点设备宕机,不能影响业务. 实现Nginx负载均衡需要两个组件: l  Ngx_http_proxy_module,用于把请求后抛给服务器节点或upstream服务器池: l  Ngx_http

CentOS系统搭建Nginx负载均衡

一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.基于Red Hat持续升级,和对已知BUG修复,所以CentOS更多用于搭建大型企业级服务器.目前较新版本为7.0,本文使用CentOS7 64bit进行搭建系统负载均衡. 二.安装VMWare VMWare (Virtual

Net分布式系统之二:CentOS系统搭建Nginx负载均衡

一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.基于Red Hat持续升级,和对已知BUG修复,所以CentOS更多用于搭建大型企业级服务器.目前较新版本为7.0,本文使用CentOS7 64bit进行搭建系统负载均衡. 二.安装VMWare VMWare (Virtual

Nginx+Tomcat负载均衡群集搭建

Tomcat简介 Tomcat最初是由Sun的软件构架师詹姆斯邓肯.戴维森开发 安装完Tomcat后安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件 Tomcat重要目录 bin:存放启动和关闭Tomcat脚本 conf:存放Tomcat不同的配置文件 doc:存放Tomcat文档 lib/japser/common:存放Tomcat运行需要的库文件 logs:存放Tomcat执行时的LOG文件 src:存放Tomcat的源代码 webapps:Tomcat的主要Web发布目录 w

docker 搭建 nginx负载均衡

本文描述如何在一台机器上搭建nginx负载均衡,我将会启动3个nginx的docker,分别是1台前置nginx负责分发,后面2台负责处理请求. 首先我切换到/usr/local/docker/文件夹下,这个文件夹是专门用来做docker映射文件夹用的,docker里的重要的文件夹会映射到这里,在这里执行 mkdir nginx mkdir nginx01 mkdir nginx02 nginx下存储的是前置nginx的文件 nginx01和nginx02负责存储后边两台nginx服务器的文件