1. 需求:只有一个对外固定ip地址,对内有好几台服务器,每台服务器上都有一个或N个web项目,将Nginx做成网关,使用不同域名,进来访问到各自的网站:
- 例如,有三个网站,a.baidu.com,b.baidu.com,c.sina.com,他们都指向了同一个ip地址:192.168.1.10;
- 其中a.baidu.com的web项目放在了192.168.1.11:8081和192.168.1.14:8082,需要配置负载均衡[关键字:upstream];
- 其中b.baidu.com的web项目放在了192.168.1.12:8081;
- 其中c.sina.com的web项目放在了192.168.1.13:8081;
将Nginx安装到192.168.1.10上,监听80端口,然后设置nginx.conf:
需要注意的是:单词和 { 之间,一定要有一个空格:http { upstream awebxx { server http://192.168.1.11:8081 weitht=1 max_fails=2 fail_timeout=30s; server http://192.168.1.14:8082 weitht=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name a.baidu.com; location / { proxy_pass awebxx; # 指代上面定义的awebxx变量 } } server { listen 80; server_name b.baidu.com; location / { proxy_pass http://192.168.1.12:8081; } } server { listen 80; server_name c.sina.com; location / { proxy_pass http://192.168.1.13:8081; } } }
原理:
server name 为虚拟服务器的识别路径。因此不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。
匹配顺序:
server_name与host匹配优先级如下:
- 完全匹配
- 通配符在前的,如*.test.com
- 在后的,如www.test.*
- 正则匹配,如~^.www.test.com$
如果都不匹配:
- 优先选择listen配置项后有default或default_server的
- 找到匹配listen端口的第一个server块