avatar Ubuntu Настройка Nginx с поддержкой PHP-FPM в Ubuntu 12.04 (включает: Nginx, php-fpm, MySQL, Memcached)

Лично я, стараюсь использовать именно LTS дистрибутивы, основная причина моей любви к ним-придонная лень, все дело в том что если возится с этим дома, настраиваешь, потом перенастраиваешь, затем слегка допиливаешь, а потом все это сносишь и делаешь как нужно , то это интересно, но когда ты работаешь в крупной сети, то на такие эксперименты, обычно, нет времени т.к. других задач припасено на пару недель вперед. В общем, все интересно делать самому, пока это не дошло до промышленных масштабов, а вот когда ты к ним пришел, то уже стараюсь максимально упростить и автоматизировать работу. Но все это лирика, переходим к практике.

Как всегда: Предполагается что операционная система у вас уже установлена, сеть настроена, интернет шустрый, провайдер не жадный (качать будем много)…
Учтя все предыдущие недостатки, мы будем ставить, все из репозиториев, собирать в ручную мы ничего не будем.
Поднимем права до root:
sudo su

Установка Nginx
Для начала добавим репозиторий проекта Nginx:
nano /etc/apt/sources.list

Добавим туда, официальное зеркало 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 ключ:
apt-key add nginx_signing.key


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


Установим Nginx:
aptitude install nginx


Установка PHP-FPM:
aptitude install php5-cli php5-common php5-mysql php5-suhosin php5-gd php5-fpm php5-cgi php5-fpm php-pear php5-mcrypt -y


Нам необходимо устранить уязвимость PHP:
nano /etc/php5/fpm/php.ini


Находим строку:
;cgi.fix_pathinfo = 1

Приводим ее к виду:
cgi.fix_pathinfo = 0


Сохраняем изменения и перезапустим PHP-FPM:
/etc/init.d/php5-fpm restart


Создадим пользователя для работы с виртуальным хостом
Чтобы не заморачиваться, назовем его example:
При создании пользователя, отключим ему доступ к шеллу, так безопаснее.
useradd example -b /home/ -m -U -s /bin/false

также, при создании пользователя, мы завели одноименную группу example, она нам также пригодится.

Придумаем для пользователя example пароль:
passwd example


Создадим необходимые, для работы WEB сайта, директории:
mkdir -p -m 755 /home/example/www
mkdir -p -m 754 /home/example/logs


Предоставляем пользователю example права на них:
chown -R example: /home/example/www/
chown -R example: /home/example/logs/


Предоставим Nginx доступ в домашнюю директорию пользователя example, добавив пользователя www-data в группу example
usermod -a -G example www-data


Создадим виртуальный хост Nginx
Настаиваем первый виртуальный хост Nginx, назовем его example.org
nano /etc/nginx/conf.d/example.org.conf


