利用同一Nginx服务器对来自不同的域名请求转发到不同的服务器集群处理

受益于最近对Nginx服务器和相关配置的更多了解,在写前一遍博文后受启发,发现Nginx更多功能和更多应用,其中之一就是利用同一Nginx服务器对来自不同的域名请求转发到不同的服务器集群处理,什么情况呢?

同一Nginx服务器,是指某台安装了Nginx软件的电脑,使用某个端口,比如默认的web端口作为服务器,对外来各种不同的访问只要是指向该台电脑的该端口,就认为是同一Nginx服务器;

来自不同的域名请求,这个好理解,就比如 www.xxx.com,www.yyy.cn,www.kkk.net 等等就是不同的域名请求;

那怎么实现设定的目标呢?其实就是把各个不同请求的域名通过IP等方式设置指向同一个Nginx服务器,这样就这个Nginx服务就可用接受来自不同域名的请求了,因Nginx有对应转发功能,然后通过合理的服务器配置,即可实现对来自不同的域名的请求经过同一Nignx服务按合理的配置转发给不同的集群服务器,可见这里 Nginx 的配置是关键,如下所示:

#user  nobody;
worker_processes  1; #工作进程的个数,一般与计算机的cpu核数一致

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024; #单个进程最大连接数(最大连接数=连接数*进程数)  
}

http {
    include       mime.types;  #文件扩展名与文件类型映射表 
    default_type  application/octet-stream;  #默认文件类型

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
	# 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,  
    # 如果用来进行下载等应用磁盘 IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,  
    # 降低系统的负载。注意:如果图片显示不正常把这个改成off。  
	
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;   #长连接超时时间,单位是秒  

    #gzip  on;  #启用Gizp压缩 
   
	#通过配置定义的各个跳转服务器集群名称,可定自己需要的定义更多
    #定义负载均衡OA集群名称
	upstream myOA.com{
		server 127.0.0.1:8085 weight=1;
		server 127.0.0.1:8086 weight=2;
    }
    
	#定义负载均衡CMS集群名称
	upstream myCMS.com{
		server 192.168.1.100:7075 weight=1;
		server 192.168.1.100:7076 weight=1;
    }
	
    #定义负载均衡Trade集群名称
	upstream myTrade.com{
		server 192.168.1.120:7075 weight=1;
		server 192.168.1.120:7076 weight=1;
    }
    
    server {
        listen       80;  #监听默认的web 80 端口,可以改成其他端口
        server_name  localhost;  #定义当前服务的域名,即默认的Nginx服务器

        #charset koi8-r;
        #access_log  logs/host.access.log  main;
       
        location / {           
            root   /html;  
			#对本服务器的请求 localhost:80 将转发到此处,即Nginx安装目录中html,关键
			
            index  index.html index.htm;  
			#默认页面列表,即会依次访问Nginx安装目录中html文件夹下的index.html或index.htm
        }
    }

    server {
        listen       80;  #监听默认的web 80 端口,可以改成其他端口
        server_name  myoa.com; #定义当前服务的域名

        #charset koi8-r;
        #access_log  logs/host.access.log  main;
       
        location / {
            proxy_set_header Host $host;  
            #反向代理服务器把请求头的host改为跟来源处一样,如果不设置则就跟proxy_pass指令值一样,会引起URL错误或丢失等问题, 关键
            
            proxy_set_header X-Forwarded-For $remote_addr;
            #如果存在多级反向代理需要设置该指令,这个值是经过代理之后的前一个代理 $remote_addr值(一般即IP),如第三级代理保存第二级代理IP,关键

            proxy_pass http://myOA.com; 
			#对本服务器的请求 myoa.com:80 将转发到集群名称为 myOA.com 的群集处理,关键
        }

        #error_page 404 /404.html;  

        # redirect server error pages to the static page /50x.html #定义50X 错误访问
        error_page   500 502 503 504  /50x.html; 
        location = /50x.html {
            root   html;  #会访问html文件夹下的50x.html页面
        }
    }
    
	server {
        listen       80; #监听默认的web 80 端口,可以改成其他端口
        server_name  mycms.com;  #定义当前服务的域名

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            proxy_set_header Host $host;  
            #反向代理服务器把请求头的host改为跟来源处一样,如果不设置则就跟proxy_pass指令值一样,会引起URL错误或丢失等问题, 关键
            
            proxy_set_header X-Forwarded-For $remote_addr;
            #如果存在多级反向代理需要设置该指令,这个值是经过代理之后的前一个代理 $remote_addr值(一般即IP),如第三级代理保存第二级代理IP,关键
            proxy_pass http://myCMS.com;
			 #对本服务器的请求 mycms.com:80 将转发到集群名称为 myCMS.com 的群集处理,关键
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html #定义50X 错误访问
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;  #会访问html文件夹下的50x.html页面
        }
    }
     
	server {
        listen       80;  #监听默认的web 80 端口,可以改成其他端口
        server_name  mytrade.com;  #定义当前服务的域名

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            proxy_set_header Host $host;  
            #反向代理服务器把请求头的host改为跟来源处一样,如果不设置则就跟proxy_pass指令值一样,会引起URL错误或丢失等问题, 关键
            
            proxy_set_header X-Forwarded-For $remote_addr;
            #如果存在多级反向代理需要设置该指令,这个值是经过代理之后的前一个代理 $remote_addr值(一般即IP),如第三级代理保存第二级代理IP,关键
            proxy_pass        http://myTrade.com;
			#对本服务器的请求 mytrade.com:80 将转发到集群名称为 myTrade.com 的群集处理,关键			 
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html #定义50X 错误访问       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /html;
        }		
    }

}

更多功能更多应用这些需要了解 ngingx 相应的配置语法,配置请参考 Nginx 在线文档或网上知识,

懒人计划,欢迎拍砖... 

猜你喜欢

转载自blog.csdn.net/shenzhennba/article/details/80461359
今日推荐