Nginx-负载均衡实践(一、对PHP-FPM进行分摊)
应用的服务器分为前端和后端
前端服务器: 负责对静态文件(比如JS、CSS、图片)等的响应, 以及把PHP请求分发到后端服务器
后端服务器: 处理前端服务器分发而来的PHP请求
前端服务器: 192.168.1.10
后端服务器: 192.168.1.11, 192.168.1.12
后端服务器的配置:
两台后端服务器分别配置 php-fpm 的监听得之和端口, 可以通过修改php-fpm.conf或对应php-fpm配置文件来修改监听地址和端口
由于是 php-fpm, 所以配置如下
192.168.1.11 服务器中php-fpm的配置信息
listen=192.168.1.11:9000
192.168.1.12 服务器中php-fpm的配置信息
listen=192.168.1.12:9000
修改完后重启两台服务器的 php-fpm
前端服务器的配置:
#其中 "blog" 表示随意起的一个 upstream 的名称, 下文要用, 此块用来设置后端服务器
upstream blog {
server 192.168.1.11:9000 weight=1; #192.168.1.11:9000为后端服务器192.168.1.11的php-fpm进程监听的地址和端口
server 192.168.1.12:9000 weight=1; #192.168.1.12:9000为后端服务器192.168.1.12的php-fpm进程监听的地址和端口
}
server {
listen 80;
server_name blog.yilexun.com;
root /dragon/webapp/blog;
index index.html index.php;
location ~* \.(ico|css|js|gif|jpe?g|png)$ {
#error_page 404 /404.html;
break;
}
if (!-e $request_filename) {
rewrite ^(.*)\.(ico|css|js|gif|jpe?g|png)$ /404.html last;
rewrite ^(.+)$ /index.php last;
break;
}
location ~* \.php(\?|\/)? {
fastcgi_pass_request_body off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
client_body_in_file_only clean;
client_max_body_size 8m;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass blog; #此处 "blog" 就是上面定义的 upstream 的名称
fastcgi_index index.php;
}
location = /50x.html {
root html;
}
}
配置完后重启 nginx
分别在前端服务器和后端服务器上都要上传相同的目录文件, 我的实验结果是虽然用后端服务器解析PHP文件, 但是前后端服务器都必须有对应的PHP文件目录
/dragon/webapp/blog/
index.php
<?php
echo \'前端\'; //三台服务器分别为 \'前端\', \'后端1\', \'后端2\'
访问 http://blog.yilexun.com/index.php, 每次刷新可以看到输出结果在\'前端\', \'后端1\', \'后端2\', 中不断变化, 表示配置成功
接下来会继续实现 nginx 服务器间的负载均衡, 敬请期待。。