Nginx خودش PHP اجرا نمی‌کند؛ درخواست را با FastCGI به PHP-FPM می‌دهد. امشب حساب مستقل WordPress و pool محدود را پیش از انتشار برنامه آماده می‌کنیم.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: Debian 13 با PHP_BRANCH=8.4 یا Ubuntu 24.04 با 8.3؛ PHP از همان مخزن توزیع و NGINX_USER مشخص است.

نصب و هویت#

sudo apt install "php${PHP_BRANCH}-fpm" "php${PHP_BRANCH}-cli" \
  "php${PHP_BRANCH}-mysql" "php${PHP_BRANCH}-curl" "php${PHP_BRANCH}-gd" \
  "php${PHP_BRANCH}-mbstring" "php${PHP_BRANCH}-xml" "php${PHP_BRANCH}-zip" \
  "php${PHP_BRANCH}-intl" "php${PHP_BRANCH}-opcache"
sudo useradd --system --home-dir /var/lib/nginx-wordpress --shell /usr/sbin/nologin wpapp
sudo install -d -m 755 /var/www/nginx-wordpress/public

فایل /etc/php/PHP_BRANCH/fpm/pool.d/nginx-wp.conf را با شمارهٔ واقعی شاخه بساز:

[nginx-wp]
user = wpapp
group = wpapp
listen = /run/php/nginx-wp.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 4
pm.process_idle_timeout = 10s
pm.max_requests = 300
clear_env = yes
security.limit_extensions = .php
php_admin_value[cgi.fix_pathinfo] = 0
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on

کارگر PHP با wpapp و socket قابل اتصال برای Nginx با www-data است؛ این دو هویت وظیفهٔ متفاوت دارند. کد root-owned و رازها گروه wpapp خواهند داشت.

sudo "php-fpm${PHP_BRANCH}" -t
sudo systemctl enable --now "php${PHP_BRANCH}-fpm"
sudo systemctl restart "php${PHP_BRANCH}-fpm"
ls -l /run/php/nginx-wp.sock

نتیجه و محدودیت#

socket باید owner/group و mode موردنظر داشته باشد. چون pool ondemand است، پیش از درخواست ممکن است کارگری دیده نشود. اتصال HTTP و SCRIPT_FILENAME را در شب سی‌ودوم کامل می‌کنیم؛ php -v فقط CLI را نشان می‌دهد.

بازگشت: سایت وابسته را ابتدا از دسترس خارج کن، pool اضافه را بردار و FPM را بررسی/restart کن. socket FPM به پورت 9000 عمومی نیاز ندارد؛ آن را برای رفع خطا world-writable نکن.

منبع: تنظیم PHP-FPM ، FastCGI در Nginx .