Hi-Tech Arduino Компьютеры Интернет
HV-Lab Reference Linux Форум
Справочники Libraries Windows Галерея
Электроника Hardware Hardware Загрузки
Печатные платы Forum Программирование Мини-чат
[ Февр 26, 07:42 ] admin: Форум перешел в разряд архивного.
[ Февр 24, 19:02 ] admin: переехали на новый сервер. Грядут перемены.
[ Фев 20, 08:38 ] кулибин: Переход на SSL был непрост (особенно с абсолютными путями на изображения, но мы его осуществили)
RSS статьи
 
Статьи

Статьи->Linux->Установка и настройка Apache-сервера c lighttpd [ Поиск ]

Установка и настройка Apache-сервера c lighttpd - Разборки с серверами(Часть 6)
Отправил: кулибин, Воскресенье, 19 Апреля 2009 07:15
Надеюсь, что прочитав предыдущие части цикла настройки серверов вы уже подняли и настроили шлюз, оформили локальную сеть с двумя зонами — основной и для сервера, подняли сетевое хранилище для организации резервного копирования и приготовились настраивать HTTP-сервер. Все сделали? Тогда приступим.
Немного теории для разогрева.
Протокол HTTPэто протокол передачи гипертекста. Протокол прикладного уровня, предназначенный для обмена данными и предполагающий участие потребителей(клиентов) и поставщиков(серверов).

HTTP работает на 80 порту, HTTPS(с применением ssl-шифрования) — на 443.

Клиенты мы трогать не будем - это все известные нам web-браузеры плюс специальное ПО. У них одна задача — запрашивать по 80 порту какого-либо сервера необходимую пользователю информацию. Серверу приходится этот порт прослушивать на предмет запросов и на запросы отвечать. Протокол HTTP имеет несколько версий. Нас интересуют две — HTTP/1,0 и HTTP/1,1.Последняя спецификация была принята в 1999 году и существует по сей день. Главное преимущество этой версии в том, что при запросе передается имя хоста, что упрощает процесс создания виртуального хостинга.
Виртуальный хостинг — это вид хостинга, когда на одном сервере располагается несколько сайтов. В эпоху HTTP/1,0 и раньше каждый сайт приходилось вешать либо на отдельный IP, либо на отдельный порт, поскольку непонятно, какой именно хост нужен пользователю. Естественно это затрудняло использование одного сервера под несколько сайтов. Сейчас http-сервер обрабатывает прошедший на 80 порт запрос и по принятым данным решает дальнейшую его судьбу.
Первый по популярности сервер в интернет — свободный Apache server. На втором месте проприетарный MS IIS — продукт не безызвестной компании. Далее идут свободные и высокопроизводительные nginx и lighttpd — сервера рассчитанный на быстроту и защищенность, а также как альтернатива двум первым серверам. Часто используются для уменьшения нагрузки на тот же Apache – для отдачи пользователю статического контента — архивов, картинок, html -страниц и прочего — в общем всего, чем Apache загружать неохота. Именно такую схему избрали wikipedia и youtube — они используют lighttpd для передачи файлов пользователю.
Кроме статического содержимого вебсерверу в наше время просто необходимо уметь работать с динамическим содержимым. В этом нам помогут php, perl и еще куча различных скриптовых языков. Для хранения какой-либо информации лучше использовать базу данных — MySQL, MSSQL, Postgre и другие.
Итого задача:
Организовать связку Linux+Apache+Php+MySQL (т. н. LAMP)с передачей статического содержимого lightpd для сайтов test1.ru и test2.ru, файлы которых расположены в /home/test1.ru и /home/test2.ru Рассматривать будем на примере Gentoo Linux 2008,0, для других дистрибутивов различия будут только в способе установке и путях файлов.
Совет:
Как определить путь к определенному приложению? Наберите в консоли whereis <программа> и система выдаст пути к исполняемым файлам, файлам библиотек и другим файлам, которые смогла найти.
Устанавливаем apache2:

#USE=”ssl apache2” emerge apache

Устанавливаем php:

#USE="apache2 mysql postgresql cgi gd -X xml imap" emerge php

Интересный флаг — GD это мощная библиотека динамической работы с графикой. С ее помощью можно обрабатывать изображения различных типов, создавать графики и т. п. В зависимости от требуемой базы данных ставим соответствующий флаг. Если у вас на сервере отсутствует графический интерфейс -X будет не лишней.

#emerge mysql postgresql

выбираем соответствующую БД в зависимости от нужд.

MySQL - является стандартом де-факто в малых и средних приложениях. Используется на большинстве веб-серверов. MySQL 5,0 и выше удовлетворяет практически всем требованиям языка SQL. Имеет API для многих языков программирования: C,C++,php, perl, javaи многих других.

PostgreSQLсвободная и мощная СУБД. Поддерживает БД практически неограниченного размера. Основной упор на надежность, быстроту и масштабируемость. Хорошо подходит для очень крупных проектов.

