Вход RSS Форум по заработку на сайтах
Сапа
Продажа ссылок. посещаемость не важна. Сапа- наше все!

Профит
Для посещаемых сайтов от 500 хостов.

GoGetLinks
Для сайтов с параметрами. Очень высокий заработок!
Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

 
 
 
 
 
Прокручивать шапку
 

Пользуетесь ли Вы биржами фриланса?

Смотреть результаты

Загрузка ... Загрузка ...
Архив голосований
 
 
 
 
 

Установка nginx на Linux Gentoo

02.11.2010 от YBV

nginx — это программа для *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

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

Дополнение 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

4 комментария на запись “Установка nginx на Linux Gentoo”
  1. AzaLeo:

    Привет! Спасибо за статью — очень все подробно и доступно написал. Давно такое искал. Интересует один вопрос:

    Отрывок из установки:

    #здесь необходимо прописать путь на вашем сервере до файлов пользователя, которые будут кешироваться
    root /home/user/site.ru/http;

    Здесь необходимо просто указать путь к общим файлам, а веб-сервер сам найдет статические, или явно указать директорию с файлами для кэширования? Спасибо.

    • YBV:

      это папка с сайтом/сайтами, которые кешируются (расширения кешируемых файлов указаны в директиве location)
      обычно сайты расположены в /home/user_vasya/site1.ru/http /home/user_vasya/site2.ru/http и т.д. (конкретный путь зависит от версии линукса)
      если предполагается кешировать все сайты, то в вышеуказанном случае надо прописать
      root /home/user;

      P.S. по nginx это еще не все, будет еще дополнение по ротации логов

  2. AzaLeo:

    Спасибо за ответ, разобрался.

    Тут у меня возникла проблема при запуске 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 и дать соответствующие команды.»

    Искал решение по этой проблеме, но увы. Не подскажешь, в чем может быть проблема?

    • YBV:

      дистрибутив Gentoo?
      перед тем, как мутить из панели загрузку, надо вручную чтоб он запускался нормально
      /usr/local/nginx/logs/nginx.pid — этот файл с номером процесса, по которому он должен убиваться при рестарте, в других дистрибутивах линукса может оказаться в другом месте

Комментировать

(required)

(required)


CAPTCHA
*