آپاچی؛ شب ۴۰: سایت WordPress با PHP-FPM و HTTPS
فهرست نوشته
مسیر اصلی دوره اکنون آمادهٔ انتشار WordPress است: Apache event برای HTTP و pool مستقل برای PHP. امشب میزبان اختصاصی را میسازیم و نصب را با HTTPS معتبر تکمیل میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: WordPress و دیتابیس شب سیوهشتم، pool wordpress شب سیوششم؛ شاخههای mod_php/CGI بازیابی شدهاند. نسخهٔ PHP و extensionهای موردنیاز نسخهٔ WordPress را ثبت کن.
میزبان اختصاصی#
در Debian/Ubuntu extensionهای همان PHP_BRANCH را نصب کن: mysql، curl، gd، mbstring، xml، zip، intl و opcache. در RHEL بستههای اصلی شب سیوپنجم آمادهاند؛ امکانات باقیمانده را با نام بستهٔ مخزن و گزارش Site Health تطبیق بده.
فایل WP_CONF مطابق راهنما:
<VirtualHost *:443>
ServerName wp.example.test
DocumentRoot /var/www/wordpress/public
SSLEngine on
SSLCertificateFile /etc/apache-lab/tls/www.crt
SSLCertificateKeyFile /etc/apache-lab/tls/www.key
Protocols h2 http/1.1
DirectoryIndex index.php
Header onsuccess unset X-Content-Type-Options
Header always set X-Content-Type-Options "nosniff"
Header onsuccess unset Referrer-Policy
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header onsuccess unset Strict-Transport-Security
Header always set Strict-Transport-Security "max-age=300"
<Directory /var/www/wordpress/public>
Options +FollowSymLinks -Indexes -ExecCGI -Includes
AllowOverride None
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/wordpress.sock|fcgi://localhost/"
</FilesMatch>
<Files "wp-config.php">
Require all denied
</Files>
ErrorLog /var/log/apache2/wp-error.log
CustomLog /var/log/apache2/wp-access.log combined
</VirtualHost>
در Alma/Rocky socket به /run/php-fpm/wordpress.sock و لاگها به /var/log/httpd/ تغییر میکنند. در Debian سایت 140-wp را فعال کن. فایل legacy با همان ServerName نباید همزمان فعال باشد. هدرهای دیگر را با روال جلوگیری از تکرار شب شانزدهم اضافه کن؛ CSP سایت ثابت را روی WordPress کپی نکن.
برای نام wp، یک VirtualHost پورت 80 با ServerName همین نام و Redirect permanent / https://wp.example.test/ اضافه کن. در استقرار عمومی، مسیر challenge روش ACME باید همچنان درست کار کند.
نصب با کنترل دسترسی#
هنگام نصب اولیه، Require all granted بخش Directory را موقتاً به Require ip 192.168.56.20 تغییر بده تا دیگران نتوانند wizard را تصاحب کنند. نحو FPM و Apache را بررسی و سرویسها را اعمال کن. از .20 به /wp-admin/install.php برو، حساب مدیر یکتا بساز و بعد از تکمیل، policy عمومی را برای front-end برگردان.
در wp-config.php پیش از بارگذاری wp-settings.php، define('FORCE_SSL_ADMIN', true); را قرار بده تا ورود و مدیریت HTTPS را الزام کند. در استقرار پشت edge، تشخیص HTTPS را با پیششرط اعتماد شب چهلویکم تنظیم کن.
check.php موقت باید fpm-fcgi بدهد و کارگر wordpress با کاربر خودش اجرا شود؛ سپس فایل را حذف کن. درخواست /wp-config.php باید رد شود، سایت عمومی باز شود و Site Health امکانات PHP را درست گزارش کند. در RHEL نیاز اتصال دیتابیس را از AVC بسنج؛ فقط در صورت نیاز نقش، boolean httpd_can_network_connect_db را فعال کن.
بازگشت: میزبان را ابتدا از دسترس خارج کن، config و snapshot دیتابیس مربوط به همان release را بازیابی و بعد باز کن. حذف handler از سایت حاوی PHP راه خاموش کردن ایمن نیست.
منبع: محیط سرور WordPress ، mod_proxy_fcgi .