С содержимым:
(Здесь я привожу только базовые настройки, чтобы работало, если нужно добавить что-то дополнительно, то вы сделаете это сами, исходя из ваших задач )
server {
        listen   80;
        root /home/example/www;
      
        access_log /home/example/logs/nginx.access.log; #расположение логов данного хоста

        server_name example.org www.example.org;

        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, иначе виртуальный хост не будет загружен. Чтобы это исправить, можно зайти в:
nano /etc/nginx/nginx.conf

найти строку:
include /etc/nginx/conf.d/*.conf;

и привести к такому виду, с каким вы привыкли работать или тем что вам удобнее, лично я рекомендую оставлять все как есть!

Создадим тестовый файл, чтобы проверить работоспособность PHP5:
nano /home/example/www/test.php


С содержимым:
<?php
phpinfo();
?>


Перезапустим Nginx, чтобы изменения вступили в силу:
/etc/init.d/nginx restart


Переходим по тестовому адресу httр://example.org/test.php
Получаем то, что написано на экране, нас интересует строка Server API ( на скриншоте подчеркнуто красным) там указывается, кто у нас обрабатывает скрипты PHP.
PHP-FPM

Наш сервер уже работоспособен, осталось добавить сопутствующие приложения MySQL и memcached

Устанавливаем MySQL
aptitude install mysql-server mysql-client mysql-common

Придумываем пароль для пользователя root (Администратор сервера баз данных)

Установка Memcached
aptitude install memcached php5-memcached


Для применения изменений перезапустим PHP-FPM
/etc/init.d/php5-fpm restart


Чтобы удостовериться что модуль установился и работоспособен, снова переходим по адресу httр://example.org/test.php
Находим пункт memcached
PHP-FPM + memcached

Также, для закачки файлов вам потребуется установить FTP сервер, о способах его настройки можно прочить в опубликованной ранее статье-Настройка FTP сервера vsFTPd, статья актуальна до сих пор, по этому, я не вижу смысла ее обновлять.

Теперь наш сервер полностью упакован, у нас получилась отличная заготовка, которая будет обновятся из основных репозиториев, также нам не пришлось ничего собирать руками, от вас теперь только требуется расширять функционал, исходя из тех задач-которые перед вами ставятся…
Ну и как всегда, обо всех найденных ошибках, а также предложениях по улучшению функционала, да и просто вопросов, прошу в комментарии.

119 комментариев

avatar
а как правильно установить php5-fpm в связке apache2 + nginx ???
avatar
да все также, только php-fpm
Для примера можно посмотреть: howitmake.ru/blog/ubuntu/42.html
Ну и поиск рулит.
А вам для чего такая сложная конфигурация?
avatar
просто ради интереса :)
avatar
Ну если исключительно «академический» интерес, то понятно, но если для чего-то серьезного, то смысла нет…
avatar
Привет! Подскажите пожалуйста, почему не имеет смысла использовать такую схему для чего то серьёзного? Дело в том, что меня окончательно задушил шаред хостер, по причине прожорливости livestreet :D И вот думаю теперь брать дедик, для перспективного проекта на ls и других сайтов. Ну и конечно же встал вопрос о выборе нужного веб сервера. Vps не хочу брать потому что там тоже есть процессорное время, как на шаред и облаке.
avatar
Получается слишком сложная схема, много точек для отказа, соответственно падает надежность.
Думаю что для вашего проекта за глаза хватит nginx с php-fpm, а если он выстрелит, то том уже будете смотреть в каком направлении масштабирования вам двигаться.
По поводу VPS соглашусь лишь от части, процессорное время там жестко ограничено, но ничего не мешает вам настроить кеширование, а по мере роста сайта, просто добавлять ресурсов, ну или если у вас там все серьезно, то уйти в облако например у Амазон, там вообще все круто, вы оплачиваете только использованные ресурсы.
avatar
дак на облаке получается по деньгам примерно тоже самое. Но в случае с дэдиком, там будет 32gb ram ddr3 + 4 ядра + анлим траффик, но после 10 GB трафика скорость упадёт со 1 gbit(125mbit) до 10 mbit и всё удовольствие стоит 2.5 т/р. в месяц. По поводу отказа, думаю можно будет сдедать что то наподобии такой схемы: крон смотрит наличие запущенных процессов каждые N времени, если не находит, вполняет скрипт который шлет на телефон смс о беде) В случае с дедиком ещё можно пореселить друзьям и знакомым(если я правильно понимаю термин) и тогда он будет довольно дешего обходиться.

Хотя думаю будет сложно(во всяком случае мне), если данная схема не ограничивается 1 сервером, и разговор уже идёт про кластер :D
avatar
Вы сначала сайт сделайте и создайте приток аудитории, а там уж буде видно какой сервер вам нужен…
Хотя, 2500 руб не такая крупная сумма, а если на «сервант» взять еще и соседей, то совсем не дорого получится. Главное-настройте резервное копирование!
avatar
Я с этого и начал :D у меня был шаред хостинг с безобиднм wp + закрытый ls, лс за месяц существования собрал 200 человек, которые продолжали раздавать инвайты и расширять аудиторию, после этого мне начали приходить письма от хостера, что я вылез за рамки использования процессорного времени, соответственно начал искать другой хостинг. Везде как выяснилось было процессорное время, кроме дедиков, вот я и задумался его взять с перспективой на расширение количества сайтов, начал задумыватся о веб сервере, поискав попал на ваш ресурс. Поставил по вашему гайду nginx 1.04 + apache-mpm-itk + etc. Правда на работе, т.к. в мою задачу входило развернуть рабочее окружение, правда щяс задумался зафига я сюда поставил mpm-itk ведь я же не хостинг открываю :D

По поводу бэкапов вроде по крону можно всё нормально организовать, но для лс есть варикан попроще недавно был добавлен тестовый плагин backup он бесплатный.
avatar
Понятно что бэкапы даются легко, но многие и этого делать не удосуживаются.
А можно ссылку на ваш сайт, в личку? Просто интересно посмотреть чем люди интересуются.
avatar
Добрый день, возникло несколько вопросов по настройке.
1. Почемы вы не используете для виртуальных хостов директорию /etc/nginx/sites-available/ с последующим симлинков в /etc/nginx/sites-enabled/
2. Почему вы добавляете пользователя nginx в шруппу к вашему пользователю, а не используете конфигурационные файлы в /etc/php5/fpm/pool.d/ где можно указать выполнения от имени вашего пользователя
3. Раз вы используете php5-fpm, то думаю лучше использовать
fastcgi_pass unix:/var/run/php5-fpm.sock;

вместо
fastcgi_pass 127.0.0.1:9000;


просто в свое время отхватил кучу проблем с последним
avatar
Спасибо за дополнение, отвечаю по пунктам:
1) в сборке Nginx от nginx.org -это не требуется, а править конфиги не особо хотелось, да и откровенно говоря, мне не очень нравится схема с сим.линками.
2) согласен с вами на 100%
3) Да работа через сокет немного повышает скорость из-за того что не проверяется целостность данных в отличии от TCP.

З.Ы. Я не утверждаю что мое мнение единственно-верное, вы, свои замечания, лучше оформите в виде небольшого дополнения к статье, а я сделаю ссылку на нее, как один из вариантов решения, думаю, ваш опыт будет весьма полезен другим людям, поделитесь им!
avatar
А я не утверждаю что ваше мнение не верно =) Как оформить дополнение? Создать новый пост? Кстати я тут смотрю в основном про линукс все публикуется, а по маку тут писать можно?
avatar
Да, сделайте отдельный пост.
Конечно можно, просто я с MacOS не работаю, ей у нас занимаются другие люди…
Если есть вопросы, обращайтесь в личку.
avatar
Доброго времени суток.
Должен признать, я полный нуб в администрировании сервера и практически не работал с ОС на базе Linux. Возникла необходимость настроить LAMP на VPS c предустановленным Ubuntu minimal.
Решил воспользоваться данным мануалом. С горем пополам дошел до шага с созданием файла test.php, после этого при попытке перезагрузки nging нарвался на сообщение:
Restarting nginx: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
nginx: configuration file /etc/nginx/nginx.conf test failed
Даже не знаю, с какой стороны хвататься за проблему, то ли писать тикет в саппорт хостера, то ли начинать учить мат часть основательно.
Пожалуйста, толкните в нужном направлении.
avatar
Прошу прощения, с предыдущим вопросом помог Гугл, рано запаниковал.
Теперь уперся в то, что у меня не открывается мой httр://example.org/test.php, его нужно вбивать просто в браузере или есть хитрости?
Коннекчусь к серверу через Putty.
Заранее спасибо за ответ.
avatar
добавьте запись в файл hosts чтобы работало разрешение имени и все будет работать
avatar
Большое спасибо! Помогло.
avatar
Даже и не знаю…
1.Хочу обновить свой nginx 0.5.3 до последней версии.В связи с этим возникает вопрос. После этих манипуляций, сайты стоящие на моем nginx не удалятся?
2.Пользователи и группу не удалятся?
3.У меня еще много вопрос.Например что такое GPG ключ, Memcached для чего они нужны.PHP-FPM чем отличается от обычного PHP?
Можно было у вас на сайте сделать FAQ по всем этим и другим вопросом
avatar
Перед обновлениями обычно конфиги бэкапятся, сайты тоже! Только после этого можно приступать к серьезным обновлениям.
Так уже все давно написано, просто это для меня элементарно, по этому я не писал об этом. Тем более что я один поддерживаю этот сайт, а помимо этого, служебные обязанности никто не отменял, проблема в том что все хотят только получать, но не хотят что-то делать, а объять необъятное одному человеку не реально. ))
avatar
Буду тогда экспериментировать.А вус на сайте нет поста, как установить стриминг для flv и mp4 файлов?
avatar
честно, я не сталкивался, по этому знаю только в теории…
avatar
жаль, а то у меня возникли проблемы еще и с этим )
avatar
Если у вас есть вопросы, не связанные с темой поста, чтобы не забивать не тематическими комментариями, пишите в личку.
avatar
Настроил сервер по этой статье, все работает без нареканий. Только одна непонятка, почему то плодятся mysql процессы в количестве не меньше 18 штук и отжирают память не меньше 200М. Настроил только один хост с индексной статичной хтмлькой, базы вообще пока не использую и не создавал. Кто подскажет в чем может быть проблема?
avatar
В документацию по MySQL, пилите конфиги, все это настраивается.
avatar
после дня поиска, практически отчаявшись, натолкнулся на решение. просто нужно было отключить поддержку баз InnoDB.

Если кому понадобится

в секции [mysqld]

default-storage-engine = myisam
skip-innodb
avatar
Решение годное только при определенных задачах -если вам нужно использовать MyISAM.
А в чем у вас бала проблема, ну запущены процессы и что-серверу от этого плохо становилось?
avatar
плохо пока не становилось, потому что там еще не крутится ничего. просто само по себе непонятно такое поведение при том, что ни одной базы не создал и не работаю с мускулем пока, а он уже наплодил 20 процессов и ест 200+М памяти на пустом месте. конечно может оно так и должно быть, я пока новичек в близком общении с настройкой сервера
avatar
В общем вы толком не увидев проблемы уже пытаетесь все запилить, хотя ценность всего этого стремится к нулю.
Принимать решения нужно ситуационно, а не увидил-испугался-бросил ядрену бомбу, так на всякий случай… ;)
avatar
Поставил на сервер, сконфигурированный по данному мануалу, сайт на MODx Revo — в админке не работает визуальный редактор TinyMCE. Возможно кто-нибудь сталкивался, в чем может быть проблема?
avatar
какая ошибка выдается?
avatar
При включенном редакторе блок texterea просто становится недоступным, при проверке с помощью консоли Chrome выдает:

Failed to load resource: the server responded with a status of 403 (Forbidden) http://tripsy.ru/assets/components/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js?v=224pl
Failed to load: http://tripsy.ru/assets/components/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js 


На всякий случай прилагаю скриншот.

Как уже пробовал бороться:
В конфиге nginx включил gzip, установил zip и в php.ini прописал его поддержку, права на все папки и сам файл editor_plugin.js стоят 777, — все это не помогает.
avatar
Лично я, с этим движком, дела не имел. Ну судя по логам не хватает прав, проверьте, может не правильно установили.
А что говорят форумы поддержки, не думаю что вы один сталкиваетесь с данной проблемой…
avatar
Автор спасибо за рабочий мануал, но есть пара вопросов которые образовались в ходе работы.

1)Я использую wordpress 3.5 — не работает ЧПУ (создал .htaccess как было написано в панеле управления)
2)Можно узнать как правильно сделать виртуальные хосты? (я собираюсь использовать такие адреса mc.server.rabotki.net и srv.rabotki.net)
3)Вот столько потребляется озу у меня
avatar
Здравствуйте.
1) Nginx не воспринимает .htaccess они работают только в Apapche! Чтобы работали ЧПУ нужно прописать рерайты в конфиге виртуального хоста, рабочий пример ддя Nginx легко гуглится за пару минут.
2) Пример создания виртуального хоста сесть в статье, но там базовый функционал, если нужно что-то добавить, думаю что вы лучше меня знаете какой функционал вам нужен, а я, к сожалению, не телепат. :)
3) У вас есть проблемы с потреблением ОЗУ?! Лично я их не вижу, у вас система в аптайме всего 2 часа и использовано 160Мб в чем проблема? По поводу отображения на экране, расшифровку легенды можно посмотреть в самом htop
avatar
Я не совсем понял слово рерайт но гул догадался.
Пришлось пошаманить и Вот наговнокодил конфиг nginx который вроде как работает в wordpress 3.5
avatar
Ну работает и слава богу ;)
avatar
Еще не плохо скажется на работе изменения в файле nginx.conf

user nginx;
worker_processes 4;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr — $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;

include /etc/nginx/conf.d/*.conf;
}
avatar
На основании чего такой вывод?
avatar
Artful: Ну работает и слава богу ;)
А так уже проверено у человека под ником lord_sidiys
avatar
при перезагрузке NginX
выдает:
nginx: [emerg] invalid number of arguments in «fastcgi_param» directive in /etc/nginx/conf.d/example.conf:16
avatar
загуглил ошибку, оказалась при копипасте сбилась строка на нет:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
avatar
проверяйте синтаксис в конфигах, мануал рабочий на 100%
avatar
все сделал по нему. но при заходе из вне example.danfis.eu пишет 502 Bad Gateway, там еще лежит test.php до него тоже не достучаться

создал другой teamspeak.danfis.eu пишет 403 Forbidden
попробовал с правами поиграться для него — мимо (делал 7777 на все каталоги и файлы внутри пользователя)

что не так??
avatar
Если выдает 502 Bad Gateway — то не может достучаться до apache
Если 403 Forbidden — то не хватает прав доступа.
Посмотрите в логах, там все написано…
avatar
2013/03/04 16:14:38 [error] 22699#0: *2 directory index of "/home/example/www/" is forbidden, client: 213.219.*.*, server: ***.eu, request: «GET / HTTP/1.1», host:$
2013/03/04 16:14:38 [error] 22699#0: *2 open() "/home/example/www/favicon.ico" failed (2: No such file or directory), client: 213.219.*.*, server: ***.eu, request:$

с favicon.ico в принципе все ясно — touch.
а вот, что делать с directory index of "/home/example/www/" is forbidden
не понятно. я ведь при создании права указывал.(все как в мануале.)
avatar
Это просмотр содержимого директории, по умолчанию он выключен!
Создайте в корневой директории файл index.php с содержимым:
<?php
phpinfo();
?>
avatar
разобрался. спасибо за совет — логи…
трабл был из-за того, что послушал камент выше, от другого пользователя
fastcgi_pass unix:/var/run/php5-fpm.sock;

log:
2013/03/04 16:41:40 [crit] 22838#0: *3 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 213.219.
avatar
так а все же, что делать с /var/run/php5-fpm.sock
у меня в этой директории только php5-fpm.pid
avatar
так а все же, что делать с /var/run/php5-fpm.sock
у меня в этой директории только php5-fpm.pid
avatar
Сделайте как написано у меня, добейтесь стабильной работы, а затем уже экспериментируйте.
avatar
Если не сложно, то стоит добавить, что в случае 12.10+ вместо
fastcgi_pass 127.0.0.1:9000;
надо вставить
fastcgi_pass unix:/var/run/php5-fpm.sock;

И БОЛЬШОЕ СПАСИБО за статью!!!
avatar
Идея правильная, но лишь от части.
Есть возможность подключения через TCP или через сокет.
Сокет работает быстрее из-за того что проверяет целостность данных, тогда как TCP проверяет, но он несколько медленный в работе, но это имеет значение лишь при высоких нагрузках.
Так что, это ошибкой не считается…
avatar
Привет. Застрял на рестарте nginx, выдает ошибку:
root@***:/home/uckap# /etc/init.d/nginx restart
Restarting nginx: [emerg]: unknown directive " " in /etc/nginx/conf.d/***.org.conf:3
configuration file /etc/nginx/nginx.conf test failed

конфиг:

server {
        listen   80;
        root /home/***/www;
     
        access_log  /home/***/logs/nginx.access.log; #расположение логов данного хоста

        server_name ***.org www.***.org;

        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;
        }
}

