upstream和proxy模块

nginx负载均衡-upstream和proxy模块(1)

Cloud研习社 Cloud研习社 2023-01-10 07:31 发表于北京
图片图片

教程每周二、四、六更新

图片

前面完成了负载均衡的搭建,但是只是实现了简单的功能。接下来我们就来详细了解和负载均衡相关的两个模块:ngx_http_upstream_module和ngx_http_proxy_module。

带host字段转发

我们先调整web01和lnmp(10.0.0.31)主机的环境(可以参考“基于域名的虚拟主机”章节):

# 修改配置文件
[root@web01 nginx]# cat /etc/nginx/conf.d/domainsite.conf
server {
    listen 80;
    server_name domainsite01.a.com;
    location / {
        root /data/webpage/domainsite01;
        access_log /var/log/nginx/domainsite01.access.log main;
        error_log /var/log/nginx/domainsite01.error.log warn;
    }
}
server {
    listen 80;
    server_name domainsite02.a.com;
    location / {
        root /data/webpage/domainsite02;
        access_log /var/log/nginx/domainsite02.access.log main;
        error_log /var/log/nginx/domainsite02.error.log warn;
    }
}

# 重启nginx以后测试一下效果:
[root@web01 log]# curl domainsite01.a.com
domainsite01 for blog
[root@web01 log]# curl domainsite02.a.com
domainsite02 for news
[root@web01 log]# curl 10.0.0.14
web01

我们再改一下lnmp(10.0.0.31)服务器的nginx配置:

[root@localhost ~]# mkdir -p /data/webpage/domainsite01
[root@localhost ~]# mkdir -p /data/webpage/domainsite02

[root@localhost ~]# echo "domainsite01 for blog" > /data/webpage/domainsite01/index.html
[root@localhost ~]# echo "domainsite02 for news" > /data/webpage/domainsite02/index.html

[root@localhost ~]# cat /etc/nginx/conf.d/domainsite.conf
server {
    listen 80;
    server_name domainsite01.a.com;
    location / {
        root /data/webpage/domainsite01;
        access_log /var/log/nginx/domainsite01.access.log main;
        error_log /var/log/nginx/domainsite01.error.log warn;
    }
}
server {
    listen 80;
    server_name domainsite02.a.com;
    location / {
        root /data/webpage/domainsite02;
        access_log /var/log/nginx/domainsite02.access.log main;
        error_log /var/log/nginx/domainsite02.error.log warn;
    }
    
    
[root@localhost conf.d]# mv default.conf wordpress.conf.bak

# 修改主配置文件
[root@localhost ~]# cat /etc/nginx/nginx.conf
......
http {
......
    include /etc/nginx/conf.d/*.conf; # 修改这一行
}

[root@localhost conf.d]# mv default.conf.bak default.conf
[root@localhost conf.d]# mv lb.conf lb.conf.bak

# 重启nginx以后测试一下效果:
[root@localhost conf.d]# curl domainsite01.a.com
domainsite01 for blog
[root@localhost conf.d]# curl domainsite02.a.com
domainsite02 for news
[root@localhost conf.d]# curl 10.0.0.31
lnmp

接下来修改负载均衡服务器的配置:

[root@lb01 ~]# cat /etc/nginx/conf.d/lb01.conf
upstream backend {
    server 10.0.0.14    weight=1;
    server 10.0.0.31    weight=1;
}

server {
    listen 80;
    server_name domainsite01.a.com;
    location / {
        proxy_pass http://backend;
    }
}

server {
    listen 80;
    server_name domainsite02.a.com;
    location / {
        proxy_pass http://backend;
    }
}

重启nginx后:

[root@lb01 ~]# curl domainsite01.a.com
web01
[root@lb01 ~]# curl domainsite01.a.com
lnmp
[root@lb01 ~]# curl domainsite02.a.com
web01

我们发现,无论怎么请求,返回的结果都和直接使用IP地址请求的结果一样。这是有因为负载均衡收到请求再去后端服务器请求数据的时候,没有把我们请求的域名带过去,而只是用IP地址去请求,如果希望负载均衡通过使用我们提供的域名请求后端服务的话,需要加入proxy_set_header 选项:

[root@lb01 ~]# cat /etc/nginx/conf.d/lb01.conf
upstream backend {
    server 10.0.0.14    weight=1;
    server 10.0.0.31    weight=1;
}

server {
    listen 80;
    server_name domainsite01.a.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host; # $host就是请求报文头中host字段的值
    }
}

server {
    listen 80;
    server_name domainsite02.a.com;
    location / {
        proxy_pass http://backend;
      proxy_set_header Host $host; # $host就是请求报文头中host字段的值
    }
}

[root@lb01 ~]# systemctl restart nginx
[root@lb01 ~]# curl domainsite01.a.com
domainsite01 for blog # 我们看到返回了对应的内容
[root@lb01 ~]# curl domainsite02.a.com
domainsite02 for news # 我们看到返回了对应的内容

 


 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

LNMP - FastCGI

部署LNMP(1)

部署LNMP(2)- 配置nginx

部署LNMP(3)- 配置mysql

验证wordpress

nginx负载均衡-概述

nginx负载均衡-部署

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
179篇原创内容

图片

 

收录于合集 #一站式教程
 195
上一篇nginx负载均衡-部署下一篇nginx负载均衡-upstream和proxy模块(2)
阅读 108
 
posted @ 2023-02-10 16:00  往事已成昨天  阅读(65)  评论(0编辑  收藏  举报