首页主机资讯Ubuntu PHP应用如何进行负载均衡

Ubuntu PHP应用如何进行负载均衡

时间2026-01-18 07:46:03发布访客分类主机资讯浏览1104
导读:Ubuntu PHP应用的负载均衡实践 一、架构选型与适用场景 应用层负载均衡:使用 Nginx 的 upstream 将 HTTP 请求分发到多台运行 PHP-FPM 的应用服务器(适合多机横向扩展,简单可靠)。 进程内负载均衡:在同一...

Ubuntu PHP应用的负载均衡实践

一、架构选型与适用场景

  • 应用层负载均衡:使用 Nginxupstream 将 HTTP 请求分发到多台运行 PHP-FPM 的应用服务器(适合多机横向扩展,简单可靠)。
  • 进程内负载均衡:在同一台机器上运行多个 PHP-FPM 实例(不同 Unix socket端口),由 Nginx 按请求分发到不同实例(提升单机并发与资源利用)。
  • 专用负载均衡器:使用 HAProxy 作为前端,后端对接多台应用服务器或多实例 PHP-FPM(适合更复杂的调度、健康检查与观测)。

二、方案一 Nginx 应用层负载均衡(多台服务器)

  • 前置条件
    • 多台 Ubuntu 服务器已安装 Nginx + PHP-FPM,应用代码与目录结构一致,且 session 共享(如 Redis/Memcached)与上传目录(如 /var/www/uploads)已做共享或禁用上传。
  • 负载均衡器配置(示例)
    • 编辑 /etc/nginx/sites-available/default/etc/nginx/nginx.confhttp 段:
      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;
       }
      
        }
      
      }
      
      
    • 每台后端 Nginx 将 PHP 请求转发到本机 PHP-FPM(以 PHP 7.4 为例):
      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;
      
      }
          
      
  • 生效与验证
    • 检查并重载:sudo nginx -t & & sudo systemctl reload nginx
    • 验证分发:在各后端写入差异化 /health.php,多次 curl 观察命中分布。

三、方案二 Nginx 进程内负载均衡(单机多 PHP-FPM 实例)

  • 适用场景:单机多核,提升 PHP-FPM 并发与稳定性。
  • 步骤
    1. 复制并调整 PHP-FPM 池(以 PHP 7.4 为例):
      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
      
      • www1.conflisten = /run/php/php7.4-fpm-www1.sock
      • www2.conflisten = /run/php/7.4-fpm-www2.sock
      • 确保运行用户与权限一致(如 www-data),并调整 pm 参数(如 pm.max_children)。
    2. 重启 PHP-FPMsudo systemctl restart php7.4-fpm
    3. 配置 Nginx 使用 upstream 分发到多个 Unix socket
      upstream 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;
      
        }
      
      }
          
      
    4. 生效:sudo nginx -t & & sudo systemctl reload nginx
    5. 验证:观察不同 PHP-FPM 进程处理请求的情况(如 status 页面或日志)。

四、方案三 使用 HAProxy 作为前端负载均衡器

  • 安装:sudo apt update & & sudo apt install haproxy
  • 配置 /etc/haproxy/haproxy.cfg(示例为应用层分发到多台 HTTP 服务器):
    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
    
  • 生效:sudo systemctl restart haproxy
  • 可选:若需直接转发到本机多个 PHP-FPM socket,可将 backend 改为:
    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

五、关键注意事项与优化

  • 会话与缓存:使用 Redis/Memcached 集中存储 PHP session,避免单机粘滞导致负载不均;静态资源使用 Nginx 直接服务或 CDN
  • 文件上传:将上传目录(如 /var/www/uploads)放在共享存储(如 NFS/对象存储),或在负载均衡器层做特殊处理。
  • 健康检查与容错:配置 max_fails/fail_timeout(Nginx)或 check(HAProxy),自动摘除异常实例。
  • 日志与观测:集中收集 Nginx access/errorPHP-FPM slow/error 日志;按需接入 Prometheus + Grafana 做容量与性能观测与告警。
  • 安全加固:限制管理接口与状态页访问;对外仅暴露 80/443;使用 TLS;为 Unix socket 设置合适的权限(如 www-data)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu PHP应用如何进行负载均衡
本文地址: https://pptw.com/jishu/783976.html
Java代码Ubuntu编译出现乱码怎么处理 如何在Ubuntu上升级PHP核心库

游客 回复需填写必要信息