PS: Пост интересный, спасибо. Хочу добиться конечного результа (неделю бьюсь).
avatar
ошибка в синтаксисе, в 3й строке
avatar
root /home/***/www;?
*** — это example. Путь существует. Права заданы.
Обьясните подробнее пожалуйста.
avatar
Куда уж подробнее.
Строка 3, похоже лишний пробел
root@***:/home/uckap# /etc/init.d/nginx restart
Restarting nginx: [emerg]: unknown directive " " in /etc/nginx/conf.d/***.org.conf:3
configuration file /etc/nginx/nginx.conf test failed


ну и кусок конфига
server {
        listen   80;
        root /home/***/www;
avatar
Спасибо! с синтаксисом разобрался. теперь с директориями проблема
root@vtgsm:/home/uckap# nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
[emerg]: open() "/usr/local/nginx/ /home/vtgsm/logs/nginx.access.log" failed (2: No such file or directory)
configuration file /etc/nginx/nginx.conf test failed

Физически не было каталога /usr/local/nginx/ и файла /home/vtgsm/logs/nginx.access.log
все создал. реакций ноль…
avatar
Если директории созданы, теперь проверьте права чтобы в /home/vtgsm/logs/ мог записывать пользователь www-data
или просто добавьте пользователя www-data в группу vtgsm
avatar
В том то и дело, после установки прав тоже не реагирует…
root@vtgsm:/home/uckap# chown -R example: /home/vtgsm/www/
root@vtgsm:/home/uckap# chown -R example: /home/vtgsm/logs/
root@vtgsm:/home/uckap# nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
[emerg]: open() "/usr/local/nginx/ /home/vtgsm/logs/nginx.access.log" failed (2: No such file or directory)
configuration file /etc/nginx/nginx.conf test failed
root@vtgsm:/home/uckap# usermod -a -G vtgsm www-data
root@vtgsm:/home/uckap# nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
[emerg]: open() "/usr/local/nginx/ /home/vtgsm/logs/nginx.access.log" failed (2: No such file or directory)
configuration file /etc/nginx/nginx.conf test failed
root@vtgsm:/home/uckap# 

конфигурацию ставлю на Debian 6.0 2.6.32-5.686-bigmem
avatar
А точно все директории созданы?
avatar
а что в файле /etc/nginx/nginx.conf
avatar
user www-data;
worker_processes  4; # Ставим число по количеству ядер

timer_resolution 100ms;
worker_rlimit_nofile 8192;
worker_priority -5; #Увеличитвваем приоритет

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    access_log  /var/log/nginx/access.log;

    sendfile        on;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip        on;
    gzip_min_length     1100;
    #gzip_disable       "msie6";  #Быстрее, но работает только на новых версиях nginx
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_proxied        any;
    gzip_comp_level     4;
    gzip_types          text/plain text/css application/x-javascript text/xml application/xml application/xml+$
    gzip_vary           on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
avatar
попробуйте поставить обычный пакет Nginx, который не bigmem, из репозиториев проекта Nginx
avatar
устанавливал из этого репозитория:
deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx
avatar
восстановите дефолтный конaфиг nginx
avatar
Основной конфиг выглядит так по дефолту
GNU nano 2.2.4                     Файл: /etc/nginx/nginx.conf                                               


user  nginx;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Переустановил nginx:
root@vtgsm:/home/uckap# mkdir -p -m 755 /home/vtgsm/www
root@vtgsm:/home/uckap# mkdir -p -m 754 /home/vtgsm/logs
root@vtgsm:/home/uckap# chown -R vtgsm: /home/vtgsm/www/
root@vtgsm:/home/uckap# chown -R vtgsm: /home/vtgsm/logs/
root@vtgsm:/home/uckap# usermod -a -G vtgsm www-data
root@vtgsm:/home/uckap# nano /etc/nginx/conf.d/example.org.conf
root@vtgsm:/home/uckap# nano /etc/nginx/conf.d/vtgsm.org.conf
root@vtgsm:/home/uckap# nano /home/example/www/test.php
root@vtgsm:/home/uckap# nano /home/vtgsm/www/test.php
root@vtgsm:/home/uckap# /etc/init.d/nginx restart
Restarting nginx: nginxnginx: [emerg] open() "/etc/nginx/ /home/vtgsm/logs/nginx.access.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

ошибка не ушла, права по мануалу…
конфиг виртуалки:
server {
listen   80;
root /home/vtgsm/www;

access_log  /home/vtgsm/logs/nginx.access.log; #расположение логов данного хоста

sendfile on;
tcp_nopush on;

server_name vtgsm.org www.vtgsm.org;

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;
}
}
avatar
Тут возможно только 2 варианта
1) Нет директорий.
2) Нет прав на запись в эти директории.
Других вариантов тут быть не может, чисто технически.
avatar
Решено!
access_log"Лишний пробел" /home/vtgsm/logs/nginx.access.log

странно что при проверке синтаксиса он это не выдал…
на данный момент спасибо поеду дальше.
avatar
Адуреть, такое только в ручную вылавливать.
avatar
У меня проблема. начал всё устанавливать по гайду. Вываливается ошибка 502 Bad Gateway

в логах пишет *1 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: «GET / HTTP/1.1», upstream: «fastcgi://127.0.0.1:9000», host: «localhost»

подскажите что делать
avatar
Здравствуйте.
php5-fpm запущено?
правилами фаерволла порт 9000 не заблокирован?
avatar
Исправал ошибку
avatar
И в чем была проблема?
avatar
Здравствуйте, стоит сервер ubuntu 12.04 на виртуалке, со статикой 192.168.1.1, вроде все правильно сделал, но не могу достучаться до страницы test.php по имени example.org/test.php, через 192.168.1.1 вижу…
Машина с которой стучусь также на виртуалке.
в файле hosts пробывал вводить и 192.168.1.1 example.org/test.php и просто хост(без ip).
avatar
Ну у вас и каша в голове…
Запись в файле host выглядит так
192.168.1.1 example.org

