Установка nginx на ubuntu server с битрикс сайтом

10438  |  2

nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как:  Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике, Netcraft nginx обслуживал или проксировал 13.54% самых нагруженных сайтов в мае 2013 года.

Говоря по-простому, nginx это веб сервер, который менее требователен к ресурсам машины. Имеет смысл использовать на слабых серверах либо на высоконагруженных проектах. Наиболее оптимальный вариант конфигурации, по моему мнению, это работа nginx в связке с apache. В таком варианте nginx выступает прослойкой между пользователем и apache, отдавая всю статику и обработанные apache запросы. Таким образом ускоряется ответ на запрос и освобождаются ресурсы занятые apache, так как ему нужно будет обрабатывать только запросы nginx-а.

Хронология моего сайта

  • Начало 2012 - сайт полностью перенесен с DLE на битрикс. До этого момента работал на хостинге webhost1.ru - достаточно неплохой, недорогой но под битрикс не оптимизированный- выдавал 2 балла производительности из 30-ти по эталону. Потому приобретен хостинг на pagemaster- на котором сайт проработал до января 2013.
  • Начало 2013 - pagemaster скуксился и начал халтурить. Сайт подвисал, долго открывался и вообще тупил по черному. Кстати это происходит до сих пор с сайтами моих клиентов, которым я когда-то рекомендовал данный хостинг как лучший для Битрикс (во всяком случае он таким и был). Потому потихоньку переношу их  на более удобные варианты. Для себя приобрел виртуальный сервер в Германии и настроил простой WEB-сервер с небольшой доводкой под Битрикс.
  • Май 2013 - приобрел выделенный сервер в Германии.  Полностью перенес сайт и доустановил memcached на сервер, в остальном все тот же простой WEB сервер с apache.
  • Настоящий момент. Так как многих клиентов буду переносить на обслуживание на собственном сервере, решил вкорячить nginx, дабы быть готовым к нагрузкам и не делать потом в похыхах. Об этом сейчас и расскажу.

    Установка nginx на работающий сервер с apache.

    Итак имеем работающий WEB-сервер: собранный вот по этим инсрукциям:

    Нам необходимо ко всему этому добру прикрутить nginx, таким образом чтобы он отдавал всю статику и делал запросы к apache для получения динамики.

    Во первых устанавливаем nginx командой:

    sudo aptitude install nginx

    Далее редактируем все файлы виртуальных хостов созданных в apache, собственно меняем прослушиваемый порт с 80 на 81. Пример одного из файлов:

    <VirtualHost *:81>
    ServerName адрес_сайта
    ServerAdmin ящик_админа
    DocumentRoot /путь_к_файлам_сайта
    <Directory/путь_к_файлам_сайта>
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/mysitesdocs/polimer_m>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    </Directory>
    ErrorLog /var/log/apache2/error.log
    LogLevel debug
    CustomLog /var/log/apache2/access.log combined
    </VirtualHost>

    Далее редактируем файл nano /etc/apache2/ports.conf

    NameVirtualHost *:81
    Listen 81

    Устанавливаем apache2-mod-rpaf командой

    aptitude install libapache2-mod-rpaf

    Открываем файл конфигурации nginx и настраивам под себя (рекомендации и подсказки внутри): nano /etc/nginx/nginx.conf

    user www-data;
    worker_processes 2;
    #выставляем по колличеству ядер процессора
    timer_resolution 100ms;
    error_log /var/log/nginx/error.log;
    pid /var/run/nginx.pid;

    events {
    worker_connections 1024;
    }

    http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 64;
    access_log /var/log/nginx/access.log;

    sendfile on;
    #tcp_nopush on;

    #keepalive_timeout 0;
    keepalive_timeout 65;
    tcp_nodelay on;

    gzip on;
    gzip_proxied any;
    gzip_min_length 1100;
    gzip_http_version 1.0;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    #рекомендую оставить 5, больше бестолково, меньше не эффективно
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    }

    Создаем виртуальный хост в nginx nano /etc/nginx/sites-enabled/домен_сайта

    server {
    listen 80;
    server_name домен_сайта;
    access_log /var/log/nginx.access_log;
    location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
    root /путь_к_сайту/;
    index index.html index.php;
    access_log off;
    expires 30d;
    }
    location ~ /\.ht {
    deny all;
    }
    location / {
    proxy_pass http://127.0.0.1:81/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-for $remote_addr;
    proxy_set_header Host $host;
    proxy_connect_timeout 60;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_redirect off;
    proxy_set_header Connection close;
    proxy_pass_header Content-Type;
    proxy_pass_header Content-Disposition;
    proxy_pass_header Content-Length;
    }

    Перезапускаем nginx /etc/init.d/nginx restart
    и апач sudo /etc/init.d/apache2 reload

    Изменение прав на папки и файлы сайта(ов)

    Для безопасности имеет смысл выставить права на файлы всех сайтов равными 644, а на папки 755. При этом владельцем должен стать пользователь от имени которого работает apache, а именно www-data. Предположим что вы положили все сайты в папку /var/www - тогда необходимо выполнить следующие команды

    find /var/www -type f -exec chmod 644 {} \;

    find /var/www -type d -exec chmod 755 {} \;

    chown -R www-data:www-data /var/www

    Расскажи друзьям-то:
    Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей
    Зарегистрироваться Войти Напомнить пароль
    Или войти через социальную сеть:
    Егор
    Отличные уроки!!! Вам огромное спасибо за проделанную работу! Однако после установки nginx перестал работать phpmyadmin при обращении по IP_АДРЕС/phpmyadmin выводится пустая страница. Как это можно решить?
    Михаил Базаров
    Цитата
    Егор пишет:
    Отличные уроки!!! Вам огромное спасибо за проделанную работу! Однако после установки nginx перестал работать phpmyadmin при обращении по IP_АДРЕС/phpmyadmin выводится пустая страница. Как это можно решить?
    Попробуйте по адресу P_АДРЕС:81/phpmyadmin

    © 2011—2016 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.
    Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

    Информация размещенная на сайте, не является публичной офертой. Политика конфеденциальности
    x
    Как к Вам обращаться? *
    Ваша электронная почта: *
    Доп. материалы (логотип, тех. задание):
     
    Обзор
    Текст сообщения: