Nginx(engine x) (читается как Энджин икс) является свободным, открытым исходным кодом, высокопроизводительный сервер HTTP. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией, и низким потреблением ресурсов. В этом учебнике показано, как можно установить Nginx на Ubuntu 9.04 сервер с поддержкой PHP5 (через FastCGI) и поддержкой MySQL.
1 Предварительная заметка
В этом уроке я использую имя хоста
server1.example.com с IP адресом 192.168.0.100. Эти параметры могут отличаться от ваших, поэтому вам придется заменить их в случае необходимости.
Я запускаю все шаги в этом учебнике с привилегиями администратора, поэтому убедитесь, что вы вошли в систему как Root:
sudo su
2 Установка MySQL 5.0 Для установки MySQL, запускаем
aptitude install mysql-server mysql-client
Вам будет предложено ввести пароль для пользователя root MySQL - этот пароль действителен для пользователя root@localhost, а также root@server1.example.com, поэтому нам не нужно указывать пароль root MySQL, который мы введём вручную позже:
New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
3 Установка Nginx Nginx доступна в виде пакета для Ubuntu 9.04, который мы можем установить следующим образом:
aptitude install nginx
Затем стартуем Nginx:
/etc/init.d/nginx start
Введите IP вашего веб-сервера адрес или имя хоста в браузере (например,
http://192.168.0.100), и вы увидите страницу приветствия Nginx:
4 Установка PHP5
Мы можем PHP5 заставить работать в Nginx через FastCGI. К счастью, Ubuntu 9.04 предоставляется FastCGI поддержкой PHP5 пакетов, которые мы устанавливаем (вместе с некоторыми необходимыми модулями PHP5 как
php5-MySQL, если вы хотите использовать MySQL из ваших скриптов PHP):
aptitude install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Затем открываем
/etc/php5/cgi/php.ini и добовляем линию
cgi.fix_pathinfo = 1 в самый конец файла:
vi /etc/php5/cgi/php.ini
[...]
cgi.fix_pathinfo = 1
FastCGI нет автономный демон для Ubuntu 9.04, поэтому мы используем
spawn-fcgi программу Lighttpd. Установим Lighttpd следующим образом:
aptitude install lighttpd
Вы увидите сообщение, что Lighttpd не может запуститься, поскольку порт 80 уже используется:
Starting web server: lighttpd 2009-04-30 15:51:50: (network.c.300) can't bind to port: 80 Address already in use
failed!
Как и предполагалось, потому, что Nginx уже слушает 80 порт. Запускаем:
update-rc.d -f lighttpd remove
так что Lighttpd не будет запускаться при запуске.
Мы установили Lighttpd, поскольку нам нужна только одна программа, которая поставляется вместе с пакетом, /usr/bin/spawn-fcgi, который сможем использовать для запуска процессов FastCGI. Взгляните на
spawn-fcgi --help
, чтобы узнать о ней больше.
Для запуска демона PHP FastCGI слушающий порт 9000 на localhost и запущен в качестве пользователя и группы www-data, мы запустим следующую
команду:
/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
Конечно, вы не хотите, вводить эту команду вручную, во время загрузки системы, для того, чтобы система выполнила команду автоматически в момент загрузки, откройте файл /etc/rc.local...
vi /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 который мы сейчас откроем:
vi /etc/nginx/nginx.conf
Для начала (это необязательно) увеличиваем число рабочих процессов и устанавливаем
keepalive_timeout до разумного значения:
[...]
worker_processes 5;
[...]
keepalive_timeout 2;
[...]
Виртуальные хосты определяются по
server {} контейнерах. Vhost по умолчанию (default) определяется в файле /etc/nginx/sites-available/default - давайте изменим его следующим образом:
vi /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:
/etc/init.d/nginx restart
Теперь создадим следующий PHP файл в корневом каталоге документов
vi /var/www/nginx-default/info.php
<?php
phpinfo();
?>
Теперь мы откроем этот файл в браузере (например,
http://192.168.0.100/info.php):
Как видите, PHP5 работает, и что он работает через FastCGI, как показано на линии
Server API. Если вы прокрутите список вниз, вы увидите все модули, которые уже включены в PHP5, включая MySQL модуль:
Источник