А что толку вводить доменное имя без IP куда система будет стучаться?!

Все остальные настройки делаются через конфигурационный файл виртуального хоста.
Также, причину ошибки, всегда можно посмотреть в логах.
avatar
А без правки host реально сделать?
avatar
Конечно, поднять собственный DNS сервер и создать нужные записи.
avatar
502 ошибка
в логах следующее
178.215.97.25 - - [12/Jul/2013:14:52:16 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:52:58 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:53:09 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:54:14 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:54:15 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:54:30 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:14:56:15 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:15:00:21 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:15:00:30 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:15:01:57 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:15:04:16 +0000] "GET /test.php HTTP/1.1" 502 574 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like G$
178.215.97.25 - - [12/Jul/2013:15:09:30 +0000] "GET /test.html HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like $
178.215.97.25 - - [12/Jul/2013:15:10:00 +0000] "GET /test.html HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Ge$

avatar
В настройках виртуального хоста правильно прописаны настройки php5-fpm.
avatar
все как у Вас в мануале
avatar
server {
        listen   80;
        root /home/***/www;

        access_log /home/***/logs/nginx.access.log;

        server_name ***.org www.***.org;

        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;
        }
}

avatar
На вид синтаксис правильный.
проверьте права на выполнение скрипта
avatar
и перезапустите php-fpm
avatar
хм выставил права 777
service php5-fpm restart
результата нет
avatar
Конфиг рабочий, попробуйте пересоздать виртуальных хост
avatar
Добрый вечер! у меня такая проблема! При попытке перейти на example.org.test.php вылетает ошибка bash: example.org.test.php: No such file or directory. Заранее спасибо за помощь!
файл hosts правил…
avatar
А где вы такой адрес то взяли?!
паравильно:
example.org/test.php
avatar
Опечатка, на машине ввожу правильно
avatar
На машине вводил правильно… и ошибка!
avatar
Тогда смотреть логи, там все ответы…
avatar
Вообщем получалось зайти с браузера! выдавало приветствие nginx и все такое… потом решил поменять название сайта.поменя заходит только на сайт, а при попытке перейти на localhost или же 127.0.0.1 forbidden 403! в логах сказано directory index of "/usr/share/nginx/html" is forbidden! удаляю html пишет not found.что делать подскажите! извените если глупый вопрос! просто никогда не работал с Линуксом! а тут поставили задачу за неделю все сделать, да еще и на сервере…
avatar
если в запросе к серверу нет имени виртуального хоста, то вас перебрасывает на дефолтный виртуальный хост, а там в настройках корневая директория в /usr/share/nginx/html, вы файлы удалили, вот серверу и нечего вам показать.
avatar
Но до того как я удалял, была же ошибка forbidden 403
avatar
в логах есть все ответы на ваши вопросы
avatar
Друзья. Помогите разобраться.
Две машины.
1-я: 192.168.10.1 — на ней сервер Ubuntu 14.04, шлюз, DNS+DCHP, squid.
2-я: 192.168.10.11 — Linux mint 16. Адрес получает по DCHP.

