Предполагается, что операционная система у вас уже установлена, сеть настроена, интернет шустрый, провайдер не жадный (качать будем много)… Будем ставить всё из репозиториев, собирать в ручную мы ничего не будем.
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.
Возможные ошибки конфигурации 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, версию компилятора и параметры конфигурации сборки.
Комментарии 5
Пока не прописал строку listen = 127.0.0.1:9000, была ошибка 502.
fastcgi_pass unix:/var/run/php5-fpm.sock;
то в файле конфигураций /etc/php5/fpm/pool.d/www.conf ничего менять не придётся.
Сделала всё по Вашей инструкции и натолкнулась на такую ошибку: при переходе по 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"
Как можно решить такую проблему?
Во-первых, проверьте, пожалуйста, свои пути. Ваш тестовый сайт должен лежать по тому же пути, что прописан в /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
чтобы изменения вступили в силу.Если до сих пор есть ошибки, пишите :)