Московский государственный институт электроники и математики (технический университет)





Скачать 131.39 Kb.
НазваниеМосковский государственный институт электроники и математики (технический университет)
Дата публикации17.12.2014
Размер131.39 Kb.
ТипКурсовая
100-bal.ru > Литература > Курсовая
Министерство образования и науки Российской Федерации

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ

ЭЛЕКТРОНИКИ И МАТЕМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)




УТВЕРЖДАЮ

________________ П. Орлов

«___»____________ ______ г.


КУРСОВАЯ РАБОТА

Организация веб-сервера с использованием Apache и nginx

Руководитель темы

_________________ П. Орлов

подпись, дата

Исполнитель

_________________ И. Савин

подпись, дата

Москва 2009

Оглавление


Цели работы 3

Введение 4

Общие сведения о веб-серверах 4

Основные проблемы веб-серверов 4

Frontend и backend 4

Обзор веб-серверов и конфигураций их установки 5

Настройка выбранной конфигурации 6

Распределение функций между Apache и nginx 6

Установка и первичная настройка nginx 7

Установка 7

Основные параметры 7

Группа настроек events 8

Группа настроек http 8

Наиболее простая конфигурация (листинг) 11

Установка и первичная настройка Apache 13

Настройки безопасности nginx 13

Дополнительная настройка ngnix 13

Автоматические добавление поддоменов 13

Дополнительная настройка Apache 15

Итоги работы 16

Список литературы 17


Цели работы


Целями данной работы являются:

  • Обзор наиболее часто используемых веб-серверов

  • Описание способов повышающих эффективность работы веб-сервера

  • Установка и настройка конфигурации веб-сервера на основе Apache и nginx


Введение

Общие сведения о веб-серверах


Сервер — один из основных компонентов модели клиент-сервер, программный компонент вычислительной системы, выполняющий сервисные функции по запросу клиента, предоставляя ему доступ к определённым ресурсам.

Веб-сервер — это сервер, принимающий HTTP-запросы от клиентов(в большинстве случаев браузеры) и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными.

Кроме основной функции передачи ответа на HTTP-запросы веб-серверы как правило имеют ряд других функций:

  • ведение журнала обращений пользователей к ресурсам,

  • аутентификация пользователей,

  • поддержка динамически генерируемых страниц,

  • поддержка HTTPS для защищённых соединений с клиентами.

Основные проблемы веб-серверов


Наиболее важными проблемами веб-серверов являются: быстродействие и безопасность. На быстродействие сервера влияет его архитектура, количество и частота выполнения им функций. Безопасность сервера сводится к ограничению доступа к управлению сервером. Также эти две проблемы пересекаются при решении задачи защиты сервера от DDoS-атак, где главной целью является не допустить перегрузки сервера и следовательно его зависания.

Frontend и backend


Наиболее распространенная модель в архитектуре клиент-сервер, позволяющая значительно снизить нагрузку на сервер и предотвратить ряд проблем с безопасность.

Суть модели заключается в разделении серверной части на две: принимающую запросы (Frontend) и обрабатывающую (backend). Также между этими частями разделяются и задачи сервера вцелом: основной задачей принимающего является увеличение быстродействия и предотвращение DDoS-атак (однако это не избавляет Frontend от задач безопасности полностью), обрабатывающий сервер занимается генерацией HTTP-ответов с последующей передачей их через Frontend клиенту. Backend имеет связь только с Frontend и не имеет прямого доступа к интернету, что обеспечивает его безопасность.

Frontend сервер ставят простым и быстрым, не нагружая его дополнительными функциями такими, как поддержка динамически генерируемых страниц. Сервер обеспечивает функции файлового, предоставляя доступ только к статическим данным. В случае запроса динамических данных (php, asp и другие скрипты серверных языков) Frontend перенаправляет запрос к backend серверу.

Обзор веб-серверов и конфигураций их установки


Хотя простой веб-сервер можно написать самостоятельно и займет это немного времени, существует около десятка готовых решений, которые имеют большой функционал и отказоустойчивость. Почти все популярные современные веб-серверы являются бесплатными opensource-продуктами, что позволяет их дорабатывать и менять в соответствии со своими предпочтениями.

Apache HTTP Server – самый популярный сервер, на данный момент чуть менее половины(49%) всех веб-серверов работает на нем. Соответственно отличается крайне широким функционалом, наибольшим количеством дополнительных модулей. Недостатком сервера является относительно низкая скорость работы.

Internet Information Server (IIS) – единственный небесплатный веб-сервер с закрытым кодом. Поставляется в комплекте с операционными системами семейства Windows NT. Обеспечивает работу с основными службами и протоколами интернета.

