Установка и настройка nginx + php-fpm на Ubuntu

Предполагается, что операционная система у вас уже установлена, сеть настроена, интернет шустрый, провайдер не жадный (качать будем много)… Будем ставить всё из репозиториев, собирать в ручную мы ничего не будем.

1. Установка Nginx

Для начала добавим репозиторий проекта Nginx:

sudo vim /etc/apt/sources.list

Добавим туда, официальное зеркало Nginx, то в каком виде представлен данный пакет, отражает видение его разработчиков:

#for nginx
deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx

Теперь нам нужно скачать GPG ключ:

wget http://nginx.org/keys/nginx_signing.key

Установим GPG ключ:

sudo apt-key add nginx_signing.key

Обновим список пакетов:

sudo apt-get update

Установим Nginx:

sudo apt-get install nginx

После установки nginx должен сразу стартануть. Если стартанул без ошибок, сразу переходим к пункту 2 установка php-fpm.

Если уже стоит апач, который по умолчанию слушает порт 80, то после установки nginx вывалятся ошибки:

Обрабатываются триггеры для ureadahead ...
ureadahead will be reprofiled on next reboot
Настраивается пакет nginx (1.2.7-1~precise) ...
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
invoke-rc.d: initscript nginx, action "start" failed.

Узнаём, что у нас на порту 80:

sudo  netstat -lnp|grep :80
eugene@eugene:~$ sudo  netstat -lnp|grep :80
tcp        0      0 0.0.0.0:80            0.0.0.0:*             LISTEN     5557/apache2

Видим, что действительно это apache2 уже слушает порт 80.

Тогда стопим apache, потом перезапускаем nginx.

sudo service apache2 stop
sudo service nginx restart
eugene@eugene:~$ sudo service nginx restart
* Restarting nginx ngin                                                   [ OK ]

2. Установка PHP-FPM

sudo apt-get install php5-cli php5-common php5-mysql php5-fpm php-pear

Нам необходимо устранить уязвимость PHP:

sudo vim /etc/php5/fpm/php.ini

Находим строку:

;cgi.fix_pathinfo = 1

Приводим ее к виду:

cgi.fix_pathinfo = 0

Сохраняем изменения и перезапустим PHP-FPM:

sudo /etc/init.d/php5-fpm restart

3. Создадим виртуальный хост Nginx

