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

10818  |  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—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.
    Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

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


    Нажимая на кнопку "Отправить", Вы соглашаетесь на обработку Ваших персональных данных согласно политике конфеденциальности. Ознакомиться с которой, можно в нижнем правом углу сайта