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
相关推荐
失伟27 分钟前
Stratovirt安装及使用
运维·虚拟化
捧月华如2 小时前
Linux 系统性能压测工具全景指南(含工程实战)
linux·运维·服务器
s19134838482d2 小时前
vlan实验报告
运维·服务器·网络
想唱rap2 小时前
线程的同步与互斥
linux·运维·服务器·数据库·mysql
格林威2 小时前
SSD 写入速度测试命令(Linux)(基于工业相机高速存储)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
勇闯逆流河3 小时前
【LInux】linux控制(进程替换,自主shell的实现详解)
linux·运维·服务器
IMPYLH3 小时前
Linux 的 ls 命令
linux·运维·服务器·bash
Agent产品评测局4 小时前
企业发票管理自动化落地,验真归档全流程实现方法:2026企业级智能体选型与实测指南
运维·网络·人工智能·ai·chatgpt·自动化
wwj888wwj4 小时前
Ansible基础(复习1)
linux·运维·ansible
DYuW5gBmH4 小时前
Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
运维·microsoft·自动化