Настройка Apache2:
Apache – чрезвычайно гибкий модульный сервер. Мы можем набрать необходимую функциональность включая или отключая модули. Необходимые нам — это mod_php, mod_vhost_alias и mod_rewrite. Последние два обычно уже стоят. Первый — поставили мы. Подключим.
Основной файл настроек Apache2 - /etc/apache2/httpd.conf
Открываем и изучаем его XML-структуру.
Стандартный файл уже содержит определенные настройки по умолчанию.
Находим строки подключения модулей и добавляем:
LoadModule php5_module modules/libphp5.so
#Проверим наличие строки
LoadModule vhost_alias_module modules/mod_vhost_alias.so

#Она пригодится нам в дальнейшем

Далее настроим основные параметры сервера. Найти описание их всех можно на официальном сайте www.apache.org Для начала хватит следующих:

# пользователь и группа, под которым запущен web-сервер.

#Желательно чтобы имелся отдельный пользователь и отдельная группа.

User apache

Group apache

#Добавим MIME-тип для php-файлов.

AddType application/x-httpd-php .php

#А также зададим имена индекс-файлов — тех самых, которые будут грузиться по умолчанию.

DirectoryIndex index.php index.html

#Настроим вывод статистики.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#разрешенные на сервере языки.
AddLanguage en .en
AddLanguage ru .ru

# и их приоритет.

LanguagePriority en ru

#Разрешаем серверу выполнять cgi-программы.

AddHandler cgi-script .cgi

#Решаем проблемы с кодировкой. Сначала дефолтная кодировка сервера.

AddDefaultCharset WINDOWS-1251

#Потом возможные варианты и варианты их написания.

AddCharset WINDOWS-1251 .cp-1251 .win-1251 .CP1251
AddCharset KOI8-R .koi8-r
AddCharset UTF-8 .utf-8

#Каждый модуль можно настроить по своему.

