Установка Nginx 1.4.x на систему Unix
 
  Эта документация описывает установку и настройку PHP с
  менеджером процессов PHP-FPM для HTTP-сервера Nginx 1.4.x.
 
 
  Это краткое руководство предполагает, что Nginx собран из исходного кода
  и поэтому бинарные файлы и файлы конфигурации лежат в директории
  /usr/local/nginx. Если нет, и вы получили Nginx другим способом, тогда,
  пожалуйста, обратитесь к » Nginx Wiki, чтобы получить
  похожее на это руководство для вашей установки.
 
 
  В этом кратком руководстве будут рассмотрены основы настройки Nginx-сервера для обработки PHP-приложений
  и их обслуживания на порту 80. Рекомендовано изучить документацию Nginx и PHP-FPM, если
  нужно оптимизировать установку за рамками этой документации.
 
 
  Пожалуйста, обратите внимание, что в этой документации номера версий были
  заменены на символ «x», чтобы документация оставалась корректной в будущем.
  Пожалуйста, замените «x» на необходимый номер версии.
 
 
  - 
   
    Рекомендовано зайти
    » на страницу установки Nginx Wiki,
    чтобы получить и установить HTTP-сервер Nginx на свою систему.
    
- 
   
    Распаковать полученный исходный код PHP:
    
- 
   
    Настроить и собрать PHP. Здесь вы настраиваете PHP
    с нужными параметрами.
    Запустите команду ./configure --help, чтобы получить список доступных опций.
    В примере будут сделаны простые настройки для включения менеджера процессов PHP-FPM
    с поддержкой модуля MySQLi.
    
- 
   
    Переместить файлы конфигурации в правильные места
    
- 
   
    Важно запретить серверу Nginx передавать запросы в бэкенд менеджера PHP-FPM,
    если файл не существует, что помогает предотвратить атаки произвольного внедрения скрипта.
    
    Это исправляют установкой для директивы
    cgi.fix_pathinfo
    значения 0в файле php.ini.
 
    Отредактировать файл php.ini:
    
    Найти директиву cgi.fix_pathinfo=и изменить вот так:
 
- 
   
    Файл php-fpm.conf нужно изменить, чтобы указать, что модуль php-fpm должен
    работать от имени пользователя www-data и группы www-data, до того как мы запустим сервис:
    
    Найти и изменить следующее:
    
    Теперь можно запускать сервис php-fpm:
    
    Это руководство не рассматривает другие настройки модуля php-fpm.
    Обратитесь к документации по php-fpm, если нужны дополнительные настройки.
    
- 
   
    Настроить Nginx на поддержку обработки PHP-приложений:
    
    Измените блок «location» по умолчанию так, чтобы HTTP-сервер знал,
    что он должен обслуживать файлы .php:
    
    Следующий шаг — убедиться, что файлы .php передаются в бэкенд PHP-FPM.
    Введите следующее:
    
    Перезапустите Nginx.
    
- 
   
    Создайть тестовый файл
    
    Теперь откройте в браузере адрес http://localhost.
    Должна отобразиться информация, которую выводит функция phpinfo().
    
  Выполнив описанные шаги, вы получите работающий Nginx-сервер с
  поддержкой PHP в качестве модуля интерфейса FPM SAPI.
  Конечно, для Nginx и PHP доступно больше параметров конфигурации.
  Наберите в директории с исходным кодом команду ./configure --help,
  чтобы получить больше информации.
 
     
 
    
  
  Lenny ¶9 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. 
  
    
  
  Leon Nguyen vnlab ¶4 years ago
  
To maximize the server performance with highest speed, with fewest resources, i have decided to compile PHP 8 manually from minimal Linux/Unix-based OS (my Linux distro is rpm-based packages) 
My system has successfully powered up by PHP 8.0.9 - with Opcache/JIT enabled & other several PHP extension module. Here is several experience that may save you several hours of research.
1. Before step (3) - Configure and build PHP - to ensure that no errors occurs, you can refer to my prerequisites library. 
sudo dnf install \
gcc gcc-c++ make cmake autoconfig \
zlib zlib-devel pcre pcre-devel \
libxml2-devel libxslt-devel \
bzip2-devel curl-devel libzip-devel\
sqlite-devel \
systemd-devel \
openssl-devel \
libffi-devel \
libpng libpng-devel libwebp libwebp-devel libjpeg libjpeg-devel libXpm libXpm-devel \
freetype-devel \
gmp-devel \
libldb-devel \
libc-client libc-client-devel \
openldap openldap-devel \
oniguruma oniguruma-devel \
net-snmp-devel readline-devel unixODBC-devel \
uw-imap uw-imap-devel uw-imap-static uw-imap-utils \
libicu-devel \
enchant2 enchant2-devel \
gd gd-devel \
libsodium libsodium-devel \
libtidy libtidy-devel
You may not receive error when issuing ./configure, make && make install. Even when you manually build your PHP extension package later. 
2. At step 5 - before modifying php.ini - you may double-check whether the current PHP is reading which php.ini file by this command
php -ini | grep php.ini 
# My result. It is different from tutorial. 
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
   
  
    
  
  uanaoeng at outlook dot com ¶6 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
   
  
    
  
  1097625354 at qq dot com ¶6 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
   
  
    
  
  Akash Kumar Sharma ¶9 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" .
   
  
  
    
  
  timy.shark ¶3 years ago
  
Great effort for this tutorial, thanks a ton, here are my notes if may help anyone, considering default install on WSL2 container
Note: composer added for Laravel framework.
These are NOT to be copy and pasted as it is, need to be selective as there are annotations beside some commands,
Also I've commented # some of the defaults written by the original editor due to mismatch to my current environment.
sha256sum  php-x.x.x.tar.gz => e847745fd66fc8c57fac993a609fefcded93fddccd225f0620a26bb5ae5753c3 
    tar zxf php-x.x.x
    sudo apt install build-essential
    sudo apt install -y composer nginx pkgconf libxml2-dev  libsqlite3-dev zlib1g-dev
    cd php-x.x.x
    ./configure --enable-fpm --with-mysqli <==Thank you for installing PHP.
        make <== takes a while 
    sudo make test <== optional as recommended
    sudo make install <= /usr/local/bin /usr/local/php
    sudo cp php.ini-development /usr/local/lib/php.ini
    sudo cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
    sudo cp sapi/fpm/php-fpm /usr/local/bin
    sudo vim /usr/local/php/php.ini <= cgi.fix_pathinfo=0
    sudo vim /usr/local/etc/php-fpm.d/www.conf <= user=www-data group=www-data
    sudo vim sapi/fpm/php-fpm.conf <= edit include=etc/php-fpm.d/*.conf  <- relative path
    sudo cp sapi/fpm/php-fpm.conf /usr/local/etc
    /usr/local/bin/php -v <= $PATH$ uses /usr/local/bin at first /usr/local/lib/php.ini
    sudo /usr/local/bin/php-fpm <= start the service
    sudo vim /etc/nginx/sites-available/default <= edit the following under server {}
    location / {
    #root   html;    
    #index  index.php index.html index.htm;
}
    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;
}
    
    *Restart nginx (root /var/www/html) if root path doesn't exist, default is: /usr/share/nginx/html
    sudo nginx -t <= Test Nginx conf files
    sudo service nginx reload
    sudo service nginx stop
    sudo service nginx start <= [OK]
    
php-fpm needs to be in a service, or kill process manually ps -aux | grep php-fpm ; kill <pid>
   
  
    
  
  610010559 at qq dot com ¶5 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 .