Вы скажете «на vps сервере намного меньше ресурсов чем на хостинговом сервере и как же он справится с моим сайтом?» Вы полностью правы, ресурсов меньше, но у Вас есть возможность полностью управлять программным обеспечением вашего vps. Вы можете оптимизировать его работу под нужды своего сайта. Для примера, можно начать с замены стандартного веб сервера apache на менее ресурсоемкий и быстрый веб сервер nginx.
Nginx - это HTTP-сервер и почтовый прокси-сервер, разработанный Игорем Сисоевым. Официальная веб страница . Nginx очень хорошо зарекомендовал себя при больших нагрузках. Спросите как мне его установить? Все очень просто, используйте инструкции приведенные ниже для установки и конфигурации.
Инструкция по установке и конфигурации Nginx
Мы рекомендуем устанавливать и обновлять nginx из исходных кодов, так как Вы будет уверены, что используете саму последнюю стабильную версию. Исходный код можно скачать с сайта разработчика по
Итак, скачиваем архив nginx-0.7.61.tar.gz (самая последняя версия на момент написания статьи). Так же нам понадобятся библиотеки ZLIB и PCRE, которые можно взять с сайта производителя ( и ).
Распаковываем архивы:
- Код: Выделить всё
#tar -xvzf zlib-1.2.3.tar.gz
#tar -xvzf pcre-7.9.tar.gz
#tar –xvzf nginx-0.7.61.tar.gz
Приступаем к конфигурации и установке nginx:
- Код: Выделить всё
#cd nginx-0.7.61
#./configure --prefix=/usr/local/nginx --with-http_ssl_module
--with-pcre=../pcre-7.9 --with-zlib=../zlib-1.2.3
Весь список конфигурационных опций можно посмотреть вызвав команду:
- Код: Выделить всё
#./configure --help
Итак, если конфигурация прошла без ошибок, то приступаем к компиляции и установке:
- Код: Выделить всё
#make
#make install
Настройка
Приступим к настройке nginx в качестве веб сервера. Итак, все файлы nginx находятся в директории которую Вы задали при компилировании в параметре –-prefix. Переходим в эту директорию и ищем файл nginx.conf. Этот и есть конфигурационный файл веб сервера. Начнем с простого, настроим nginx для Вашего сайта на обслуживание html файлов.
Конфигурационный файл будет выглядеть следующим образом:
- Код: Выделить всё
user apache;
worker_processes 2;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
access_log off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
limit_zone one $binary_remote_addr 10m;
limit_rate 500k;
limit_conn one 15;
client_max_body_size 12m;
client_body_buffer_size 128k;
server {
listen 80;
server_name domain.com www.domain.com;
access_log /var/log/nginx/domain-access.log;
location / {
root /home/username/domains/domain.com;
index index.html index.htm;
}
}
Доменное имя domain.com меняете на Ваше, а также вместо «/home/username/domains/domain.com» указываете полный путь к директории Вашего сайта.
Запуск
В директории /etc/init.d/ создаете файл nginx со следующим содержанием:
- Код: Выделить всё
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
Выставляете права для файла на запуск и чтение и активируете стартовый скрипт с помощью команды:
- Код: Выделить всё
chkconfig nginx on
Теперь стартуем nginx с помощью команды:
- Код: Выделить всё
service nginx start
Если nginx стартовал без ошибок, то вы сможете посмотреть содержимое своего сайта в браузере.
Итак, сайт работает, html страницы отображаются. Теперь заставим работать php файлы.
Настройка php для работы с nginx
Nginx включает в себя поддержку технологии fastcgi для работы с внешними серверами и утилитами. Php тоже поддерживает fastcgi и может быть использован для обработки fastcgi-запросов от nginx.
Итак, для начала нам необходимо установить php с поддержкой fastcgi и запустить его на tcp-порту, на который потом будут переправляться запросы из nginx. Процесс инсталляции может отличаться на разных системах, потому мы опишем процесс сборки php из исходного кода как один из самых распространенных методов.
Последнюю версию php Вы можете взять на . На момент написания статьи последняя стабильная версия php 5.2.10.
Скачиваем и распаковываем архив командой:
- Код: Выделить всё
#tar -xzf php-5.2.10.tar.gz
#cd php-5.2.10
Приступаем к конфигурированию, весь список конфигурационных опций можно посмотреть командой:
- Код: Выделить всё
#./configure –help
Пример конфирурационных параметров:
- Код: Выделить всё
#./configure –prefix=/usr/local/php5 --enable-fastcgi
Компилируем и устанавливаем php, если конфигурация прошла без ошибок:
- Код: Выделить всё
#make
#make install
Когда процесс установки завершится без ошибок, то приступаем к запуску fastcgi php. Если Вы решили не использовать никакого стороннего ПО, то можете запустить php с использованием его встроенного менеджера fastcgi-запросов при помощи следующего скрипта:
- Код: Выделить всё
#!/bin/bash
## ABSOLUTE path to the PHP binary
PHPFCGI="/usr/local/php5/bin/php-cgi "
## tcp-port to bind on
FCGIPORT="8888"
## IP to bind on
FCGIADDR="127.0.0.1"
## number of PHP children to spawn
PHP_FCGI_CHILDREN=5
## number of request before php-process will be restarted
PHP_FCGI_MAX_REQUESTS=1000
# allowed environment variables sperated by spaces
ALLOWED_ENV="ORACLE_HOME PATH USER"
## if this script is run as root switch to the following user
USERID=apache
################## no config below this line
if test x$PHP_FCGI_CHILDREN = x; then
PHP_FCGI_CHILDREN=5
fi
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN"
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS"
ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS"
if test x$UID = x0; then
EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID"
else
EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT"
fi
echo $EX
# copy the allowed environment variables
E=
for i in $ALLOWED_ENV; do
E="$E $i=${!i}"
done
# clean environment and set up a new one
nohup env - $E sh -c "$EX" &> /dev/null &
Cохраняем этот файл и запускаем его. Результатом запуска должны быть несколько процессов php-cgi запущенные на Вашем сервере.
Итак, Ваше сервер php запущен в режиме fastcgi и последнее, что Вам осталось сделать, это изменить конфигурацию nginx таким образом, чтобы он переправлял все запросы к файлам php на определенный tcp-порт, на котором слушает PHP. Для этого может быть использован следующий пример секции location из конфигурационного файла nginx:
- Код: Выделить всё
location ~ .php$ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
Переменную $document_root замените на полный путь к директории Вашего сайта, например:
- Код: Выделить всё
fastcgi_param SCRIPT_FILENAME /home/username/domains/domain.com$fastcgi_script_name;
После изменений в конфигурационном файле nginx, не забудьте его перезапустить. После этого проверьте как работают php файлы на вашем сервере через браузер.

