Установка nginx на Linux Gentoo
02.11.2010 от YBVnginx — это программа для *unix операционных систем, поволяющая ускорить быстродействие вашего сайта при работе с пользователями. Стандартно на хостингах используется для обработки HTTP страниц веб сервер Apache, но на слабых системах или при высокой посещаемости сайта возникает высокая нагрузка на железо сервера от апача и страницы у пользователей начинают грузиться по 10-20 секунд, а то и более.
nginx полностью может заменить апач, но настройка его в этом случае сложна и оправдана только в тех случаях, когда уже больше ничего сделать нельзя. Гораздо чаще nginx применяется в схеме frontend-backend в качестве кеширующей прослойки для статической информации. Т.е. изначально запрос от пользователя на вебстраницу поступает в nginx, он кеширует картинки, css, яваскрипты, а за остальной информацией обращается к апачу.
Все выше- и нижесказанное имеет значение для VDS и выделенных серверов. Если у вас виртуальный хостинг, то поставить nginx вам не удастся. Все действия произодятся под учетной записью root.
1)Получаем и устанавливаем nginx себе на локаль.
1.1)Можно через встроенный инсталлятор:
emerge install nginx
1.2)Можно скачать вручную с сайта автора последнюю версию:
wget http://sysoev.ru/nginx/nginx-0.8.53.tar.gz
tar xzf nginx-*.tar.gz
cd nginx-*/
./configure
make
make install
С параметрами по умолчанию nginx ставится в папку /usr/local/nginx/
2)Теперь необходимо заменить содержимое конфигурационного файла /usr/local/nginx/conf/nginx.conf следующим:
#здесь необходимо прописать того юзера, которому принадлежат права в системе на файлы сайтов, иначе nginx может отдать по ним 403 ошибку
user www;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] $status ‘
‘»$request» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log notice;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server {
listen 80 default;
#здесь необходимо прописать все ваши сайты, которые собираетесь кешировать
server_name site.ru www.site.ru;
access_log /var/log/nginx/access.log main;
# Main location
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# Static files location
location ~*^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$
{
#здесь необходимо прописать путь на вашем сервере до файлов пользователя, которые будут кешироваться
root /home/user/site.ru/http;
}
}
}
Сложность установки nginx, которая мало где указывается, в том, чтобы разделить порты между ним и апачем. Ведь по умолчанию Apache слушает 80 порт и попытка запустить nginx без тюнинга портов закончится неудачей.
В нашем конфиге nginx слушает 80 порт, а все некешируемые запросы отдает на порт 8080, на котором должен находиться апач.
3)Настраиваем апач на порт 8080. В случае с Gentoo конфигурационный файл апача располагается по адресу /etc/apache2/httpd.conf
Он может содержать инструкции по включению других файлов, поэтому просмотрите его и другие включаемые файлы внимательно на предмет нахождения там указаний на 80 порт:
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
все эти 80 надо заменить на 8080:
Listen 8080
NameVirtualHost *:8080
<VirtualHost *:8080>
Делаем рестарт апача для принятия изменений в конфиге: /etc/init.d/apache2 restart
4)Настраиваем автозапуск nginx. Для этого в папку /etc/init.d/ добавляем файл nginx следующего содержания:
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case «$1» in
start)
echo -n «Starting $DESC: »
start-stop-daemon —start —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
stop)
echo -n «Stopping $DESC: »
start-stop-daemon —stop —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
echo «$NAME.»
;;
restart|force-reload)
echo -n «Restarting $DESC: »
start-stop-daemon —stop —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
sleep 1
start-stop-daemon —start —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
reload)
echo -n «Reloading $DESC configuration: »
start-stop-daemon —stop —signal HUP —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
echo «$NAME.»
;;
*)
N=/etc/init.d/$NAME
echo «Usage: $N {start|stop|restart|force-reload}» >&2
exit 1
;;
esac
exit 0
и стартуем /etc/init.d/nginx start
Если никаких ошибок при старте не было, значит все работает, и можно наслаждаться шустрой работой своего сайта.
Дополнение 1.
После установки желательно произвести небольшую доработку по отображению реальных IP в логах апача. Без этой доработки в логах для всех пользователей будет отображаться 127.0.0.1
Ставим mod_rpaf для апача
emerge -v mod_rpaf
в файле /etc/conf.d/apache2 к параметру APACHE_OPTS добавляем -D RPAF
в файле /etc/apache2/modules.d/mod_rpaf.conf добавляем/меняем
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
И не забываем рестартануть апач /etc/init.d/apache2 restart
Дополнение 2.
Обязательно надо обрабатывать логи nginx, иначе они разрастутся до ужасающих размеров и заполнят все дисковое пространство сервера. Классический способ — logrotate.
Если logrotate не установлен, то:
emerge -av logrotate
Создаем файл /etc/logrotate.d/nginx следующего содержания:
/var/log/nginx/*log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 2> /dev/null || true
endscript
}
Это собственно и все, особенно хочется только отметить строчку:
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 2> /dev/null || true
После ротации необходимо рестартануть nginx, чтобы он создал новый файл логов, и в файле /usr/local/nginx/logs/nginx.pid находится id процесса, по которому он убивается. Путь к файлу прописан в nginx.conf
Привет! Спасибо за статью — очень все подробно и доступно написал. Давно такое искал. Интересует один вопрос:
Отрывок из установки:
#здесь необходимо прописать путь на вашем сервере до файлов пользователя, которые будут кешироваться
root /home/user/site.ru/http;
Здесь необходимо просто указать путь к общим файлам, а веб-сервер сам найдет статические, или явно указать директорию с файлами для кэширования? Спасибо.
это папка с сайтом/сайтами, которые кешируются (расширения кешируемых файлов указаны в директиве location)
обычно сайты расположены в /home/user_vasya/site1.ru/http /home/user_vasya/site2.ru/http и т.д. (конкретный путь зависит от версии линукса)
если предполагается кешировать все сайты, то в вышеуказанном случае надо прописать
root /home/user;
P.S. по nginx это еще не все, будет еще дополнение по ротации логов
Спасибо за ответ, разобрался.
Тут у меня возникла проблема при запуске nginx. Пишет:
/etc/init.d/nginx: line 52: stop: command not found
/etc/init.d/nginx: line 52: restart: command not found
/etc/init.d/nginx: line 52: force-reload}”: command not found
На хостинге есть собственная панель. Там nginx прописался. Подсказали, что можно добавить в автозагрузки командой eselect rc start
Пробую запускать из панели, пишет: «Если вы запускаете службу первый раз — это нормально, так как большинство служб требуют начальной конфигурации. Для этого необходимо войти на сервер по SSH и дать соответствующие команды.»
Искал решение по этой проблеме, но увы. Не подскажешь, в чем может быть проблема?
дистрибутив Gentoo?
перед тем, как мутить из панели загрузку, надо вручную чтоб он запускался нормально
/usr/local/nginx/logs/nginx.pid — этот файл с номером процесса, по которому он должен убиваться при рестарте, в других дистрибутивах линукса может оказаться в другом месте