پرش به محتوا

وب‌سرور Apache با PHP-FPM

Apache را با ماژول event و PHP-FPM راه بیندازید، یک VirtualHost تعریف کنید و تنظیمات امنیتی پایه را اعمال کنید.

Ubuntu 24.04 LTSسطح: مقدماتیبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۶ آبان ۱۴۰۵

ترکیب پیشنهادی امروز Apache با MPM event و PHP-FPM است، نه mod_php قدیمی. این ترکیب حافظه‌ی کمتری مصرف می‌کند و هر سایت می‌تواند pool جداگانه داشته باشد.

۱. نصب

bash
sudo apt update
sudo apt install -y apache2 php-fpm php-mysql php-xml php-mbstring php-curl php-zip php-gd php-intl

نسخه‌ی نصب‌شده‌ی PHP را پیدا کنید (در هر نسخه‌ی Ubuntu متفاوت است):

bash
PHPV=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;'); echo $PHPV

۲. اتصال Apache به PHP-FPM

bash
sudo a2dismod php$PHPV mpm_prefork 2>/dev/null
sudo a2enmod mpm_event proxy_fcgi setenvif rewrite headers
sudo a2enconf php$PHPV-fpm
sudo systemctl restart apache2 php$PHPV-fpm

۳. تعریف سایت

bash
sudo mkdir -p /var/www/example.ir/public
sudo chown -R www-data: /var/www/example.ir
sudo nano /etc/apache2/sites-available/example.ir.conf
ini
<VirtualHost *:80>
    ServerName example.ir
    ServerAlias www.example.ir
    DocumentRoot /var/www/example.ir/public

    <Directory /var/www/example.ir/public>
        AllowOverride All
        Require all granted
        Options -Indexes
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.ir-error.log
    CustomLog ${APACHE_LOG_DIR}/example.ir-access.log combined
</VirtualHost>
bash
sudo a2ensite example.ir
sudo a2dissite 000-default
sudo apache2ctl configtest && sudo systemctl reload apache2

۴. پنهان کردن اطلاعات نسخه

در /etc/apache2/conf-available/security.conf:

ini
ServerTokens Prod
ServerSignature Off

و در /etc/php/$PHPV/fpm/php.ini مقدار expose_php = Off را تنظیم کنید.

bash
sudo systemctl reload apache2 php$PHPV-fpm

۵. آزمایش PHP

bash
echo '<?php echo "PHP " . PHP_VERSION;' | sudo tee /var/www/example.ir/public/v.php
curl -s -H 'Host: example.ir' http://127.0.0.1/v.php
sudo rm /var/www/example.ir/public/v.php

برای HTTPS از certbot --apache استفاده کنید.