Установка Nginx 1.4.x на систему Unix

Данная документация описывает процесс установки и настройки PHP с PHP-FPM для Nginx 1.4.x HTTP сервера.

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

Данное руководство охватывает азы настройки Nginx сервера, для обработки PHP приложений и отображения их на порту 80. Рекомендуется изучить документацию Nginx и PHP-FPM, если вы хотите оптимизировать вашу установку за рамками данной документации.

Пожалуйста, обратите внимание, что во всей данной документации номера версий были заменены на 'x', чтобы данная документация оставалась корректной в будущем. Пожалуйста, замените 'x' на необходимый вам номер версии.

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

  2. Получение и распаковка исходники PHP:

    tar zxf php-x.x.x
    
  3. Настройка и сборка PHP. В этом разделе описывается настройка и сборка PHP из исходных кодов. Запустите ./configure --help для получения списка доступных опций. В нашем примере мы сделаем простые настройки с PHP-FPM и поддержкой MySQLi.

    cd ../php-x.x.x
    ./configure --enable-fpm --with-mysqli
    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/group of processes
    ; Замечание: Пользователь является обязательным. Если группа не установлена,
    ; то будет использована стандартная группа пользователя.
    user = www-data
    group = www-data
    

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

    /usr/local/bin/php-fpm
    

    Более в этом руководстве мы не будет касаться настройки 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 ~* \.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 в соответствующем дереве исходных кодов.

add a note add a note

User Contributed Notes 9 notes

up
28
Lenny
8 years ago
Building from source is not easy if something is a bit different, and I had a hard time with some directory and configuration options. I was floundering around the web until I found this site that translated from Chinese. No one else had the solution.  I couldn't get php fpm to start until I changed the directory (Item 2.ERROR: Unable to globalize). I had other issues listed but I was able to solve them. Please don't delete this, it is very useful info.

The original site  (it is in Chinese, not my site, but I want to give credit):

(there is some more there, you can goto the site)

blog.dream1987.top/?paged=2

Installation problems:

1. configure: error:. Xml2-config not found Please check your libxml2 installation.

solution:

apt-get install libxml2-dev



2.Warning: Declaration of PEAR_Installer :: download () should be compatible with & PEAR_Downloader :: download ($ params) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR /Installer.php on line 43

Warning: Declaration of PEAR_PackageFile_Parser_v2 :: parse () should be compatible with PEAR_XMLParser :: parse ($ data) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR/PackageFile/ Parser / v2.php on line 113
[PEAR] Archive_Tar - already installed: 1.3.13
[PEAR] Console_Getopt - already installed: 1.3.1
[PEAR] Structures_Graph- already installed: 1.0.4

Warning: Declaration of PEAR_Task_Replace :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Replace.php on line 31
[PEAR] XML_Util - already installed: 1.2.3

Warning: Declaration of PEAR_Task_Windowseol :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Windowseol.php on line 76

Warning: Declaration of PEAR_Task_Unixeol :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Unixeol.php on line 76
[PEAR] PEAR - already installed: 1.9.5

solution:

Workaround not found (http://pear.php.net/bugs/bug.php?id=20554)

3. Start php-fpm

1.ERROR: failed to open configuration file '/usr/local/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
ERROR: FPM initialization failed

solution:

Php-fpm.conf copy files from the source file to that location.

cp /root/php-7.0.0alpha1/sapi/fpm/php-fpm.conf /usr/local/etc/php-fpm.conf

2.ERROR: Unable to globalize '/usr/local/NONE/etc/php-fpm.d/*.conf' (ret = 2) from /usr/local/etc/php-fpm.conf at line 125.
ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
ERROR: FPM initialization failed

solution:

Edit /usr/local/etc/php-fpm.conf document introduced * .conf part, change to the correct path include = / usr / local / etc / php-fpm.d / *. Conf

If there is no /usr/local/etc/php-fpm.d directory, create the directory.

3.WARNING: Nothing matches the include pattern '/usr/local/etc/php-fpm.d/*.conf' from /usr/local/etc/php-fpm.conf at line 125.
ERROR:. No pool defined at least one pool section must be specified in config file
ERROR: failed to post process the configuration
ERROR: FPM initialization failed

solution:

cp www.conf.default www.conf

4.ERROR: [pool www] can not get gid for group 'nobody'
ERROR: FPM initialization failed

solution:

Www.conf open files, user and group users into nginx default settings, usually the default is www-data.
up
1
1097625354 at qq dot com
5 years ago
cp php/php.ini-development        php/lib/php.ini
cp php/etc/php-fpm.conf.default       php/etc/php-fpm.conf
cp php/etc/php-fpm.d/www.conf.default     php/etc/php-fpm.d/www.conf
up
0
MiXiM
2 years ago
With ubuntu use
:>sudo apt install php-mbstring
up
0
uanaoeng at outlook dot com
5 years ago
When I run the following command to start the php-fpm:
/usr/local/bin/php-fpm

I got the following error information:
Unable to globalize '/usr/local/NONE/etc/php-fpm.d/*.conf' (ret=2) from /usr/local/etc/php-fpm.conf at line 143.

To fix this error, do:
change the string "include=NONE/etc/php-fpm.d/*.conf" to "include=etc/php-fpm.d/*.conf" in the file "/usr/local/etc/php-fpm.conf" with text editor.

After that, I try to start the php-fpm again and got error information again:
Nothing matches the include pattern '/usr/local/etc/php-fpm.d/*.conf' from /usr/local/etc/php-fpm.conf at line 143.

To fix this error, do:
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
up
0
sp at rysmax dot com
6 years ago
Translate errors:

Теперь перейдите в http://localhsot
Теперь перейдите в http://localhost

В этом разделе описивыется
В этом разделе описывается

запрещаем Nginx от отправлять
запрещаем Nginx отправлять
up
-1
610010559 at qq dot com
4 years ago
in linux system, if you want to add php-fpm service to system service;  it is easy to do that, because php offer the relate shell script:

after make and make install;enter the source code package sapi/fpm/init.d.php-fpm ; type the code in the linux system. 
cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm

then you can use "php-fpm {start|stop|force-quit|restart|reload|status|configtest} "  command  to control your php-fpm program more convenient .
up
0
nguyentienlong88 at gmail dot com
8 years ago
at step 3, after command "sudo make install"
if there is problem with pear.php.net (https). Need to change this line (from https to http) in Makefile
PEAR_INSTALLER_URL = http://pear.php.net/install-pear-nozlib.phar
up
-1
Akash Kumar Sharma
8 years ago
If you get "File not found" error then add "root ROOT_DIR_LOCATION" directive to PHP location block i.e. "location ~* \.php$ { }" , where ROOT_DIR_LOCATION is root directory like "/usr/share/nginx/html" .
up
-2
nguyentienlong88 at gmail dot com
8 years ago
at step 3, if there is no configure script yet, you need to rebuiding configure script using this command:
  
./buildconf --force
To Top