Директория для всех сайтов у меня /var/www/. Вы можете выбрать любую, главное чтобы у nginx`а был доступ в эту директорию. Расположение сайтов, например сайт test:

  • /var/www/test/www - корневая директория
  • /var/log/nginx - access и error logs сайта test

 

Настаиваем первый виртуальный хост Nginx, назовем его test

sudo vim /etc/nginx/conf.d/test.conf

Содержимое файла /etc/nginx/conf.d/test.conf (Здесь я привожу только базовые настройки, чтобы работало, если нужно добавить что-то дополнительно, то вы сделаете это сами, исходя из ваших задач)

server {
    listen   80;            # какой порт слушает
    root /var/www/test/www; # корневая директория

    access_log  /var/log/nginx/test.access.log;  #расположение логов данного хоста
    error_log  /var/log/nginx/test.error.log;

    server_name test www.test;

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

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

Обращаю внимание! Все виртуальные хосты должны иметь в названии расширение .conf, иначе виртуальный хост не будет загружен.

Создадим тестовый файл, чтобы проверить работоспособность PHP5:

vim /var/www/test/www/index.php

С содержимым:

<?php

phpinfo();

Перезапустим Nginx, чтобы изменения вступили в силу:

sudo /etc/init.d/nginx restart

Не зыбываем прописать в /etc/hosts

127.0.0.1     test

Переходим по тестовому адресу http://test/index.php или http://test/. Получаем вывод phpinfo(). Если у вас при этом ошибка 502, то читаем ниже как исправить. А здесь нас интересует строка Server API, в ней указывается, кто у нас обрабатывает скрипты PHP.

phpinfo()

Возможные ошибки конфигурации nginx с php-fpm

502 Bad Gateway - если код ошибки 502, заменяем строку (listen = ..) в файле /etc/php5/fpm/pool.d/www.conf

listen = /var/run/php5-fpm.sock   #эту строку заменяем на следующую:
listen = 127.0.0.1:9000

После этого не забываем сделать restart php5-fpm. Ошибки 502 больше быть не должно.

Параметры, поддерживаемые командной строкой nginx

Nginx поддерживает следующие параметры:

-c файл — указывает использовать конфигурационный файл файл вместо файла по умолчанию.
-g — задаёт глобальные директивы конфигурации, например,
nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"
-t — тестировать конфигурацию. nginx проверяет синтаксическую правильность конфигурации, а затем пытается открыть файлы, описанные в конфигурации.
-v — показать версию nginx.
-V — показать версию nginx, версию компилятора и параметры конфигурации сборки.

 

 
Поисковые запросы, по которым приходили пользователи
 
 
 
 

icon Комментарии 5

 pashtet 3 года назад
Следовал по инструкции от начала и до конца. Тестовую страницу на nginx+php-fpm поднял :)
Пока не прописал строку listen = 127.0.0.1:9000, была ошибка 502.
 root 3 года назад
Если в самом конфиге nginx виртуального хоста указать, чтобы запросы шли на fastcgi сервер через unix сокет, а не на порт 9000 - порт, на котором по умолчанию висит php-fpm (127.0.0.1:9000) то есть прописать так в test.conf:
fastcgi_pass unix:/var/run/php5-fpm.sock;
то в файле конфигураций /etc/php5/fpm/pool.d/www.conf ничего менять не придётся.
 julia 2 года назад
Здравствуйте!
Сделала всё по Вашей инструкции и натолкнулась на такую ошибку: при переходе по test/index.php выводится "No input file specified." А по test/ - "403 Forbidden".

В логах выводится по этим двум запросам:
2014/09/20 19:01:58 [error] 15723#0: *1 FastCGI sent in stderr: "Unable to open primary script: /home/julia/var/www/test/www/index.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: test, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "test"

2014/09/20 19:02:19 [error] 15723#0: *1 "/home/julia/var/www/test/www/index.php" is forbidden (13: Permission denied), client: 127.0.0.1, server: test, request: "GET / HTTP/1.1", host: "test"

Как можно решить такую проблему?
 root 2 года назад
Здравствуйте, julia.
Во-первых, проверьте, пожалуйста, свои пути. Ваш тестовый сайт должен лежать по тому же пути, что прописан в /etc/nginx/conf.d/test.conf в секции root: root /var/www/test/www;.
У вас (судя по логам) эта директория находится в домашней папке вашего пользователя, а у меня в примере не так: /home/julia/var/www/test/www
Если пути из конфига и реальный путь до сайта в файловой системе у вас совпадают - то ок. Если нет - сделайте чтобы совпадали :)

Во-вторых, обновите, пожалуйста, свой /etc/nginx/conf.d/test.conf как в посте, там я изменил расположение логов хоста с /var/www/test/logs/access.log на /var/log/nginx/test.access.log. Была возможная ошибка - nginx: [emerg] open() "/var/www/test/logs/access.log" failed (2: No such file or directory).

В третьих, похоже у вас для nginx не хватает прав:
"/home/julia/var/www/test/www/index.php" is forbidden (13: Permission denied)
Попробуйте сделать sudo chmod -R 777 /home/julia/var/www/test/www

Проверить работоспособность конфигурации nginx sudo nginx -t:
eugene$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

UPD: После правок конфигурационных файлов .conf не забывайте делать sudo service nginx restart или sudo service nginx reload чтобы изменения вступили в силу.
Если до сих пор есть ошибки, пишите :)
 VYanchuk год назад
Статья по теме добавления виртуальных хостов на nginx https://shneider-host.ru/blog/dobavlenie-virtualnyh-hostov-na-nginx.html
Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