文章目录
- 案例背景
- Nginx代理服务器的配置
- 根据URL目录地址转发的应用场景
- 参考文献
案例背景
通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能、安全、用户体验等重要问题。
此架构图适合网站前端只使用同一个域名提供服务的场景,例如,用户访问的域名是www.etiantian.org
,然后,当用户请求www.etiantian.org/upload/xx
地址的时候,代理会分配请求到上传服务器池处理数据;当用户请求www.etiantian.org/static/xx
地址的时候,代理会分配请求到静态服务器池请求数据;当用户请求www.etiantian.org/xx
地址的时候,即不包含上述指定的目录地址路径时,代理会分配请求到默认的动态服务器池请求数据(注意:上面的xx表示任意路径)。
动静分离网站集群架构
Nginx反向代理配置,
参考 Nginx反向代理-1-实践简单的负载均衡[DB|OL].
Nginx代理服务器的配置
方案一:以location实现
[root@lb01 ~]# cat /application/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile off;
keepalive_timeout 65;
upstream static_pools{
server 192.168.55.9:80 weight=1;
}
upstream upload_pools{
server 192.168.55.10:80 weight=1;
}
upstream default_pools{
server 192.168.55.11:80 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://default_pools;
include proxy.conf;
}
location /static/ {
proxy_pass http://static_pools;
include proxy.conf;
}
location /upload {
proxy_pass http://upload_pools;
include proxy.conf;
}
}
}
方案二:以if语句实现
if ($request_uri ~* "^/static/(.*)$")
{
proxy_pass http://static_pools/$1;
}
if ($request_uri ~* "^/upload/(.*)$")
{
proxy_pass http://upload_pools/$1;
}
location / {
proxy_pass http://default_pools;
include proxy.conf;
}
重新加载配置生效
# /application/nginx/sbin/nginx -t
# /application/nginx/sbin/nginx -s reload
暂时不要立刻测试成果,为了实现上述代理的测试,还需要在web01和web02上做节点的测试配置,才能更好地展示测试效果。
以web01作为static静态服务,地址端口为:192.168.55.9:80,需事先配置一个用于测试静态的地址页面,并测试访问,确定它会返回正确结果。操作步骤如下:
[root@web01 ~]# cd /application/nginx/html/www/
[root@web01 www]# mkdir static
[root@web01 www]# echo static_pools >static/index.html
[root@web01 www]# curl http://www.etiantian.org/static/index.html <==这里的www.etiantian.org是解析过web01本地IP。
static_pools
提示:测试的静态地址为http://www.etiantian.org/static/index.html,注意,是带static路径的地址。
以web02作为upload上传服务,地址端口为192.168.55.10:80,需事先配置一个用于测试上传服务的地址页面,并测试访问,确定它会返回正确结果。操作步骤如下:
[root@web02 ~]# cd /application/nginx/html/www/
[root@web02 www]# mkdir upload
[root@web02 www]# echo upload_pools >upload/index.html
[root@web02 www]# curl http:// www.etiantian.org/upload/index.html #<==这里的www.etiantian.org是解析过web01本地IP的。
upload_pools
提示:测试的上传地址为http://www.etiantian.org/upload/index.html,注意,是带upload路径的地址。
以web03作为动态服务节点,地址端口为192.168.55.11:80,同样需事先配置一个默认的地址页面,并测试访问,确定它会返回正确结果。操作步骤如下:
[root@web03 ~]# cd /application/nginx/html/www/
[root@web03 www]# echo default_pools >index.html
[root@web03 www]# curl http:// www.etiantian.org #<==这里的www.etiantian.org是解析过web01本地IP的。
default_pools
以上准备了三台Web节点服务器,分别加入到了upstream定义的不同服务器池,代表三组不同的业务集群组,从本机通过hosts解析各自的域名,然后测试访问,其地址与实际访问的内容输出请对照表。
节点 | IP及端口 | 测试地址 | 字符串为代表业务 |
web01 | 192.168.55.8 | static_pools | |
web02 | 192.168.55.9 | upload_pools | |
web03 | 192.168.55.10 | http://www.etiantian.org/index.htmlhttp://www.etiantian.org | default_pools |
根据URL目录地址转发的应用场景
根据HTTP的URL进行转发的应用情况,被称为第7层(应用层)的负载均衡,而LVS的负载均衡一般用于TCP等的转发,因此被称为第4层(传输层)的负载均衡。
在企业中,有时希望只用一个域名对外提供服务,不希望使用多个域名对应同一个产品业务,此时就需要在代理服务器上通过配置规则,使得匹配不同规则的请求会交给不同的服务器池处理。这类业务有:
- 业务的域名没有拆分或者不希望拆分,但希望实现动静分离、多业务分离,这在前面已经讲解过案例了。
- 不同的客户端设备(例如:手机和PC端)使用同一个域名访问同一个业务网站,就需要根据规则将不同设备的用户请求交给后端不同的服务器处理,以便得到最佳用户体验。这也是非常重要的,接下来就讲解相关案例。
参考文献
[1] 老男孩. 跟老男孩学Linux:Web集群实战[M]. 机械工业出版社,2016-03-01.