nginx负载均衡-基于多域名的负载均衡(二)

注意:

(1) 做负载均衡技术至少需要三台服务器:一台独立的负载均衡器,两台web服务器做集群

(2) keeplived(高可用)+nginx(负载均衡) 可以实现多域名对应一个VIP,并且访问不同域名,显示不同主页,可行,已测

一、nginx分别代理后端web1 和 web2的三台虚拟主机

1、web1(nginx-10.0.0.7)配置基于域名的虚拟主机(以下配置了3个虚拟主机)

复制代码
[root@Oldboy extra]# cat www.conf 
server {
        listen        80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;              #这个地方指向nginx安装目录的html/www/目录下
            index  index.html index.htm;
        }
}
[root@Oldboy extra]# cat bbs.conf 
server {
        listen        80;
        server_name  bbs.etiantian.org; 
        location / {
            root   html/bbs;
            index  index.php  index.html index.htm;
        }
}
[root@Oldboy extra]# cat blog.conf 
server {
        listen        80;
        server_name  blog.etiantian.org;
        location / {
        root     html/blog;
        index    index.php;
}

        location ~ .*\.(php|php5)?$ {
        root html/blog;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
        }
}

2、web2(apache-10.0.0.8)配置基于域名的虚拟主机(以下配置了3个虚拟主机)

复制代码
[root@Oldboy extra]# egrep -v "#|^$" httpd-vhosts.conf 

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin oldboy@oldboyedu.com
    DocumentRoot "/application/apache2.2.31/htdocs/www"
    ServerName   www.etiantian.org
    ServerAlias etiantian.org
    ErrorLog "/app/logs/www-error_log"
    CustomLog "/app/logs/www-access_log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin oldboy@oldboyedu.com
    DocumentRoot "/application/apache2.2.31/htdocs/bbs"
    ServerName   bbs.etiantian.org
    ErrorLog "/app/logs/bbs-error_log"
    CustomLog "/app/logs/bbs-access_log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin oldboy@oldboyedu.com
    DocumentRoot "/application/apache2.2.31/htdocs/blog"
    ServerName   blog.etiantian.org
    ErrorLog "/app/logs/blog-error_log"
    CustomLog "/app/logs/blog-access_log" common
</VirtualHost>

3、负载均衡器(LB-nginx-10.0.0.6)配置反向代理

复制代码
[root@Oldboy conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

 upstream web_pool {                                             地址池
    server 10.0.0.7:80  weight=1;
    server 10.0.0.8:80  weight=1;
}




server {
        listen       80;
        server_name  www.etiantian.org  bbs.etiantian.org  blog.etiantian.org;

        #ssl on;
    #ssl_certificate /usr/local/nginx/conf/33iq.crt;
    #ssl_certificate_key /usr/local/nginx/conf/33iq_nopass.key;

        location / {
            index  index.html index.htm;
            proxy_pass http://web_pool;                                                   反向代理到地址池
            proxy_set_header Host  $host;                                                将请求头信息也一起反代给后端的服务器
            proxy_set_header X-Forwarded-For $remote_addr;               将客户端的真实ip映射到后端的web服务器中
        }
    }


}

解释:
当客户端分别访问 www.etiantian.org 、 bbs.etiantian.org、 blog.etiantian.org 时,nginx会带着这些主机头请求后端web集群,web服务器中的虚拟主机会自动识别nginx请求的主机头,并回复nginx请求,nginx再将web端的回复,交给客户端。

也可以代理单台服务器:
location / {
            index  index.html index.htm;
            proxy_pass http://172.16.100.100;                                                   
            proxy_set_header Host  $host;                                                
            proxy_set_header X-Forwarded-For $remote_addr;           
        }

4、修改web端日志访问ip

复制代码
默认情况下web端日志记录的访问ip是负载均衡器的ip,所以需要修改为真实客户端ip
(1) 负载均衡器(LB)配置
server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
            index  index.html index.htm;
            proxy_pass http://blog_pool;                                          代理blog动态页面
            proxy_set_header Host  $host;
            proxy_set_header X-Forwarded-For $remote_addr;      负载均衡器开启ip转发,将客户端ip映射到web服务器
        }
    }
(2) web1端修改日志格式来接收客户端的真实ip(nginx主配置文件)
cat  nginx.conf

log_format  main  '$http_x_forwarded_for  $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent"';
(3) web2端修改日志格式来接收客户端的真实ip (apache主配置文件)
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b"  common
相关推荐
用户0328472220701 小时前
如何搭建本地yum源(上)
运维
ping某1 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw