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