Nginx (engine x) (читается как энджин икс) - это очень быстрый и легкий проксирующий веб-сервер, имеющий очень мощные возможности. Является свободным, открытым исходным кодом, высокопроизводительный сервер HTTP. Nginx известен своей стабильностью, богатым набором функций, простая конфигурация, и низкое потребление ресурсов. В этом учебнике показано, как можно установить на Nginx Fedora 11 сервер с PHP5 (с помощью FastCGI) и поддержкой MySQL.
Я не даю никакой гарантии, что это будет работать у Вас, но у нас это работает на все 100%!
1. Предварительное примечание
В этом уроке я использую имя хоста server1.root-host.pro с IP адресом 192.168.0.100. Эти параметры могут отличаться для вас, поэтому вам придется заменить их в случае необходимости.
2 Установка MySQL 5
Сначала установите MySQL 5.0 следующим образом:
yum install mysql mysql-server
Затем мы создаем систему запуска ссылки на MySQL (так, что MySQL запускается автоматически при загрузке системы) и запустить сервер MySQL
chkconfig --levels 235 mysqld on
Включен. Теперь убедитесь, что сеть работает.
netstat -tap | grep mysql
Она должна показать что-то вроде этого:
It should show something like this:
[root@server1 ~]# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 1702/mysqld
[root@server1 ~]#
Если это не так, отредактируйте/etc/my.cnf и закомментируйте опцию skip-networking:
vi /etc/my.cnf
[...]
#skip-networking
[...]
и перезапустите сервер MySQL:
/etc/init.d/mysqld restart
Выполнить
mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword
Чтобы установить пароль для пользователя, root (в противном случае любой желающий может получить доступ к базе данных MySQL!).
3. Установка Nginx
Nginx доступен в виде пакета для Fedora 11, который мы можно установить следующим образом:
yum install nginx
Затем мы создаем систему запуска ссылки на Nginx и запускаем его:
chkconfig --levels 235 nginx on
/etc/init.d/nginx start
Введите IP вашего веб-сервера адрес или имя хоста в браузере (например, http://192.168.0.100), и вы должны увидеть страницу приветствия Nginx:
4. Установка PHP5
Мы можем сделать PHP5 работу в Nginx через FastCGI. Там нет автономного демона FastCGI пакета для Fedora, поэтому мы используем пакет из Lighttpd FastCGI (Lighttpd-FastCGI) и установить его вместе с PHP-CLI PHP5 и некоторые модули, как PHP-MySQL, которые нужны, если вы хотите использовать MySQL из PHP сценария:
yum install lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql php-shout php-snmp php-soap php-tidy
Затем откройте /etc/php.ini и добавьте строку cgi.fix_pathinfo = 1 right в самом конце файла:
vi /etc/php.ini
[...]
cgi.fix_pathinfo = 1
Lighttpd FastCGI-пакет поставляется с исполняемым /usr/bin/spawn-fcgi которые мы можем использовать для запуска FastCGI процессов. Взгляните на
spawn-fcgi --help
Для запуска демона PHP FastCGI на порту 9000 на локальной системе и работает в качестве пользователя и группы Nginx, мы запустим следующую команду:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid
Конечно, вы не хотите, чтобы ввести эту команду вручную, когда вы загрузите систему, с тем чтобы система выполняет команду автоматически в момент загрузки, откройте файл /etc/rc.local...
vi /etc/rc.local
... и добавить команду в конец файла:
[...]
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid
5. Настройка Nginx
Nginx конфигурации в /etc/nginx/nginx.conf который мы открываем сейчас:
vi /etc/nginx/nginx.conf
Конфигурацию легко понять. (Больше об этом Вы можете узнать здесь: http://wiki.codemongers.com/NginxFullExample и здесь: http://wiki.codemongers.com/NginxFullExample2)
Первая (это не обязательно), вы можете увеличить количество рабочих процессов и установить keepalive_timeout до разумного значения:
[...]
worker_processes 5;
[...]
keepalive_timeout 2;
[...]
Виртуальных хостов определяется по серверу {} контейнерах. Давайте изменим умолчанию Vhost следующим образом:
[...]
server {
listen 80;
server_name _;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 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$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$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 / part, я добавил index.php индекса строки. root /usr/share/nginx/html; означает, что документ корень директории /usr/share/nginx/html.
Важной частью для PHP является location ~ \.php$ {} stanza. Раскомментируйте, чтобы включить его. Сменить root line to the web site's dosument root (e.g. root /usr/share/nginx/html;). Пожалуйста, убедитесь, что вы измените fastcgi_param линию fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; потому что в противном случае интерпретатор PHP не найдете сценарии PHP, в Вашем браузере.
Теперь сохраните файл и перезагрузите Nginx:
/etc/init.d/nginx stop
/etc/init.d/nginx start
(Я не мог использовать /etc/init.d/nginx restart потому что это остановить Nginx, но не смог запустить его - не знаю, почему ...)
Теперь создадим следующий PHP файл в корневом каталоге document root /usr/share/nginx/html...
vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
Теперь мы называем этот файл в браузере (например, http://192.168.0.100/info.php):
Как видите, PHP5 работает, и что он работает через FastCGI, как показано в строке Server API. Если вы опуститесь дальше вниз рисунка, вы увидите все модули, которые уже включены в PHP5, включая MySQL модуля: