Nginx 做Proxying & Load-Balancing 加速Cakephp & Django
落鹤生 发布于 2013-11-08 22:14 点击:次
|
|
思路:将高并发的动态页面静态化,由Nginx来处理,而动态的Cakephp或者Django则由支持FastCGI的Nginx或者Apache来进行处理, Nginx做前端代理以及简单的负载均衡,在有限的资源下完成最大化的可用性、安全以及稳定性。
TAG:
由于Nginx出色的处理高并发、静态文件、低CPU消耗等诸多原因,所以我开始尝试使用Nginx(或+Apache)来做一个高可用的架构。
思路:将高并发的动态页面静态化,由Nginx来处理,而动态的Cakephp或者Django则由支持FastCGI的Nginx或者Apache来进行处理, Nginx做前端代理以及简单的负载均衡,在有限的资源下完成最大化的可用性、安全以及稳定性。
----Nginx的代理设置----
server {
listen: 80;
server_name: static.local;
location / {
proxy_pass http://localhost:8000;
}
}
----Nginx的负载均衡----
upstream localcluster {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen: 80;
server_name: static.local;
location / {
proxy_pass http://localcluster;
}
}
----mod_rewrite----
# rewrite rules for cakephp
location / {
root /var/www/sites/somedomain.com/current;
index index.php index.html;
# If the file exists as a static file serve it
# directly without running all
# the other rewite tests on it
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \
/var/www/sites/somedomain.com/current$fastcgi_script_name;
include fastcgi_params;
}
经 过简单的设置,就可以实现这些功能了,思路就是将80端口分配给Nginx来处理静态文件,当请求特定地址或者.php后缀的地址,则根据 mod_write,通过proxy来转发到8000端口上去处理,而8000端口则负责处理动态请求。注: 在配制if (!-e $request_filename) {} 的时候,要注意空格! 否则会爆 unknown directive的错误! 让人很恼火!! 小弟就在这个翻了船,折腾了2天。。。。我欲哭无泪啊。。。。
(gdtmmrlvkhaijke) |
------分隔线----------------------------