Nginx 1.4.x на Unix системах

В цьому розділі описано встановлення та налаштування PHP з PHP-FPM для HTTP-сервера Nginx 1.4.x.

Передбачається, що Nginx зібрано з початкових файлів, а всі двійкові та конфігураційні файли зберігаються в /usr/local/nginx. В іншому випадку, можна додати опис такого процесу встановлення до » Nginx Wiki.

Тут описано основне налаштування сервера Nginx для обробки PHP-скриптів на 80-му порту. Для інших цілей радимо прочитати документацію Nginx для PHP-FPM.

Оскільки викладені тут рекомендації дійсні для багатьох версій, нижче буде траплятись знак 'x' на місці номера версії. За потреби його можна замінити на потрібне число.

  1. Рекомендовано відвідати Nginx Wiki та прочитати » керівництво зі встановлення, щоб правильно встановити Nginx.

  2. Завантажте та розпакуйте початкові файли PHP:

    tar zxf php-x.x.x
    
  3. Зараз ви можете компонувати збірку PHP, наприклад, визначивши які розширення будуть включені. Щоб проглянути список доступних параметрів, запустіть ./configure --help. В нашому прикладі ми зробимо просту конфігурацію з підтримкою PHP-FPM та MySQL.

    cd ../php-x.x.x
    ./configure --enable-fpm --with-mysql
    make
    sudo make install
    
  4. Тепер скопіюємо конфігураційні файли в їхнє коректне розташування:

    cp php.ini-development /usr/local/php/php.ini
    cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
    cp sapi/fpm/php-fpm /usr/local/bin
    
  5. Важливо, щоб ми убезпечили Nginx від проходження запитів до PHP-FPM, коли файлу не існує. Таким чином ми запобігаємо від довільної ін'єкції скрипта.

    Це можна зробити встановивши директиву cgi.fix_pathinfo в 0 всередині файлу php.ini.

    Відкриваємо файл php.ini:

    vim /usr/local/php/php.ini
    

    Знаходимо директиву cgi.fix_pathinfo= та змінюємо її так:

    cgi.fix_pathinfo=0
    
  6. В файлі php-fpm.conf потрібно зазначити, що php-fpm повинен запускатись під користувачем www-data та в групі www-data перед тим, як будемо запускати сервіс:

    vim /usr/local/etc/php-fpm.d/www.conf
    

    Знайдіть та змініть наступне:

    ; Користувач чи група Unix процесів
    ; Замітка: визначити користувача (user) потрібно обов'язково. Якщо групу не
    ; встановлено, буде використовуватись початкова група.
    user = www-data
    group = www-data
    

    Тепер можна запускати сервіс php-fpm:

    /usr/local/bin/php-fpm
    

    На цьому налаштування php-fpm припиняється, але якщо ви зацікавлені в більш детальному налаштуванні, то рекомендуємо читати відповідну документацію.

  7. Тепер Nginx потрібно налаштувати для обробки PHP застосунків:

    vim /usr/local/nginx/conf/nginx.conf
    

    Змінюємо блок "location", щоб додати до індексних файлів розширення .php:

    location / {
        root   html;
        index  index.php index.html index.htm;
    }

    На наступному кроці ми говоримо, щоб всі файли .php передавались до PHP-FPM, нижче від закоментованого блоку location, додайте таке:

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

    Перезапускаємо Nginx.

    sudo /usr/local/nginx/sbin/nginx -s stop
    sudo /usr/local/nginx/sbin/nginx
    
  8. Створюємо тестовий файл

    rm /usr/local/nginx/html/index.html
    echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
    

    Перейдіть за адресою http://localhost. Тепер phpinfo() вже повинно виводитись.

Дотримуючись кроків, описаних вище, ви матимете робочий веб-сервер Nginx, який підтримує PHP як модуль FPM SAPI. Звичайно є набагато більше параметрів конфігурації доступних для Nginx та PHP. Більше інформації можна отримати ввівши в консолі ./configure --help в їх кореневих каталогах.