Lighttpd – один из вариантов для сильно нагруженных систем. Реализован наиболее популярный набор функций. Однако, из-за работы не со стандартными системными интерфейсами, а непосредственно с ядром ОС имеет некоторые трудности в настройке.

Nginx – отечественный свободный сервер. Отличается высокой скоростью и гибкой, простой настройкой.

Ко всем серверам существует вся необходимая документация, в том числе на русском (только для lighttpd неполная).

Достаточно часто используется комбинация серверов. Apache ставят backend-сервером и обращаются к нему только в случае необходимости(генерации динамического контента, работы модулей, не реализованных в других серверах), а с клиентом общается lighttpd или nginx, отличающиеся быстродействием. В этой работе будет рассмотрена конфигурация, где frontend-сервером будет nginx.

Настройка выбранной конфигурации

Распределение функций между Apache и nginx


Apache – наиболее популярный HTTP-сервер благодаря его функционалу. К Apache существует большое количество модулей, которых нет в других серверах, поэтому для наиболее гибкой настройки веб-сервера строятся именно на Apahce.

Nginx – веб-сервер с упором на быстродействие. Он не поддерживает такого множества модулей, как апач, лишь в качестве эксперимента на нем можно включить обработку Perl (модуль ngx_http_perl_module). Однако, наиболее популярное использование nginx – Frontend сервер обработки запросов на статические данные и перенаправление запросов на динамические на backend сервер.

Nginx будет принимать запросы от клиета (браузера пользователя) на 80 порт, который является стандартным для HTTP-запросов. Затем, в случае, если запрошены динамические данные, то перенаправлять запрос по 88 порту к Apache (можно использовать любой другой свободный порт).

Схема работы конфигурации серверов Apache и nginx:

HTTP-клиент
(браузер пользователя)

Nginx
80 порт

Файлы
(статические данные сайта)

Apache
88 порт. Генерация динамических данных (РНР, Perl…)

Статические данные

Динамические данные

Установка и первичная настройка nginx

Установка


Установка производится стандартными средствами выбранной операционной системы.

Установка на FreeBSD:

cd /usr/ports/www/nginx
make config
make install clean

Установка в Debian-подобных системах:

apt-get install nginx

Установка под Windows (поместить архив в корень диска):

cd c:\

unzip nginx-0.7.57.zip

cd nginx-0.7.57

start nginx

Основные параметры


После установки необходимо настроить файл конфигурации. В нем можно полностью настроить поведение сервера, здесь же и связь с Apache, отделение статических данных от динамических.

В FreeBSD файл конфигурации находится:

/usr/local/etc/nginx/nginx.conf

В Debian-подобных системах:

/etc/nginx/nginx.conf

Рассмотрим основные параметры этого файла:

Прежде всего необходимо указать пользователя, через которого будут осуществляться все операции на сервере. По умолчанию это www, лучше так и оставить:

user www www;

Затем нужно задать количество рабочих процессов:

worker_processes 2;

Как правильно определить нужное количество процессов? Если у вас совсем небольшой сайт, который полностью может поместиться в оперативную память сервера и обойтись без подключения к диску, то лучше ставить это значение 1.

Если часто необходимо подключаться к диску, то лучшим вариантом будет поставить это значение в районе 5-10, тогда можно будет обрабатывать соединения процессами, не заблокированными на диске.

Для корректной работы необходимо придерживаться правила, что на одном рабочем процессе должно быть не более 300 соединений. Также более 20 стоит ставить, если вы используете стандартные методы соединений poll/select (об этом ниже).

Максимальное количество рабочих процессов 1024.
Далее можно задать адрес для отчетов об ошибках:

error_log /var/log/nginx.error_log info;

Группа настроек events


В этой группе настроек указаны параметры соединений.

Можно задать максимальное количество рабочих соединений (помните о связи с рабочими процессами).

worker_connections 1024;

Далее задается важный параметр – метод обработки соединений. Существует несколько методов, рассчитанных на различные операционные системы и стандартные методы. Крайне рекомендуется не выбирать стандартный без необходимости, так как это чревато излишней нагрузкой. Для FreeBSD нужно использовать kqueue, для Linux 2.2.19+ использовать rtsig, для Solaris 10 - eventport.

Стандартными методами являются select и poll для любых систем.

Синтаксис задания параметра:

use kqueue;

Группа настроек http


Основная группа настроек, в которой задаются параметры определения типов файлов, шаблон ведения лога и различные таймауты.