Не могу зайти со 2-го ПК gal-ex.org/test.php. Не может определить IP-адрес по имени узла «gal-ex.org». В /etc/hosts прописал (на 2-ом):
127.0.0.1 localhost
127.0.1.1 mars
192.168.10.1 gal-ex.org # Ссылка на сервер.

Сервисы nginx, php5-fpm — запущены. Логи nginx, php — пустые. ping gal-ex.org — проходит. Думаю, проблема в разрешении имен DNS. Но как исправить и добиться работы, пока знаний не хватает.
avatar
Что возвращает клиентская система при запросе:
nslookup gal-ex.org
avatar
Oна не может распознать имени.

igor@mars ~ $ nslookup gal-ex.org
Server: 192.168.10.1
Address: 192.168.10.1#53

** server can't find gal-ex.org: NXDOMAIN

Кстати, пробиваюсь к nginx через IP, но он оправляет на /usr/share/nginx/html. Хотя в конфиге написано:

server {
        listen   80;
        root /home/gal-ex/www;


Ещё, имя пользователя в энджинске (nginx.conf) у меня было nginx поменял на www-data, но ничего не произошло.

#user nginx;
user www-data;
avatar
У вас не находит домен и отправляет на дефолтный виртуальный хост…
avatar
Сделал все в точности по инструкции. В итоге, по адресу 192.168.220.3/example/test.php ошибка 404 Not Found

Файлы все на месте, логи правда не пишутся.
nginx/1.6.0
Ubuntu Server 14.04

Даже не знаю в какую сторону копать, перепробовал множество мануалов в Интернете, ни один не рабочии
avatar
Здравствуйте.
Ну если вы все сделали в точности по инструкции, то откуда взялась директория example?
В примере указан адрес example.org, но чтобы зайти по адресу, нужно добавить запись в файл hosts или, чтобы ходить по ip, нужно править дефолтный виртуальный хост, который находится /etc/nginx/conf.d/default
avatar
Подскажите пожалуйста в чём может быть проблема? Сделал всё как в мануале.
на example.org 403 forbidden
на файле test.php 502 ошибка

Вот лог nginx^

2014/08/20 10:58:24 [error] 4954#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client:  188.122.12.11, server: example.org, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "example.org"

2014/08/20 10:58:26 [error] 4954#0: *1 directory index of "/home/example/www/" is forbidden, client: 188.122.12.11, server: example.org, request: "GET / HTTP/1.1", host: "example.org"

avatar
вот список под кем работают nginx и php-fpm:

root      4341  0.0  0.9 141404  4864 ?        Ss   10:17   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data  4342  0.0  0.8 141404  4316 ?        S    10:17   0:00  \_ php-fpm: pool www
www-data  4343  0.0  0.8 141404  4316 ?        S    10:17   0:00  \_ php-fpm: pool www
root      4616  0.0  0.1   4116   632 ?        Ss   10:43   0:00 /usr/sbin/acpid
root      4950  0.0  0.2  78404  1440 ?        Ss   10:58   0:00 nginx: master process /usr/sbin/nginx
www-data  4951  0.0  0.3  78792  1744 ?        S    10:58   0:00  \_ nginx: worker process
www-data  4952  0.0  0.3  78792  1744 ?        S    10:58   0:00  \_ nginx: worker process
www-data  4953  0.0  0.3  78792  1744 ?        S    10:58   0:00  \_ nginx: worker process
www-data  4954  0.0  0.4  78792  2252 ?        S    10:58   0:00  \_ nginx: worker process
avatar
Здравствуйте.
Что показывает команда
netstat -p | grep php-fpm

приложение слушает порт?
avatar
Спасибо за ответ!

Проблема решилась заменой в файле /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
НА
listen = 127.0.0.1:9000
avatar
АААА, обманщик, в мануале про подключение через сокет не написано, значит не все — «как в мануале»…
avatar
ну да, это я уже выгуглил)))
avatar
если вы хотите чтобы работало через сокет то в:
nano /etc/php5/fpm/pool.d/www.conf

