Задать вопрос
Ответы пользователя по тегу Apache HTTP Server
  • Как передать параметры настройки php при связке apache+php-fpm?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Вот что ответил chat gpt.
    Когда Apache работает в режиме mod_php (например, с mpm_prefork), параметры PHP можно настраивать напрямую в конфигурации виртуальных хостов с помощью директив php_admin_flag и php_admin_value. Однако, когда используется php-fpm в связке с многопоточным MPM (например, mpm_worker или mpm_event), PHP запускается как отдельный процесс, и Apache передает запросы через FastCGI. В этом случае директивы Apache, такие как php_admin_flag и php_admin_value, больше не работают.
    Чтобы задать отдельные настройки PHP для каждого виртуального хоста при использовании Apache с php-fpm, можно воспользоваться следующими подходами:
    1. Использование .user.ini
    PHP поддерживает использование файлов .user.ini для переопределения определённых настроек на уровне директории. Вы можете создать файл .user.ini в корневой директории каждого виртуального хоста и добавить в него настройки, которые вы хотите изменить. Например:
    /var/www/example.com/.user.ini
    ini
    Копировать код
    memory_limit = 512M
    max_execution_time = 300
    upload_max_filesize = 1024M
    post_max_size = 1024M

    Примечание: Убедитесь, что в файле php.ini включена директива user_ini.filename, и она указывает на имя файла .user.ini.
    2. Настройка PHP-FPM пула для каждого VirtualHost
    Вы можете создать отдельные пулы для каждого виртуального хоста в конфигурации php-fpm. В конфигурации каждого пула можно задать свои параметры PHP.
    Создайте новый конфигурационный файл пула, например, /etc/php-fpm.d/example.com.conf:
    ini
    [example.com]
    user = apache
    group = apache
    listen = /var/run/php-fpm-example.com.sock
    listen.owner = apache
    listen.group = apache
    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[memory_limit] = 512M
    php_admin_value[max_execution_time] = 300
    php_admin_value[upload_max_filesize] = 1024M
    php_admin_value[post_max_size] = 1024M

    После этого в конфигурации виртуального хоста Apache пропишите использование соответствующего пула:
    apache
    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com
    
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php-fpm-example.com.sock|fcgi://localhost/"
        </FilesMatch>
    </VirtualHost>

    3. Использование SetEnv и .htaccess
    Если вы хотите использовать переменные окружения для передачи настроек PHP, можно использовать директиву SetEnv в конфигурации виртуального хоста Apache. Затем в php-fpm можно настроить обработку этих переменных.
    Пример для Apache:
    apache
    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com
    
        SetEnv PHP_VALUE "memory_limit=512M
        max_execution_time=300
        upload_max_filesize=1024M
        post_max_size=1024M"
    </VirtualHost>

    Резюме
    Наиболее гибкий и мощный способ управления настройками PHP при использовании php-fpm — это создание отдельного пула для каждого виртуального хоста. Этот подход позволяет точно настраивать параметры PHP для каждого сайта или приложения, а также эффективно управлять ресурсами сервера.
    Ответ написан
    2 комментария
  • Как сделать ссылку без параметров?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Знать бы еще, что для вас является красивым адресом. Если вам нужно подставить номер аккаунта, то можно же сделать так.
    domain.com/id1234
    Если вы хотите не номер, а логин, тогда примерно так.
    domain.com/greck_chebureck

    Логика такого запроса одновременно и легка и тяжела.
    Во-первых, вам нужно использовать модуль чпу. Его можно подключить в файле .htaccess. Во-вторых вам нужно определиться, какие глобальные переменные из массива $_GET являются главными в вашем проекте.
    У меня, к примеру, глобальная переменная из массива $_GET['lang'] является главной и в обязательном порядке посылается к каждой страницы проекта.
    Далее вам нужно решить, где у вас находится папка с аккаунтам пользователя.
    К ней, в файле htaccess прописывайте путь, примерно так.
    RewriteRule ^([a-z0-9-_.]+)$ /user-page/index.php?login=$1
    RewriteRule ^([0-9]+)$ /user-page/index.php?id=$1
    Ну а в php отлавливать, какая переменная пришла на страницу. id или login.
    Если login, Тогда пользователя вызываем по логину, если id, тогда по номеру аккаунта.

    И помните, все аккаунты нужно хранить в базе данных. А то я понял, что для каждого пользователя вы хотите создать отдельный файл php.
    Этого делать не нужно.
    Ответ написан
    Комментировать