Include /etc/apache2/modules.d/*.conf

#Подключаем выполнение ssi-страниц на стороне сервера.

AddType text/html .shtml
AddHandler server-parsed .shtml .html .htm

#Теперь настраиваем виртуальные хосты test1.ru и test2.ru,

#Разрешаем использование виртуальных хостов.

NameVirtualHost *:80

Listen 80 #порт, на котором будет висеть сервер. Порт 8080 оставим для lightpd.

#Виртуальный хост test1.ru

#Путь к папке

DocumentRoot "/home/test1.ru/public_html"

#Имя хоста. То самое, которое запрашивает пользователь

ServerName "test1.ru"

#вариации имени

ServerAlias "test1.ru" "*.test1.ru "

#путь к скриптам

ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/"

#куда будем сохранять лог ошибок

ErrorLog "/home/test1.ru error.log"

#лог статистики

CustomLog /var/log/apache2/test1.ru-custom.log combined

#параметры директории

test1.ru/public_html">

#Разрешаем переназначать все директивы в файле .htaccess

AllowOverride All

#Ставим права доступа по умолчанию. Первая строка — порядок применения маски. Здесь — сначала все разрешим, потом будем запрещать.

Order allow,deny
Allow from all

#виртуальный хост test2.ru

DocumentRoot "/home/test2.ru/public_html"
ServerName "test2.ru"
ServerAlias "test2.ru" "*.test2.ru "
ScriptAlias /cgi/ "/home/test2.ru/public_html/"
ScriptAlias /cgi-bin/ "/home/test2.ru/cgi-bin/"
ErrorLog "/home/test2.ru/error.log"
CustomLog /var/log/apache2/test2.ru-custom.log combined
test2.ru/public_html">
AllowOverride All
Order allow,deny
Allow from all
Если вам хочется порядка в вашем конфиг-файле, пропишите вместо виртуал хостов строчку Include /etc/apache2/vhosts/*.conf и просто добавляйте в папку vhosts файлы содержащие настройки, каждый своего виртуального сервера — очень удобно для быстрого добавления новых виртуальных хостов.
Сохраняем изменения и запоминаем основные команды управления сервером:

#/etc/init.d/apache2 start

#/etc/init.d/apache2 stop

#/etc/init.d/apache2 restart

Запускаем сервер и просим, чтобы он запускался при каждом запуске системы:

rc-update add apache2 default

Если при запуске выявились ошибки, исправляем их и добиваемся нормальной работы.
Теперь можем создать привязку доменного имени к ip нашего сервера.
Есть несколько вариантов.
  1. Регистрируемся на одном из сайтов, предоставляющий услуги name-сервера. Найти подобные сайты проще всего в поисковике по запросу free dns, dynamic free dns(на случай динамического IP).
  2. Поднимаем собственный name-server BIND. Проблема заключается в том, что регистратор доменного имени просит указать как минимум два name-сервера, причем располагающихся в разных подсетях — это необходимо для повышения надежности. Оговорюсь по поводу надежности — для интернета надежным подключением считается то, при котором сервер может быть недоступен не более двух часов в сутки.
  3. Привязать IP к домену прямо у регистратора.
В крайнем случае, если сервер был поднят исключительно локально, открываем файл:

/etc/hosts или в windows

C:\\WINDOWS\system32\drivers\etc\hosts

и добавляем строку типа
192.168.0.110 test1.ru
192.168.0.110 www.test1.ru
192.168.0.110 test2.ru
192.168.0.110 www.test2.ru
Главное пописать все возможные варианты.
Бросим в папку /home/test1.ru/public_html файл index.php с кодом:

 

phpinfo()

?>

Теперь можем с настроенного подобным образом компьютера попасть на наш сервер по адресу test1.ru. Появилась страница информации о сервере? Отлично, работа завершена. Можем посмотреть активные модули и подключить недостающие. Кстати, если вы укажите 192.168.0.110, то вас выбросят на дефолтный виртуал-хост. Рекомендую создать и его, указав в ServerName IP сервера.
БД при подобной сборке, а также в готовых дистрибутивах уже связана с php. При самостоятельной сборке при конфигурировани php необходимо к ./configure php добавить —with-mysql=/путь/к/БД
Настройки MySQL лежат в файле /etc/mysql/my.cnf. Большинство настроек по умолчанию нам подходит, поэтому трогать их пока не будем.
Запустим MySQl сервер, и добавим в загрузку по умолчанию:

#/etc/init.d/mysql start

#rc-update add mysql default

На всякий случай проверим работу MySQL, записав в какой либо файл код:
$query=mysql_connect(localhost, логин, пароль);

if(!$query)

die ("Не удалось подключиться к базе данных");

$quety1=mysql_query("select version();");

echo(mysql_result($query1,0));

?>

Теперь установим и настроим lighttpd

#USE=”fast-cgi”emerge lighttpd

Открываем файл /etc/lighttpd/lighttpd.conf
Как видите, его структура больше похожа на perl-скрипт, чем на XML. Рассмотрим основные директивы:

#подключаем определенные модули.

server.modules= ("mod_rewrite", "mod_redirect", "mod_alias", "mod_access", "mod_auth", "mod_status", "mod_setenv", "mod_fastcgi", "mod_simple_vhost", "mod_cgi", "mod_ssi", "mod_accesslog" )
#путь к папке сервера по умолчанию
server.document-root = "/home/localhost/public_html"
server.port=8080 #порт, на котором будет работать lighttpd

#некоторые настройки оптимизации

server.max-worker=50
server.max-keep-alive-requests=250
server.max-keep-alive-idle=120
server.max-read-idle =120
server.errorlog = "/var/log/lighttpd/lighttpd.error.log"
#общие настройки
index-file.names = ( "index.php", "index.html","index.htm", "default.htm" )
accesslog.filename = "/var/log/lighttpd/lighttpd.access.log"
static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc", ".pl", ".yml" )
ssi.extension = ( "shtml" )
server.pid-file = "/var/run/lighttpd/lighttpd.pid"

#описываем виртуальные хосты.

$HTTP["host"] == "test1.ru" {
server.document-root = "/home/test1.ru/public_html/"
}
$HTTP["host"] == "test2.ru" {
server.document-root = "/home/test2.ru/public_html/"
}

#пользователь и группа.

server.username = "lighttpd"
server.groupname = "lighttpd"
#Настройки cgi
fastcgi.server =
( ".php" =>( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/bin/php" )))
Запустим командой:

#/etc/init.d/lighttpd start

#rc-update add lighttpd default

Проверим, запросив страничку через этот порт: http://test1.ru:8080/index.php Должна отобразиться наша страничка.
Но неудобно это, через порт обращаться — попросим Apache перенаправлять запрос. В директори /home/test1.ru/public_html создадим файл .htaccess.
Смысл этого файла — в настройке локальных параметров для данной и вложенных папок.

#Активируем редиректы

RewriteEngine on

#указываем Apache перенаправлять файлы с определенными расширениями на порт 8080

RewriteRule ^(.*.bz2$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.avi$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.mp3$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.djvu$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.pdf$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.zip$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.rar$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.exe$) http://test1.ru:8080/$1 [R]
RewriteRule ^(.*.iso$) http://test1.ru:8080/$1 [R]
Все, при запросе через test1.ru/film.avi в браузере строка поменяется на test1.ru:8080/film.avi, а в download-менеджере можно будет наблюдать строку типа
Надеюсь у вас все получилось. Результат моего труда можно посмотреть у меня на сайте.
Артем Кашканов

 

Голосов Голосов: 1 - В среднем: 1

Добавить комментарий Оценить
Комментарии

Статистика
Всего 205 статей в базе
Наиболее просматриваемые: Arduino и сеть RS485.
Лучшие по оценкам: РЦВМ1 - Релейная Цифровая Вычислительная Машина

Пользователи в разделе статьи: 2 (0 Пользователи 2 Гости и 0 Скрытые пользователи)
Видимые пользователи:


 
 

MKPortal©2003-2008 mkportal.it
MultiBoard ©2007-2009 RusMKPortal
Страница сгенерированна за 0.02167 секунд с 24 обращениями в базу данных

Intel Core i5-3450 2Gb RAM 100Gb HDD 100Mbps Ethernet

© Artem Kashkanov 2005-2016