侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计收到 0 条评论
PHP

Swoole 模拟多服务器 Nginx 反向代理实现负载均衡

2021-5-6 / 0 评论 / 221 阅读
温馨提示:
本文最后更新于 2021-5-6,已超过半年没有更新,若内容或图片失效,请留言反馈。

借用 PHP 的 Swoole 扩展根据不同的端口,启动多个服务器,然后使用 Nginx 反向代理。

如果没有安装 LNMP 开发环境或者没有安装 Swoole 扩展的话可以先查阅为您推荐的文章:CentOS7-4-干净环境配置及搭建LNMP-PHP7

编写服务程序

新建文件 swoole_server1.php

<?php

$serv = new swoole_http_server("0.0.0.0", 9501);

$serv->on('Request', function($request, $response) {
    $response->cookie("User", "Swoole");
    $response->header("X-Server", "Swoole");
    $response->end("<meta charset='utf-8'/><h1>Hello Swoole!,你访问的是第一台机器9501</h1>");
});

$serv->start();

然后复制3份文件 分别命名为: swoole_server2.php swoole_server3.php 和 swoole_server4.php
更改对应的端口和提示语 分别改为 950295039504
提示语改为 第二台机器 9502、第三台机器 9503 和 第四台机器 9504

配置Nginx反向代理

upstream webswoole {
  server 127.0.0.1:9501 weight=20;
  server 127.0.0.1:9502 weight=40;
  server 127.0.0.1:9503 weight=30;
  server 127.0.0.1:9504 weight=10;
}

server {
  listen 9500;
  server_name  127.0.0.1;
  location / {
    proxy_pass  http://webswoole;
  }
}

上面,我使用的是 9500 端口反向代理到四个不同的服务器端口。

启动服务

分别打开4个端口,使用命令

php swoole_server1.php
php swoole_server2.php
php swoole_server3.php
php swoole_server4.php

重启nginx

nginx -s reload

访问应用 (curl或打开浏览器网页)

curl 127.0.0.1:9500

不断刷新会返回不同的服务器,为了看的更清楚,我写了一个测试 Shell 脚本 test.sh

#!/bin/bash
for ((i=1; i<=20; i++))
do
curl 'http://127.0.0.1:9500/'
echo ''
sleep 1
done

然后执行脚本,我们看到访问的很均匀的出现了, 你也可以采用其他算法模式把流量分发到想要的服务器。

至此,Swoole 模拟负载均衡的测试完成, 如果是多台真实服务器的话直接替换 upstream 里的地址就可以了。

评论一下?

OωO
取消