假设前端nginx只存在index.html
构建反向代理,nginx仅仅处理静态内容不处理动态内容
location ~ \.php$ {
proxy_pass 192.168.0.1:80;
}
客户端访问localhost:8080/index.html,这时候前端nginx进行响应
location ~ .php$这里是正则表达式匹配.php结尾的文件nginx自动pass给了192.168.0.1 192.168.0.1的内容由他的apache、nginx或者iis来处理完返回给nginx
最终输出客户端显示(memcache或者squid可以支持缓存)
上面是最最简单使用nginx反向代理服务器的实例。
location ^~ /phpmyadmin/ {
proxy_pass 127.0.0.1:80;
}
location ^~ \.php$ {
proxy_pass 8.8.8.8;
}
第一个部分的location 是匹配localhost/phpmyadmin/开头的话(本地nginx目录下不存在phpmyadmin目录),nginx自动pass到127.0.0.1:80的服务器上,该服务器对phpmyadmin的文件解析,结果发送给nginx,客户端显示,如果客户端访问URL地址是http://localhost/demo.php的话,则会pass到8.8.8.8的apache上进行处理
通过上面实例,实现了基本针对不同请求的负载均衡
访问静态页面index.html,nginx直接响应
访问demo.php,8.8.8.8的apache来响应
访问phpmyadmin下的文件,127.0.0.1:80apache响应
访问同一个页面的负载均衡实现:
当用户访问http://localhost/demo.php页面是,我们实现两台服务器的负载均衡(实际情况两台服务器上的数据同步要求一致)
nginx.conf:
upstream myCluster {
server 127.0.0.1:8080;
server 8.8.8.8:80;
}
表明这台Server Cluster包含2台服务器
location ~ \.php$ {
proxy_pass http://myCluster;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
当用户访问http://localhost/demo.php时,nginx下面不存在该文件,将自动pass到myCluster定义的服务器集群中,由127.0.0.1:8080 和8.8.8.8:80来处理,可以看到上面再定义upstream的时候每个server后面是没有定义去那种,表明两者轮询几率相等,每个请求按照时间的顺序逐一分配到不同后端服务器,如果后端服务器宕机,可自动剔除
如果希望更多响应的话:
upstream myCluster{
server 127.0.0.1:8080 weight=5; # weight指定轮询几率,weight和访问比率成正比
server 8.8.8.8:80;
}
实际应用时,server1 和server2上分别保留相同的数据,需要考虑两者数据同步
可以采用rsync或者nfs吧。这个不太了解