Часто при балансироваке сайтов на 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