Ubuntu PHP应用的负载均衡实践
一、架构选型与适用场景
二、方案一 Nginx 应用层负载均衡(多台服务器)
http {
upstream php_app {
least_conn; # 或 round-robin
server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
server 10.0.0.13:80 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name your_domain.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass php_app; # 指向 upstream 名称
}
location ~ /\.ht { deny all; }
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
三、方案二 Nginx 进程内负载均衡(单机多 PHP-FPM 实例)
sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www1.conf
sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www2.conf
listen = /run/php/php7.4-fpm-www1.socklisten = /run/php/7.4-fpm-www2.sockupstream php_backend {
least_conn;
server unix:/run/php/php7.4-fpm-www1.sock;
server unix:/run/php/php7.4-fpm-www2.sock;
}
server {
listen 80;
root /var/www/html;
index index.php;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass php_backend;
}
}
四、方案三 使用 HAProxy 作为前端负载均衡器
global
log /dev/log local0
log /dev/log local1 notice
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server app1 10.0.0.11:80 check
server app2 10.0.0.12:80 check
server app3 10.0.0.13:80 check
backend php_fpm_back
balance roundrobin
server fpm1 unix:/run/php/php7.x-fpm-www1.sock check
server fpm2 unix:/run/php/php7.x-fpm-www2.sock check
并确保 HAProxy 有权限访问这些 socket。五、关键注意事项与优化