Сперва нужно подключить MIME-таблицу и определить MIME-тип по умолчанию:

include mime.types;

default_type application/octet-stream;

Далее можно задать формат отображения логов для отображения и более подробный для скачивания:

log_format main '$remote_addr - $remote_user [$time_local] '

'"$request" $status $bytes_sent '

'"$http_referer" "$http_user_agent" '

'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '

'"$request" $status $bytes_sent '

'"$http_referer" "$http_user_agent" '

'"$http_range" "$sent_http_content_range"';

Далее задаются таймауты. Все таймайты указаны в примерах в минутах (m).

client_header_timeout 3m; # таймаут при чтении заголовка запроса клиента

client_body_timeout 3m; # таймаут при чтении тела запроса клиента

send_timeout 3m; # таймаут при передаче ответа клиенту

keepalive_timeout 2m; # таймаут поддержки keep-alive соединения сервера с клиентом

Далее следует переключатель возможности использования функции sendmail(). Лучше отключить, чтобы избежать использования для отправки спама.

sendfile off;

Далее задаются размеры буфера для чтения заголовков запроса клиента. Разделают обычные и большине запросы, также можно задать максимальное количество используемых буферов (число до размера):

client_header_buffer_size 1k;

large_client_header_buffers 4 4k;

Следующим можно задать параметры использования сжатия gzip, максимальный размер и количество буферов.

gzip on;

gzip_min_length 1100;

gzip_buffers 4 8k;

gzip_types text/plain;

Далее в группе http описывается группа модуля upstream backend, которая будет использоваться для задания backend сервера (указывается его порт):

upstream backend {

server 127.0.0.1:88;

}

Далее в этой же группе http описывается собственно группа настроек самого сервера server, в которой определим, какие типы файлов являются статическими и будут обрабатываться nginx'ом. Параметры можно задавать как в целом для всего сервера, так и для отдельных папок, файлов, масок имен файлов.

Сперва задаются порт, адрес сервера и кодировка (указываем порт, с которым будет работать frontend серер, то есть 80):

listen test.ru:80;

server_name test.ru www.test.ru;

charset koi8-r;

Также можно задать максимальный размер тела запроса клиента:

client_max_body_size 101M;

Теперь в подгруппах location прописываем правила доступа на файлы и перенаправления запросов. Если запрашивается статический контент (картинки, javascript-файлы, фреш), то просто указываем путь, где это находится:

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {

root /home/test/test.ru;

}

Остальные типы файлов отправляем на обработку backend серверу (адрес backend был задан выше командой upstream), задаем также таймауты на получение данных, отправку и время поддерживания соединения в секундах:

location / {

proxy_pass http://backend/;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_connect_timeout 120;

proxy_send_timeout 120;

proxy_read_timeout 180;

}

Не лишним для безопасности будет запретить доступ к ht файлам (.htaccess, .htpass, etc):

location ~ /\.ht {

deny all;

}

Также в группе http прописываются действия при ошибках (40* и 50*), для этого можно либо для каждой ошибки задать действие (в этом примере используется передача в ответ готовой страницы ошибки):

error_page 404 /404.html;

Либо сформировать группу и задать действие для нее (в данном примере при ошибке используется перенаправление в корневую директорию сервера):

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/local/www/nginx-dist;

}

На этом первичное редактирование файла конфигурации завершено.

Наиболее простая конфигурация (листинг)


user  www www;
worker_processes  3;
error_log  logs/error.log;

events {
    worker_connections  1024;
    use kqueue;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    keepalive_timeout      2m;

    sendfile        off;


    client_header_buffer_size    1k;
    #large_client_header_buffers  4 4k;

    upstream backend {
        server 127.0.0.1:88;
    }

    server {
        listen       80;
        server_name  test.ru www.test.ru;
        charset koi8-r;
        access_log  logs/host.access.log  main;

        client_max_body_size 101M;
                location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
                        root /home/pyha/pyha.ru;
                }

                location ~ /\.ht {
                        deny  all;
                }

                location / {
                        proxy_pass http://backend/;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $remote_addr;
        
                        proxy_connect_timeout 120;
                        proxy_send_timeout    120;
                        proxy_read_timeout    180;
                }

        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }
}

Установка и первичная настройка Apache


Установка Apache осуществяется аналогично с nginx для всех систем. Пример в FreeBSD:

cd /usr/ports/www/apache2
make config
make install clean

Все, что остается поменять в конфигурации Apache для стабильной работы связки серверов – это порт.

Файл конфигурации в FreeBSD находится по адресу: /usr/local/etc/apache2/httpd.conf
В Debian-системах находится по адресу: /etc/apache2/ports.conf

