受益于最近对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 在线文档或网上知识,
懒人计划,欢迎拍砖...