нужно добавить запись
listen = /var/run/php5-fpm.sock

А строку которая 127.0.0.1:9000 закомментировать, ну и перезупустить php-fpm
а также поправить настройки виртуального хоста Nginx
avatar
Спасибо!
Консоль в хроме показала выигрыш в 10ms (скрипт просто echo string)
Просто у меня опыта работы в линуксе нет) вот и паникую
avatar
Здравствуйте! Спасибо за статью!
У меня тоже была проблема как у winil, решил ее так же через
listen = 127.0.0.1:9000
, т.к. по дефолту в
/etc/php5/fpm/pool.d/www.conf
значение стояло
listen = /var/run/php5-fpm.sock
.
Не знаю, на что это влияет, но заработало. Теперь другая проблема: файлы читаются только если создавать их через
nano
, подозреваю, что проблема в доступе, но как это исправить? Например, поставил фреймворк, там ничего не читает.
avatar
Чтобы посмотреть права доступа вам поможет команда:
ls -l
avatar
Спасибо за статью начинал настройку здесь Nginx а закончил здесь. Решил перебросить свой сайт на VPS, по сравнению с хостингом обычным земля и небо, на нджинксе сайт открываться стал за 173мс а до этого открывался от 1 200мс до 2 600мс
avatar
крутяк! :)
Есть что добавить? Регистрируйся и оставляй комментарии!