Нужно найти строку, где задается прослушиваемый порт и поменять 80 на 88:

Listen 88

Необходимо также исправить номер порта в httpd-vhosts.conf для всех хостов.

После этого остается только перезапустить оба сервера и конфигурация будет работать.

Настройки безопасности nginx


Некоторые настройки уже заданы: таймауты, ограничение на рабочие процессы и соединения – это дает защиту от DDoS-атак, закрыт доступ к .ht-файлам, в которых могут храниться важные данные. Защита от DDoS-атак осуществляется обычно на уровне ОС, на уровне nginx же все сводится к уменьшению числа рабочих процессов и соединений.

Также можно ограничить скорость передачи ответа клиенту. Скорость задается в байтах в секунду в группе настроек server.

limit_rate 4k

Скорость задается для одного соединения, поэтому лучшей регулировки, нужно задавать также ограничение на количество соединений для клиента.

Дополнительная настройка ngnix

Автоматические добавление поддоменов


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

server {

listen 80;

server_name test.ru *. test.ru;

root /var/www/ test.ru /$subdomain;

set $subdomain "";

if ($host ~* ^([a-z0-9-\.]+)\. test.ru $) {

set $subdomain $1;

}

if ($host ~* ^www. test.ru $) {

set $subdomain "";

}

}

Также нужно прописать условие для поддомена www (переадресация на сам сайт) и других, если это необходимо.

Дополнительная настройка Apache


При данной конфигурации в обработанных на Apache скриптах будет некорректной переменная REMOTE_ADDR, так как это адрес не пользователя, а nginx’а. Чтобы в этой переменной отображался IP-адрес пользователя, нужно установить на Apache модуль RPAF. Затем добавить в httpd.conf:

RPAFenable On

RPAFsethostname On

RPAFproxy_ips *.*.*.*

RPAFheader X-Forwarded-For

В параметр RPAFproxy_ips вставьте IP-адрес nginx сервера. После этого перезапустите Apache.

Быстродействие Apache можно улучшить, включив FollowSymLinks и отключив SymLinksIfOwnerMatch, это позволит избежать проверки символических ссылок, которая занимает относительно большое время, в Apache, оставив эту работу для nginx.

Также можно отключить в Apache поддержку .htaccess, так как этим также занимается nginx на frontend'е.

Вообще, на nginx можно повесить много функций, который затем отключить в Apache. Использовать в Apache лучше только то, что еще не поддерживается в nginx.

Итоги работы


В ходе работы были произведены:

  • Сбор данных о наиболее популярных веб-серверах и определение наиболее производительной и полнофункциональной конфигурации

  • Анализ конфигурационных файлов серверов Apache и nginx

  • Дополнительные настройки Apache и nginx позволяющие повысить безопасность и производительность веб-сервера

Список литературы


  1. Документация nginx http://sysoev.ru/nginx/

  2. Администрирование Web-сервера Apache С. Хокинс. «Вильяме» Москва 2001

  3. Документация Apache http://httpd.apache.org/docs/2.2/

  4. Статьи портала http://server-tuning.info/

  5. Статьи http://wikipedia.org/

Добавить документ в свой блог или на сайт

Похожие:

Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины
«Московский государственный институт электроники и математики (технический университет)»
Московский государственный институт электроники и математики (технический университет) iconРеферат в аспирантуру на тему: «Организация видеопроизводства»
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconМосковский государственный институт электроники и математики (технический университет)
Негосударственное образовательное частное учреждение высшего профессионального образования
Московский государственный институт электроники и математики (технический университет) iconРеферат по дисциплине «Культурология» на тему «Искусство как форма протеста (дадаизм)»
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconПрограмма по формированию навыков безопасного поведения на дорогах...
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconКурсовая работа по дисциплине «Организация эвм» Тема: «Устройства ввода настоящего и будущего»
Московский Государственный Институт Электроники и Математики (Технический Университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа по дисциплине «Дискретная математика»
Государственное образовательное учреждение высшего профессионального образования Московский государственный институт электроники...
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины : Видеотехнологии Номер...
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconРабочая программа Наименование дисциплины : Компьютерная графика...
Московский государственный институт электроники и математики (технический университет)
Московский государственный институт электроники и математики (технический университет) iconМосковский энергетический институт
Московский государственный технический университет радиотехники, электроники и автоматики (мгту мирэа)
Московский государственный институт электроники и математики (технический университет) iconДиалектика
Московский государственный институт радиотехники, электроники и автоматики (технический университет)


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск