upstream和proxy模块
nginx负载均衡-upstream和proxy模块(1)
教程每周二、四、六更新
前面完成了负载均衡的搭建,但是只是实现了简单的功能。接下来我们就来详细了解和负载均衡相关的两个模块: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 # 我们看到返回了对应的内容
雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
195个上一篇nginx负载均衡-部署下一篇nginx负载均衡-upstream和proxy模块(2)