nginx 安装与负载均衡

安装 nginx
sudo apt-get install nginx

Ubuntu安装之后的文件结构大致为:

  • 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
  • 程序文件在/usr/sbin/nginx
  • 日志放在了/var/log/nginx中
  • 并已经在/etc/init.d/下创建了启动脚本nginx
  • 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本 默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
启动 nginx
sudo /etc/init.d/nginx start

然后就可以访问了,http://localhost/ , 一切正常!如果不能访问,先不要继续,看看是什么原因,解决之后再继续。 启动时候若显示端口80被占用: Starting nginx: [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) 修改文件:/etc/nginx/sites-available/default,去掉 listen 前面的 # 号 , # 号在该文件里是注释的意思 , 并且把 listen 后面的 80 端口号改为自己的端口,访问是需要添加端口号。(安装完后如出现403错误,那可能是nginx配置文件里的网站路径不正确)

Image.png

安装php和MySQL

sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql

安装FastCgi
/usr/bin/spawn-fcgi 这个文件来管理 FastCgi,它原属于lighttpd这个包里面,但 9.10 后,spawn-fcgi 被分离出来单独成包:

sudo apt-get install spawn-fcgi

 

配置 nginx
修改nginx的配置文件:/etc/nginx/sites-available/default 修改主机名:

server_name localhost;
修改index的一行修改为:

index index.php index.html index.htm;
去掉下面部分的注释用于支持 php 脚本:

location ~ .php$ {
    include /etc/nginx/fastcgi_params; #需放在第一行,否则会出错
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
}


重新启动nginx:

/etc/init.d/nginx restart

启动fastcgi php:

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi

为了让php-cgi开机自启动: Ubuntu开机之后会执行/etc/rc.local文件中的脚本 所以我们可以直接在/etc/rc.local中添加启动脚本。

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi 添加到语句:exit 0 前面才行

 

负载均衡

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi

修改为

spawn-fcgi -a 0.0.0.0 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi

nginx配置文件中  先在http段中加入下面一段

upstream fastcgi {

server 192.168.1.191:9000  weight=2;

server 192.168.1.192:9000 down;

server 192.168.1.193:9000 backup;

server 192.168.1.194:9000;

ip_hash;

}

然后把原来的 fastcgi_pass 127.0.0.1:9000;
改为 fastcgi_pass fastcgi;

nginx 的 upstream目前支持 4 种方式的分配 
1)、轮询(默认) 
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight 
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
2)、ip_hash 
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 
3)、fair(第三方) 
按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
4)、url_hash(第三方)

upstream 每个设备的状态:

down 表示单前的server暂时不参与负载 
weight 默认为1.weight越大,负载的权重就越大。 
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 
fail_timeout:max_fails 次失败后,暂停的时间。 
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

参考
http://wiki.ubuntu.org.cn/Nginx
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html
http://www.187299.com/archives/1172