设为首页 收藏本站
查看: 1182|回复: 0

[经验分享] RPM包安装Nginx实现反代和集群功能

[复制链接]

尚未签到

发表于 2018-11-14 06:28:00 | 显示全部楼层 |阅读模式
  当服务器的访问量大量飙升的时候,一台服务器就会承受不了那么大的压力,所以我们可以将例如web这种服务进行分流,转发到其他服务器进行处理,这种转发的方式使用的是Nginx的ngx_http_proxy_module模块和upstream功能。
  一、机器准备和软件安装
  首先要准备三台虚拟机,一台虚拟机安装Nginx进行代理功能的实现,另外两台安装Httpd进行Web功能的实现。在这里,我准备了一台IP为172.16.2.1的主机安装Nginx,另两台IP分别为172.16.2.2和172.16.2.3的主机安装Httpd(三台都是CentOS 6):
配置yum源:  
[nginx]
  
name=nginx
  
enabled=1
  
baseurl=http://nginx.org/packages/centos/6/x86_64/
  
gpgcheck=0
  使用yum -y install nginx和yum -y install httpd来进行安装,安装完成之后,启动服务,就可以通过浏览器来进行查看(修改主页在这里不赘述nginx在“/usr/share/nginx/html/index.html”,httpd在“/var/www/html/index.html”):
DSC0000.png

DSC0001.png

DSC0002.png

  二、ngx_http_proxy_module模块
  反代转发能够实现的功能是当我们访问172.16.2.1的时候,Nginx服务器自动的将我们的访问请求转发到172.16.2.2上(172.16.2.3暂时不用),这个功能是使用ngx_http_proxy_module模块来实现的,这个模块中主要使用的参数是:proxy_pass URL,它的功能是:设置一个被代理的服务器的地址和协议以及一个用于被映射位置的可选的URI;可以反代http协议和https协议;服务器地址可以是一个域名或者IP地址再加上一个可选的端口号;
  注意:
  1) proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
  location /uri/ {
  proxy_pass http://HOST;
  }
  2) proxy_pass后面的路径是一个uri,其会将location的uri替换成proxy_pass指令后面的uri,我们可以在目标地址后面加上一个“/”来达到不更改目录的转发方式,例如:“http://HOST/”;
  location /uri/ {
  proxy_pass http://HOST/new_uri/;
  }
  3) 如果location定义uri时使用正则表达式的模式匹配(~|~*),则proxy_pass指令之后绝对不能使用uri;否则nginx会将之视为语法错误;
  location ~(区分大小写)|~*(不区分大小写) PATTERN {
  proxy_pass http://HOST;
  }

  我们在IP为172.16.2.1的Nginx反代服务器上修改其配置文件“/etc/nginx/conf.d/default.conf”(有的配置文件在其主配置文件中),在这个配置文件中找到如图所示的地方,将图中所示的那行代码添加上,就可以实现将对“172.16.2.1”的请求转发到“172.16.2.2”上。(在上边的注意中提到了对URI的匹配,在这里就能够用到,将这条语句加在了这里,实现的功能就是将所有的请求进行转发,我们也可以另外写一个“location”来匹配对应的URI)修改之后,保存退出并使用命令“nginx -t”来检查拼写是否有误,使用命令“nginx -s>
DSC0003.png

  三、ngx_http_upstream_module模块
  上头我们已经可以将前边来的Web请求转发到后端Web服务器上了,但是仅仅只能转发到一台服务器上,所以在这里我们可以使用ngx_http_upstream_module模块来实现集群,使其能够转发到多个后端Web服务器上。在上面我们准备了三台主机,一台作为Nginx代理服务器,两台作为Web服务器。在上面的实验之后,我们将其转变为集群是一件很简单的事情,只需要在Nginx配置文件的http上下文(server外边)中(如果片段配置文件中没有http上下文,可以在主配置文件中添加)添加下面这几行代码,并在location中引用即可:
    upstream httpserv {    #“httpserv”是一个随便启的名字,在location引用时使用  
        server 172.16.2.2 weight=2 fail_timeout=1 max_fail=3;
  
            #这条指令是定义后端Web服务器的地址
  
            #weight是定义其权重
  
            #fail_timeout是定义失败超时时间
  
            #max_fail是定义最大失败次数
  
        server 172.16.2.3 weight=1 fail_timeout=1 max_fail=3;
  
        server 127.0.0.1 backup;
  
            #这条指令是定义当所有的Web服务器都挂掉之后使用自己的Web服务
  
    }
DSC0004.png

  在这里使用“location”指令将符合条件的转发到服务器组中:
DSC0005.png

  在保存退出并重新加载配置文件之后,我们随便使用一台主机使用命令来访问此反代服务器:
DSC0006.png

  从图中我们可以看到集群的基本功能已经实现了,这是基于Nginx的反向代理功能实现的,它的功能比ipvsadm更加灵活,可以基于URI进行详细或不详细的匹配,而且其还可以自动的对后端Web服务器进行检测,一旦测试到后端Web服务器挂掉,就能够立即做出应急处理,例如,我们可以将“172.16.2.2”上的httpd服务关闭,然后在“172.16.2.1”上再次进行请求,可以发现,Nginx服务器已经将“172.16.2.2”从Web服务器组中剔除了:
DSC0007.png

DSC0008.png




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634689-1-1.html 上篇帖子: Nginx指定IP无须通过认证 下篇帖子: nginx配置-负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表