Nginx – Двигатель интернета будущего

 | 00.37

Большинство начинающих девелоперов в СНГ начинают с платформы Denwer (denwer.ru). Она действительно проста в установке и использовании, состоит из Apache + Php + MySQL, однако достаточно громоздкая (дистрибутив весит 80МБ). Его просто обновлять, но для крупных проектов он не годится, да и разработчики платформы этого не рекомендуют.

Минус первый: работает только Windows (иногда не запускается на новых сборках этой ОС), следовательно, при падении системы (а это очень реально) падает и веб-сервер

Минус второй: так как это система разработки с «расширенными правами», дыр в ней тоже достаточно. Remview и прочие шеллы загрузить хакеру довольно просто, иногда и антивирус не спасает.

Минус третий: Для обновления компонентов – нужно обновлять всю систему, в т.ч. и базы данных MySQL с переливом из старой СУБД в новую.

Минус четвертый: деятельность Денвера ограничивается в памяти виртуальным диском, за исключением дыр в php. То есть разработчик с внешними носителями, нодами и т.д. работать не может, а у продвинутого хакера возможность есть.

С другой стороны плюс Денвера по отношению к другим – много проектов в одном сервере. В обычном Apache придется создавать несколько процессов php.exe и php-cgi.exe.

Ну, хватит опускать Денвер, это средство разработки, почти фреймворк. Возьмемся на проект, который является серверной основой Яндекса и Вконтакте. Это – nginx.

[b]Установка на Windows.[/b]

Идем на nginx.ru и берем последнюю стабильную версию в бинарниках, я использовал 1.2.4.

Распаковываем архив в папку, например D:/nginx

В принципе можно работать, но в нем изначально нет PHP. Это не есть хорошо! Скачиваем бинарники и для PHP с официального сайта, распаковываем на D:/nginx/php

Теперь настроим nginx, через файл D:/nginx/conf/nginx.conf. Ищем секцию server:

server {

listen 8300; # порт который будет слушать nginx, для html надо 80, но я тестировал на 8300.

server_name localhost; # имя сервера, можно использовать другой, однако придется его прописать в hosts.

charset win-1251; # кодировка, кому нужно utf-8, пишите utf-8:)

#access_log logs/host.access.log main; #отключаем логи.

location / { # описываем местоположение в домене, / указывает на корень домена.

index index.php index.htm; # страница по умолчанию, индекс.

autoindex on; # создаем список файлов, если нет индекса в каталоге

}

error_page 404 /404.html; # страничка с позором для клиента и админа:)

error_page 500 502 503 504 /50x.html; # описываем канонической ссылкой нахождение ошибки сервера. В принципе стоит закомментировать, чтобы понять, что творится с сервером

location = /50x.html {

root html;

}

# Можно сформировать проксирование Апачевского сервера. Но нам это не нужно, PHP у нас свой.

# 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:8301

location ~ .php$ { # если забыли, php сервер мы положили в папку с nginx

root html; # квартира где скрипты с деньгами и php лежат. 🙂 Можно использовать адреса вида D:Webserwershomelocalhosttools

fastcgi_pass 127.0.0.1:8301; # порт по которому nginx будет общаться с php

fastcgi_index index.php; # стартовая страница на php.

fastcgi_param SCRIPT_FILENAME html/$fastcgi_script_name; # формируется аналогично руту.

include fastcgi_params;

}

# можно забанить использование htaccess от Apache

# deny access to .htaccess files, if Apache’s document root

# concurs with nginx’s one

#

#location ~ /.ht {

# deny all;

#}

}

Дальше идет аналог Denwer’овского custom host. Грубо говоря – сервер с alias.

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

}

Далее скачиваем hidec.exe и кидаем его в папку с nginx. Создаем ярлык для старта и стопа сервера:

Start.bat:

hidec nginx

hidec phpphp-cgi.exe -b 127.0.0.1:8301 -c D:nginxphp.ini

Stop.bat:

taskkill /f /IM nginx.exe

taskkill /f /IM php-cgi.exe

exit

В Windows, к сожалению, без создания службы mysql обойтись нельзя, поэтому полноценный pendrive сервер из nginx получить не удастся.

Подробно о установке — http://translate.google.ru/translate?sl=en&tl=ru&js=n&prev=_t&hl=ru&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Feksith.wordpress.com%2F2010%2F11%2F07%2Fnginx-php-mysql-windows%2F

[b]Ubuntu[/b]

В плюс ко всему миграция на linux становится еще проще:

Sudo su

Добавляем репозитории:

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

apt-key add nginx_signing.key

Обновляем список пакетов, ставим nginx и php5:

aptitude update

aptitude install nginx

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 и сразу поставим MySQL:

aptitude install mysql-server mysql-client mysql-common

aptitude install memcached php5-memcached

/etc/init.d/php5-fpm restart

Далее можно создать виртуальный хост, через файл /etc/nginx/conf.d/server_name.conf, однако мы пойдем другим путем.

nano /etc/nginx/nginx.conf

Вместо:

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

Вставляем программный, код описанный в разделе с Windows версией (см. выше). Однако помните про права пользователей и группы.

В итоге мы получили сконфигурированный HTTP+PHP кроссплатформенный сервер. Удачного кодинга!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *