1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Nginx + Apache - Инсталляция и настрока Nginx и Apache OS: Debian Lenny.

Тема в разделе 'PW Документация', создана пользователем pw-star, 29 мар 2011.

  1. TopicStarter Overlay

    pw-star Пользователи

    Сообщения:
    13
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Надеюсь новичкам пригодиться.
    Так как сам столкнулся с данной проблемой.

    Устанавливаем Nginx из набора пакетов:
    Код:
    #aptitude install nginx
    Получаем версию 0.6.32. Древняя, по сравнению с размещённой на сайте разработчика - 0.8.29. Лучше, конечно, собрать сервер из исходных кодов, что мы когда нибудь и сделаем; а сейчас приступим к конфигурированию пакетной версии.

    Делаем резервные копии затрагиваемых нами конфигурационных файлов:
    Код:
    #cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.dist
    После установки из пакетов Nginx не стартовал, и это к лучшему; учитывая то, что у нас уже установлен настроенный на работу с портом "80" Apache2, запущенный с правами пользователя "www-data", ничего хорошего из запуска не вышло.
    Для начала заведем для Ngnix отдельного пользователя, от имени которого он будет работать в системе:

    Код:
    #groupadd www-nginx
    #useradd --home-dir /var/lib/nginx --shell /bin/false --gid www-nginx www-nginx
    Сразу припоминаем, что доступ в директории web ресурсов пользователей доступ у нас жёстко ограничен. Для того, что бы наш Nginx мог обратится к нужным ресурсам необходимо ввести пользователя "www-nginx" в группы владельцев web ресурсов, которым разрешён доступ на чтение:

    Код:
    #usermod --append --groups ug000 www-nginx
    #usermod --append --groups ug001 www-nginx
    Доработаем конфигурацию Apache2 до той, в которой он будет корректно отрабатывать в связке с прозрачным "прокси" Nginx.

    Для начала установим модуль, предоставляющий Apache2 принимать от "прокси" реальный IP адрес обращающегося клиента, с учётом того, что он замаскирован включённой нами прослойкой из "прозрачного прокси". Суть в том, что модуль позволяет Apache2 использовать заголовок X-Forwarded-for, передаваемый с запросом, в качестве значения заголовка несущего реальный IP удалённого клиента (припоминаем, что IP удалённого клиента в запросе у нас занят IP "прозрачного прокси"):

    Код:
    #aptitude install libapache2-mod-rpaf
    Делаем резервные копии затрагиваемых нами конфигурационных файлов:
    Код:
    #cp /etc/apache2/mods-available/rpaf.conf /etc/apache2/mods-available/rpaf.conf.dist
    Приводим конфигурационный файл "/etc/apache2/mods-available/rpaf.conf" к следующему виду:

    Код:
    RPAFenable On                 # включаем механизм
    RPAFsethostname On            # включаем передачу заголовка X-Host
    RPAFproxy_ips 127.0.0.1       # указываем адрес "front-end"
    Пройдемся по конфигурационным файлам Apache2 и везде, где есть указание на то, какие интерфейсы и порты прослушиваются, укажем "127.0.0.1:8080". Как минимум это конфигурационные файлы "/etc/apache2/ports.conf" и "/etc/apache2/sites-available/*". Например, для файла "/etc/apache2/ports.conf" это будет:

    Код:
    NameVirtualHost 127.0.0.1:8080
    Listen 127.0.0.1:8080
    А для "/etc/apache2/sites-available/u1000.local":

    Код:
    <VirtualHost 127.0.0.1:8080>
    ServerName u000.local
    ServerAlias www.u000.local
    ...
    Для того, что бы в журнальных файлах Apache2 фиксировался реальный IP удалённого клиента, а не IP "прокси", заменяем в описании формата вывода журналируемой информации переменную "%h" на "%{X-Forwarded-For}i"; как, впрочем, и рекомендовано разработчиками Apache2.

    Перезапустим Apache2:
    Код:
    #/etc/init.d/apache2 restart
    1 человеку нравится это.
  2. TopicStarter Overlay

    pw-star Пользователи

    Сообщения:
    13
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Теперь "back-end" не будет отвечать на запросы из-вне и будет заниматься только отработкой тяжеловесных запросов отработки динамики.

    Перейдем к конфигурированию Nginx.

    Общая конфигурация Nginx находится в файле "/etc/nginx/nginx.conf", конфигурации хостов и сайтов описываются в файлах, располагающихся в директориях "" и "", подключаемых с помощью директив "include /etc/nginx/conf.d/*.conf;" и "include /etc/nginx/sites-enabled/*;".

    Изменим ряд директив общего конфигурационного файла "/etc/nginx/nginx.conf":

    Код:
    # указываем пользователя, от чьего имени запускается Nginx
    user www-nginx www-nginx;
    ...
    # количество запускаемых рабочих процессов приравняем к количеству процессорных ядер на нашем сервере
    worker_processes    1;
    ...
    http {
    ....
    # описание параметров регламентирующих работу Nginx с доменными именами, необходимо выставлять величину превышающую количество обслуживаемых доменных имён
    server_names_hash_max_size    512;
    server_names_hash_bucket_size    512;
    ....
    # запрещаем сообщать версию Nginx в ответе клиенту
    server_tokens odd;
    
    # описание параметров работы сжатия трафика и перечень типов файлов подвергаемых сжатию
    gzip  on;
    gzip_comp_level 3;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    ...
    }
  3. TopicStarter Overlay

    pw-star Пользователи

    Сообщения:
    13
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Создаем конфигурационный файл описания механизма "прозрачного проксирования" на "back-end" для последующего включения в конфигурации виртуальных хостов:

    Код:
    #touch /etc/nginx/proxy.conf
    Приводим его к следующему виду:

    Код:
    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;
    Создаем файл конфигурации виртуальных хостов, поддерживаемых нами:

    Код:
    #touch /etc/nginx/sites-available/u000.local
    #touch /etc/nginx/sites-available/u001.local
    
    Приводим их примерно к следующему виду:

    Код:
    server {
    listen eth0.0.local:80;
    server_name u000.local
    www.u000.local;
    # Указываем кодировку отдаваемых страниц
    charset utf-8;
    access_log /var/www/u000/log/nginx.access.log;
    error_log /var/www/u000/log/nginx.error.log;
    # запрещаем отдавать кому бы то ни было файлы .htaccess и .htpasswd
    location ~* /\.ht {
    deny  all;
    }
    # Перенаправление на сервер "back-end"
    location / {
    proxy_pass    http://127.0.0.1:8080/;
    include       /etc/nginx/proxy.conf;
    }
    # Статическое наполнение у нас отдает сам Nginx из директорий ресурсов пользователей в соответствии с указанными типами файлов
    location ~* \.(css|gif|jpeg|jpg|js|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|xpi|zip|tgz|gz|bz2|tar|bin|exe|dll|deb|dmg|iso|img|msi|msp|msm|mid|midi|mp3|mpeg|mpg|mov|flv|asx|asf|wmv|avi)$ {
    root /var/www/u000/www/;
    }
    }
    Казалось бы, зачем прописывать модули перенаправления трафика между "front-end" и "back-end" в каждом описании виртуального хоста, если они однотипны? Можно вынести их в общее описание конфигурации Nginx, но, тогда у нас не будет типового подхода к возможности индивидуальной настройки разделения трафика. Например, не исключено, что для избранных хостов в Apache2 указаны нетипичные расширения для исполняемых файлов и мы хотели бы их не отдавать напрямую клиенту.

    Указываем символическими ссылками Nginx на доступные конфигурации виртуальных хостов для загрузки:
    Код:
    #ln -s /etc/nginx/sites-available/u000 /etc/nginx/sites-enabled/u000
    #ln -s /etc/nginx/sites-available/u001 /etc/nginx/sites-enabled/u001
    И удаляем ссылку на конфигурацию виртуально хоста "по умолчанию":
    Код:
    #rm /etc/nginx/sites-enabled/default
    
    Перезапускаем Nginx:
    
    #/etc/init.d/nginx restart
    По завершению конфигурирования Nginx закрываем от постороннего взгляда директорию конфигурации:

    Код:
    #chown -R root:root /etc/nginx
    #chmod -R o-rwx /etc/nginx


    Ещё никто не заинтересовался публикацией настолько, что бы оставить здесь своё мнение. А мне действительно хотелось бы знать, что вы думаете о ней. Подскажите, если нашли ошибку или просто знаете как сделать мир лучше.

    P.S Уважаемые модераторы если тема создана не в том разделе просьба перенести в нужный.

    Права на данный гайд принадлежат моему коллеги Андрею по его просьбе выложен.
    [/b]
    1 человеку нравится это.
  4. Strong MmoDev Team Пользователи

    Сообщения:
    101
    Лайки:
    28
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    EnergyPW Team
    Как данный Гайд относится к Pw?
  5. TopicStarter Overlay

    pw-star Пользователи

    Сообщения:
    13
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Ну если за вас на сервере все ПО настроили то вам он не к чему.
    А лично я с этим столкнулся и ответов не нашёл.
    + Ко всему прочему когда началась активная DDOS атака на сайт и все хостинги стали от меня открещиваться пришлось повесить и сайт и форум на свой сервер.В результате чего возникла следующая проблема ip всех зарегистрированных пользователей отображалось как ip сервера.
    Так что я уверен что кому то он точно пригодится.
    1 человеку нравится это.
Черновик сохранён Черновик удалён

Поделиться этой страницей