Часто при балансироваке сайтов на php используют связку: прокся-балансировщик на nginx и (nginx + php-fpm либо apache + mod_php) на нодах.
По работе попробовали настроить эту связку без использования nginx на нодах, т.е. запросы с балансировщика идут напрямую в php-fpm, тем самым сэкономив чуточку ресурсов.
В моем случае производится балансировка сайта на moodle и конфиг представленный ниже будет для его работы.
nginx на балансировщике:
upstream backend {
server 10.1.2.3:9000;
server 10.1.2.4:9000;
}
server {
access_log /var/log/nginx/access_log;
error_log /var/log/nginx/error_log;
listen 443 ssl;
server_name test-site.ru;
ssl_certificate /etc/nginx/ssl/test-site.ru.crt;
ssl_certificate_key /etc/nginx/ssl/test-site.ru.key;
location ~ /\. {
deny all;
}
location / {
if (-f /etc/nginx/tmp/maintenance.flag) {
return 503;
}
index index.php;
try_files $uri @moodle;
}
location @moodle {
root /var/www/moodle/;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;
fastcgi_pass backend;
include /etc/nginx/mime.types;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
Из конфига убрал какие-то специфические вещи. Просто общий вид. Сократить его можно засунув содержимое @moodle в location /. Но я решил оставить в таком виде.
php-fpm при этом настраивается почти стандартно, меняются только несколько опций в пуле:
listen = 10.1.2.3:9000 ; случаем на интерфейсе, доступном для балансировщика listen.allowed_clients = 10.1.2.1 ; разрешаем коннектиться только балансеру php_value[session.save_path] = "tcp://10.1.2.2:6379" ; храним php сессии в redis (нужно для корректной работы балансировки round robin + в настройках moodle надо внести изменения)
Остальные опции по вкусу.


2 комментария
RSS / trackback