Изменить “Загруженный файл конфигурации” для определенного домена [Не для всего сервера]

Вопрос или проблема

Я не хочу вносить изменения в php.ini по умолчанию, который использует сервер. Я создал новый файл, который расположен в собственной директории моего сайта на сервере Nginx. Проблема, с которой я столкнулся, заключается в невозможности изменить Загруженный конфигурационный файл, когда я открываю страницу phpinfo, чтобы его найти. Я бы хотел иметь возможность изменить его так, чтобы новая конфигурация использовалась только на одном сайте, а не на других.

Стандартное расположение: /etc/php/8.1/fpm/php.ini

Новое местоположение, которое мне нужно установить для моего сайта: /var/www/html/domain.com/usr.ini

Я пытался изменить fastcgi_params в файле nginx.conf, специфичном для сайта, но он не обновляется, поэтому я не могу использовать настройки ini, которые мне нужны для конкретного сайта.

Цель состоит в том, чтобы только один сайт был затронут, указав его собственный .ini файл, а не сервер.

Я не использую Apache в любой форме. Это сервер LEMP stack.

Шаг 1: Убедитесь, что PHP-FPM настроен на сканирование user-specific .ini файлов.
Сначала проверьте или измените конфигурацию пула PHP-FPM, чтобы убедиться, что он сканирует user-specific .ini файлы. Эта настройка обычно находится в конфигурационном файле пула PHP-FPM в /etc/php/8.1/fpm/pool.d/www.conf или аналогичном:

; Путь к user-specific php.ini файлам
php_admin_value[php_value] = ""
php_admin_value[php_flag] = ""
php_admin_value[php_ini] = "/var/www/html/domain.com/usr.ini"

Однако использование php_admin_value напрямую в конфигурации пула PHP-FPM для каждого сайта не практично для множества сайтов. Вместо этого мы используем директиву scan_dir, чтобы разрешить PHP-FPM сканировать .ini файлы в конкретной директории для каждого сайта:

; Добавьте это в конфигурацию пула PHP-FPM
php_admin_value[php_value] = ""
php_admin_value[php_flag] = ""
php_admin_value[php_```] = ""
php_value[error_log] = /var/log/php-fpm/$pool.log
php_admin_value[disable_functions] = ""
php_admin_flag[allow_url_fopen] = on
php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 10M
php_admin_value[memory_limit] = 128M
php_value[max_execution_time] = 30
php_value[max_input_time] = 60
php_value[max_input_vars] = 1000
php_admin_value[date.timezone] = "UTC"
php_admin_flag[log_errors] = on
php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT
php_admin_flag[display_errors] = off
php_admin_flag[display_startup_errors] = off
php_admin_value[include_path] = ".:/usr/share/php"
php_admin_value[session.save_path] = "/var/lib/php/sessions"
php_admin_flag[cgi.fix_pathinfo] = 0

; Это важная часть для конфигурации одного сайта
php_admin_value[scan_dir] = /var/www/html/domain.com

Шаг 2: Конфигурация Nginx для конкретного сайта
Настройте или измените конфигурацию вашего сайта в Nginx, чтобы использовать PHP-FPM с правильным путём:

server {
    listen 80;
    server_name domain.com www.domain.com;
    root /var/www/html/domain.com;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # Отрегулируйте в соответствии с вашим сокетом PHP-FPM
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Шаг 3: Создание или изменение usr.ini
Разместите свои настройки PHP в /var/www/html/domain.com/usr.ini:

; Пример настроек
max_execution_time = 300
memory_limit = 256M
post_max_size = 8M
upload_max_filesize = 8M

Шаг 4: Перезапустите службы
После внесения этих изменений, перезапустите как Nginx, так и PHP-FPM, чтобы применить их:

sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm

Ответ или решение

Изменение "Загруженного файла конфигурации" для отдельного домена, а не для всего сервера, в окружении LEMP-стека на Nginx, может потребовать тщательного планирования и выполнения. Давайте разберем шаги, как настроить пользовательский php.ini для конкретного сайта на сервере, который не влияет на другие сайты.

Шаг 1: Настройка PHP-FPM для поиска пользовательских файлов .ini

В первую очередь, вам нужно убедиться, что PHP-FPM может сканировать пользовательские файлы .ini. Для этого нужно изменить конфигурационный файл пула PHP-FPM, который обычно находится в /etc/php/8.1/fpm/pool.d/www.conf, или создать новый файл конфигурации пула, если у вас специфическая настройка для каждого сайта:

; Путь к пользовательским php.ini файлам
php_admin_value[scan_dir] = /var/www/html/domain.com

Шаг 2: Конфигурация Nginx для конкретного сайта

Чтобы внести изменения только для одного сайта, необходимо настроить конфигурацию Nginx. Убедитесь, что ваша конфигурация сайта, например в /etc/nginx/sites-available/domain.com, содержит следующие параметры:

server {
    listen 80;
    server_name domain.com www.domain.com;
    root /var/www/html/domain.com;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # Это может варьироваться, убедитесь, что путь к сокету верен
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Шаг 3: Создание или изменение usr.ini

Создайте файл /var/www/html/domain.com/usr.ini с вашими конкретными настройками PHP, которые вы хотите применить только для этого сайта:

; Пример настроек
max_execution_time = 300
memory_limit = 256M
post_max_size = 8M
upload_max_filesize = 8M

Шаг 4: Перезапуск сервисов

После всех внесенных изменений, перезапустите сервисы Nginx и PHP-FPM для применения новых настроек:

sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm

Заключение

Эта процедура гарантирует, что загруженный файл конфигурации (Loaded Configuration File) будет специфичен только для заданного домена, не затрагивая другие сайты на сервере. Таким образом, становится возможным обеспечить специализированные настройки PHP для отдельных сайтов в окружении Nginx без вмешательства в глобальные конфигурации сервера. Эти шаги особенно актуальны для серверов на основе LEMP, где отсутствует веб-сервер Apache.

Оцените материал
Добавить комментарий

Капча загружается...