You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Debian Nginx服务器上为各WordPress站点配置独立Linux用户

为每个WordPress站点配置独立Linux用户(Nginx+PHP-FPM)

1. 创建站点专属Linux用户与组

为每个站点创建独立的系统用户,禁止交互式登录(避免安全风险),并将用户家目录设置为站点根目录:

# 以站点site1为例,创建用户site1_user
useradd -m -d /var/www/site1 -s /usr/sbin/nologin site1_user
  • -m:自动创建家目录(即站点根目录)
  • -d:指定家目录路径
  • -s:设置登录shell为/usr/sbin/nologin,禁止用户登录服务器

2. 调整站点文件权限

将站点目录的所有者和组改为对应用户,同时设置严格的权限,确保其他站点用户无法访问:

# 递归设置站点目录所有者
chown -R site1_user:site1_user /var/www/site1

# 设置文件权限为640(所有者读写,组只读,其他无权限)
find /var/www/site1 -type f -exec chmod 640 {} \;

# 设置目录权限为750(所有者读写执行,组读执行,其他无权限)
find /var/www/site1 -type d -exec chmod 750 {} \;

3. 配置独立PHP-FPM进程池

Nginx通过PHP-FPM处理PHP请求,需为每个站点创建单独的PHP-FPM池,让PHP以站点专属用户运行:

  1. 进入PHP-FPM池配置目录(根据你的PHP版本调整路径,比如PHP 8.2):
cd /etc/php/8.2/fpm/pool.d/
  1. 创建站点专属配置文件site1.conf:
[site1]
user = site1_user
group = site1_user

; 使用Unix套接字通信(比TCP更高效)
listen = /run/php/php8.2-fpm-site1.sock

; 设置套接字权限,让Nginx(www-data用户)能访问
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

; 进程管理配置(根据服务器资源调整)
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

; 其他通用配置(可参考默认www.conf)
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = on
php_value[session.save_path] = /var/lib/php/sessions/site1
php_value[upload_tmp_dir] = /tmp/php-uploads/site1
  • 手动创建session和上传临时目录,并设置对应权限:
mkdir -p /var/lib/php/sessions/site1 /tmp/php-uploads/site1
chown -R site1_user:site1_user /var/lib/php/sessions/site1 /tmp/php-uploads/site1
  1. 重启PHP-FPM服务使配置生效:
systemctl restart php8.2-fpm

4. 修改Nginx站点配置

更新每个站点的Nginx配置,使其指向对应的PHP-FPM套接字:

server {
    listen 80;
    server_name site1.example.com;
    root /var/www/site1;
    index index.php index.html;

    # WordPress伪静态规则
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP请求处理,指向站点专属套接字
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm-site1.sock;
        # 确保PHP-FPM能获取正确的文件路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 禁止访问敏感文件
    location ~ /\.ht {
        deny all;
    }
}

5. 验证配置并重启服务

  1. 检查Nginx配置语法:
nginx -t
  1. 若配置无错误,重启Nginx:
systemctl restart nginx
  1. 验证PHP-FPM进程是否以站点用户运行:
ps aux | grep php-fpm | grep site1_user

注意事项

  • 每个站点重复上述步骤,替换对应的用户名、目录和配置文件名
  • 根据服务器CPU/内存资源,调整PHP-FPM进程池的pm.max_children等参数,避免资源耗尽
  • 站点安装插件/主题时无需额外调整权限,PHP已以站点用户运行,拥有目录读写权限
  • 定期检查权限配置,防止出现跨站点权限泄漏的问题

内容的提问来源于stack exchange,提问作者Gudari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:01:17