Источник: http://linux-bsd.in.ua/
Nginx(engine x) (читается как Энджин икс) является свободным, открытым исходным кодом, высокопроизводительный сервер HTTP. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией, и низким потреблением ресурсов. В этом учебнике показано, как можно установить Nginx на Ubuntu 9.04 сервер с поддержкой PHP5 (через FastCGI) и поддержкой MySQL.
1 Предварительная заметка
В этом уроке я использую имя хоста server1.example.com с IP адресом 192.168.0.100. Эти параметры могут отличаться от ваших, поэтому вам придется заменить их в случае необходимости.
Я запускаю все шаги в этом учебнике с привилегиями администратора, поэтому убедитесь, что вы вошли в систему как Root:
2 Установка MySQL 5.0
Для установки MySQL, запускаем
Вам будет предложено ввести пароль для пользователя root MySQL - этот пароль действителен для пользователя root@localhost, а также root@server1.example.com, поэтому нам не нужно указывать пароль root MySQL, который мы введём вручную позже:
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
3 Установка Nginx
Nginx доступна в виде пакета для Ubuntu 9.04, который мы можем установить следующим образом:
Затем стартуем Nginx:
Введите IP вашего веб-сервера адрес или имя хоста в браузере (например, http://192.168.0.100), и вы увидите страницу приветствия Nginx:
4 Установка PHP5
Мы можем заставить работать PHP5 в Nginx через FastCGI. К счастью, Ubuntu 9.04 предоставляется FastCGI поддержкой PHP5 пакетов, которые мы устанавливаем (вместе с некоторыми необходимыми модулями PHP5 как php5-MySQL, если вы хотите использовать MySQL из ваших скриптов PHP):
Затем открываем /etc/php5/cgi/php.ini и добовляем линию cgi.fix_pathinfo = 1 в самый конец файла:
cgi.fix_pathinfo = 1
Это нет автономный демон FastCGI пакета для Ubuntu 9.04, поэтому мы используем spawn-fcgiпрограмму Lighttpd. Мы установим Lighttpd следующим образом:
Вы увидите сообщение, что Lighttpd не может запуститься, поскольку порт 80 уже используется:
failed!
Как и предполагалось, потому, что Nginx уже слушает 80 порт. Запускаем:
так что Lighttpd не будет запускаться при запуске.
Мы установили Lighttpd, поскольку нам нужна только одна программа, которая поставляется вместе с пакетом, /usr/bin/spawn-fcgi, который сможем использовать для запуска процессов FastCGI. Взгляните на
, чтобы узнать о ней больше.
Для запуска демона PHP FastCGI слушающий порт 9000 на localhost и запущен в качестве пользователя и группы www-data, мы запустим следующую
команду:
Конечно, вы не хотите, вводить эту команду вручную, во время загрузки системы, для того, чтобы система выполнила команду автоматически в момент загрузки, откройте файл /etc/rc.local...
... и добавте команду в конец файла (перед линией exit):
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
[...]
5 Настройка Nginx
Конфигурируем nginx в файле /etc/nginx/nginx.conf который мы сейчас откроем:
Для начала (это необязательно) увеличиваем число рабочих процессов и устанавливаемkeepalive_timeout до разумного значения:
worker_processes 5;
[...]
keepalive_timeout 2;
[...]
Виртуальные хосты определяются по server {} контейнерах. Vhost умолчанию (default) определяется в файле /etc/nginx/sites-available/default - давайте изменим его следующим образом:
server {
listen 80;
server_name _;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.php index.html index.htm;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex on;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
[...]
server_name _; делает это по умолчанию всеохватывающий vhost (конечно, Вы можете также указать имя хоста, например, www.example.com).
В location / я добавил index.php в строку index. root /var/www/nginx-default; означает, что коневой документ это каталог /var/www/nginx-default.
Важной частью для РНР это location ~ \.php$ {} stanza. Раскомментируйте его, чтобы включить. Пожалуйста, убедитесь, что вы изменили линию fastcgi_param на fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (замените /var/www/nginx-default на ваш корневой каталог) поскольку в противном случае интерпретатор PHP не найдёт PHP скрипт, на который будет обращатся ваш браузер.
Убедитесь в том, что существуют некоторые пробелы между include и fastcgi_params; - в файле по умолчанию это записано как одно слово, которое является ошибкой.
Теперь сохраните файл и перезагрузите Nginx:
Теперь создадим следующий PHP файл в корневом каталоге документов
phpinfo();
?>
Теперь мы откроем этот файл в браузере (например, http://192.168.0.100/info.php):
Как видите, PHP5 работает, и что он работает через FastCGI, как показано на линии Server API. Если вы прокрутите список вниз, вы увидите все модули, которые уже включены в PHP5, включая MySQL модуль: