首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12.17 Nginx负载均衡

12.17 Nginx负载均衡

作者头像
运维小白
发布2018-02-06 16:02:04
8460
发布2018-02-06 16:02:04
举报
文章被收录于专栏:运维小白运维小白

Nginx负载均衡目录概要

  • vim /usr/local/nginx/conf/vhost/load.conf // 写入如下内容
upstream qq_com
{
    ip_hash;
    server 61.135.157.156:80;
    server 125.39.240.113:80;
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq_com;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  • upstream来指定多个web server

Nginx负载均衡

  • 代理一台机器称为代理 ,代理两台机器就可以称为负载均衡
  • 代理服务器后面可以有多个web服务器,多个web服务器去提供服务的时候,就可以实现一个负载均衡的功能
  • 正常情况下,用户访问web服务器,是一台一台去请求;要么就是指定一个IP,把这域名解析到多台服务器上
  • 案例
    • 用户1 –> web1服务器
    • 用户2 –> web2服务器
      • 假设这时web1服务器挂掉了(宕机),用户1因为解析到了web1,但web1宕机了,所以就无法正常访问
      • 这时候若是用nginx的负载均衡,在web1宕机后,代理服务器就不会把请求发送给web1,这就是代理的一个优点,负载均衡的优点
  1. 配置负载均衡,负载均衡的配置借助了upstream 模块
  2. 这里将qq.com作为演示对象
  • dig命令查看解析的IP——>yum install -y bind-utils
[root@hanfeng ~]# yum install -y bind-utils


[root@hanfeng ~]# dig qq.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24485
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;qq.com.				IN	A

;; ANSWER SECTION:
qq.com.			273	IN	A	125.39.240.113
qq.com.			273	IN	A	61.135.157.156

;; Query time: 18 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: 一 1月 08 22:46:59 CST 2018
;; MSG SIZE  rcvd: 67

[root@hanfeng ~]# 
  1. 会看到返回出两个IP,这个就是域名解析,也就是qq.com解析到了两个IP上
  2. 这时候就可以用这两个125.39.240.113IP和61.135.157.156IP,去 做负载均衡
  3. 写一个配置文件vim /usr/local/nginx/conf/vhost/load.conf
[root@hanfeng ~]# vim /usr/local/nginx/conf/vhost/load.conf

写入以下内容
upstream qq_com        //upstream后的名称自定义
{
    ip_hash;        //目的是为了让同一个用户始终保持在同一个机器上
    server 61.135.157.156:80;    //如果域名解析端口是80,这段配置上的指定端口80是可以省略的
    server 125.39.240.113:80;
}
server
{
    listen 80;    //定义监听端口
    server_name www.qq.com;     //域名

    location /
    {
        proxy_pass      http://qq_com;         //这里填写的是upstream 的名字
即“http://upstream”,因为作为一个模块,代理访问的是通过解析后的IP访问;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
保存退出
  1. upstream来指定多个web server
  • 当有多个服务器同时对一个域名提供服务的时候,长时间访问一个域名,在一定的时效内,会出现需要重新登录或者是说跳转到另外一个地址的服务器上;ip_hash,就是使通过这个代理访问的同一个域名的多个IP的服务器是,始终保持在一个IP上对这个域名进行访问
  1. 在未加载配置的时候,本机去访问qq.com,回去访问默认虚拟主机
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
This is the default site.
[root@hanfeng ~]# 
  1. 测试访问qq.com
  2. 检查配置文件语法,并重新加载
[root@hanfeng ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@hanfeng ~]# /usr/local/nginx/sbin/nginx -s reload
[root@hanfeng ~]# 
  1. 这时再来访问qq.com,会看到的是qq.com的主页,反馈回来的是网页的源码
[root@hanfeng ~]# curl -x127.0.0.1:80 www.qq.com
  1. 这个就是负载均衡

nginx代理和负载均衡的知识点

  • nginx不支持去代理https,也就是在配置文件中的server 后不能写443,是不支持的,只能代理http、tcp
  • 若想要实现代理https,nginx监听443端口,但web服务必须是80端口
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx负载均衡目录概要
  • Nginx负载均衡
    • nginx代理和负载均衡的知识点
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档