200cdn.xyz
源站测试站点(静态 + 动态)

FastCGI 部署脚本(9070=A,9010=B)

用于节点一键部署:9070 -> /tmp/php/server_a.php9010 -> /tmp/php/server_b.php

1) 一键部署脚本(点击展开)
查看部署脚本
cat >/tmp/deploy_fastcgi_ab.sh <<'BASH'
#!/usr/bin/env bash
set -euo pipefail

PORT_A=9070
PORT_B=9010
PHP_DIR="/tmp/php"

echo "==[1/8] install php-fpm and nc=="
sudo apt-get update -y
sudo apt-get install -y php-fpm netcat-openbsd

echo "==[2/8] detect php-fpm service/config=="
SERVICE="$(systemctl list-units --type=service --all | awk '/php.*fpm.*service/{print $1; exit}' | sed 's/.service$//')"
CONF="$(ls /etc/php/*/fpm/pool.d/www.conf 2>/dev/null | head -n1)"
if [[ -z "${SERVICE:-}" || -z "${CONF:-}" ]]; then
  echo "未找到 php-fpm service 或 www.conf"; exit 1
fi
PHP_DIR_CONF="$(dirname "$CONF")"

echo "service=$SERVICE conf=$CONF"

echo "==[3/8] configure www pool to :9070=="
sudo sed -i.bak -E "s|^listen\\s*=.*|listen = 127.0.0.1:${PORT_A}|g" "$CONF"
sudo sed -i -E "s|^;?\\s*listen\\.owner\\s*=.*|listen.owner = www-data|g" "$CONF"
sudo sed -i -E "s|^;?\\s*listen\\.group\\s*=.*|listen.group = www-data|g" "$CONF"
sudo sed -i -E "s|^;?\\s*listen\\.mode\\s*=.*|listen.mode = 0660|g" "$CONF"

echo "==[4/8] configure edge9010 pool=="
sudo tee "${PHP_DIR_CONF}/edge9010.conf" >/dev/null <<EOF
[edge9010]
user = www-data
group = www-data
listen = 127.0.0.1:${PORT_B}
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
EOF

echo "==[5/8] deploy php scripts=="
sudo mkdir -p "$PHP_DIR"
sudo tee "$PHP_DIR/server_a.php" >/dev/null <<'PHP'
<?php
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['server'=>'server-A','ok'=>true,'ts'=>time()], JSON_UNESCAPED_UNICODE);
PHP

sudo tee "$PHP_DIR/server_b.php" >/dev/null <<'PHP'
<?php
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['server'=>'server-B','ok'=>true,'ts'=>time()], JSON_UNESCAPED_UNICODE);
PHP

echo "==[6/8] syntax check=="
php -l "$PHP_DIR/server_a.php"
php -l "$PHP_DIR/server_b.php"

echo "==[7/8] restart php-fpm=="
sudo systemctl enable "$SERVICE"
sudo systemctl restart "$SERVICE"

echo "==[8/8] verify=="
sudo ss -lntp | grep -E ':(9070|9010)\\b' || true
nc -vz 127.0.0.1 9070 || true
nc -vz 127.0.0.1 9010 || true

echo "done: 9070=server-A, 9010=server-B"
BASH

chmod +x /tmp/deploy_fastcgi_ab.sh
bash /tmp/deploy_fastcgi_ab.sh
2) 启动成功检查(点击展开)
查看启动状态检查命令
# 节点本机检查
sudo ss -lntp | grep -E ':(9070|9010)\b'
nc -vz 127.0.0.1 9070
nc -vz 127.0.0.1 9010

# 脚本检查
ls -l /tmp/php/server_a.php /tmp/php/server_b.php
php -l /tmp/php/server_a.php
php -l /tmp/php/server_b.php
3) 验证命令(点击展开)
查看 CDN 侧验证命令
# 节点1(150.109.79.244)随机分发统计
for i in $(seq 1 20); do
  resp=$(curl -s -w '\nHTTP_CODE:%{http_code}\n' http://150.109.79.244/ -H 'Host: test.300cdn.xyz')
  code=$(echo "$resp" | sed -n 's/^HTTP_CODE://p')
  body=$(echo "$resp" | sed '/^HTTP_CODE:/d')
  server=$(echo "$body" | python3 -c "import sys,json;s=sys.stdin.read().strip();print(json.loads(s).get('server','<NO_SERVER>') if s.startswith('{') else '<NON_JSON>')" 2>/dev/null)
  echo "$code $server"
done | sort | uniq -c

# 节点2(150.109.156.154)随机分发统计
for i in $(seq 1 20); do
  resp=$(curl -s -w '\nHTTP_CODE:%{http_code}\n' http://150.109.156.154/ -H 'Host: test.300cdn.xyz')
  code=$(echo "$resp" | sed -n 's/^HTTP_CODE://p')
  body=$(echo "$resp" | sed '/^HTTP_CODE:/d')
  server=$(echo "$body" | python3 -c "import sys,json;s=sys.stdin.read().strip();print(json.loads(s).get('server','<NO_SERVER>') if s.startswith('{') else '<NON_JSON>')" 2>/dev/null)
  echo "$code $server"
done | sort | uniq -c
4) 改端口命令(点击展开)
查看更改端口示例(9010 改为 9020)
# 修改 edge9010 pool 的监听端口(示例:9010 -> 9020)
sudo sed -i -E 's/^listen\s*=.*/listen = 127.0.0.1:9020/g' /etc/php/*/fpm/pool.d/edge9010.conf
sudo systemctl restart php8.2-fpm || sudo systemctl restart php-fpm

# 验证
sudo ss -lntp | grep -E ':(9070|9020)\b'
nc -vz 127.0.0.1 9070
nc -vz 127.0.0.1 9020

# 同步更新 CDN FastCGI 第二条服务地址为 127.0.0.1:9020