Проект Apache HTTP Server - результат совместных усилий по разработке программного обеспечения, направленный на создание надежной, функциональной, свободно доступной реализацией исходного кода HTTP (Web) сервера.

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

В феврале 1995 года, самым популярным серверным программным обеспечением в Сети был общедоступный сервер HTTP, разработанный Робом Мак-Кулом в Национальном центре суперкомпьютерных приложений, Университет штата Иллинойс в Урбана-Шампейн. Однако развитие этого HTTPD зашли в тупик после “ухода” Роба в NCSA в середине 1994 года. И некоторые веб-мастера стали дальше развивать сервер, однако каждый отдельно. Небольшая группа из веб-мастеров, связавшись через частные электронной адреса, собрались вместе с целью координации вносимых изменений. Брайан Белендорфу и Клифф Сколник создали почтовые рассылки и логины для основных разработчиков в Калифорнии, Bay Area. К концу февраля, восемь основных участников стали основой группы разработчиков Apache:

  • Брайан Белендорфу
  • Рой Т. Филдинг
  • Роб Хартилл
  • Дэвид Робинсон
  • Клифф Сколник
  • Рэнди Тербуш
  • Роберт С. Thau
  • Эндрю Уилсон

Дополнительные участники: * Эрик Hagberg * Франк Петерс * Николя Pioch

Используя NCSA HTTPD 1,3 в качестве базы, разработчики добавили все опубликованные исправления ошибок и улучшения, которые смогли найти. Провели испытания на собственных серверах и сделал первый официальный публичный релиз сервера Apache версии 0.6.2 в апреле 1995 года.

Сервер Apache уже тогда стал большим хитом, однако разработчики понимали, что код необходимо капитально модернизировать. В течение мая-июня 1995 года, в то время как Роб Хартилл и остальные члены группы сосредоточились на реализации новых возможностей для 0.7.x и поддержки быстро растущего сообщества пользователей Apache, Роберт Thau разработал новую архитектуру сервера (код Шамбала), которая включал модульную структуру и API для лучшей расширяемости. Группа перешла на эту новую базу сервера в июле и добавил особенности от 0.7.x, в результате чего Apache 0.8.8 вышел уже в августе.

После продолжительного бета-тестирования, Apache 1.0 был выпущен 1 декабря 1995 года. Менее чем через год после формирования группы, сервер Apache обошел NCSA HTTPD и стал сервером #1 в Интернете. По данным Netcraft, он сохраняет эту позицию по настоящее время.

В 1999 году члены группы создали Apache Software Foundation для обеспечения организационной, правовой и финансовой поддержки для HTTP-сервера Apache. Фонд поставил программное обеспечение на прочную основу для будущего развития, и значительно расширили количество свободных программных проектов, которые подпадают под влияние этого Фонда.

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

Мягкий рестарт Apache

Чтобы не разрывать сессию или не заблокировать кого-либо, можно использовать аккуратную перезагрузку apache. Например:

apachectl graceful

Это позволит каждому потомку спокойно завершится. Еще более аккуратно можно поступить так:

apachectl -k graceful-stop && apachectl -k start

Список загруженных в настоящее время модулей

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

apachectl -t -D DUMP_MODULES

Установка mod_rpaf на примере CentOS

В связке с Nginx, Apache может показывать в логах не IP пользователя, а IP 127.0.0.1, например. Это легко исправить:

  • Идем на страницу http://centos.alt.ru/repository/centos/

  • Заходим в свою версию дистрибутива и платформы

  • Находим пакет mod_rpaf…..

  • Копируем на него ссылку и ставим, например, так:

rpm -ihv http://centos.alt.ru/repository/centos/6/x86_64/mod_rpaf-0.6-2.el6.x86_64.rpm

Скачивать отдельно не обязательно, rpm и так прекрасно всё понимает.

  • Далее идём в конфиг Apache (/etc/httpd/conf/httpd.conf) и после всех модулей добавляем такие строчки:
1
2
3
4
5
 LoadModule rpaf_module /usr/lib64/httpd/modules/mod_rpaf-2.0.so
 RPAFenable On
 RPAFsethostname Off
 RPAFproxy_ips   127.0.0.1
 RPAFheader X-Real-IP

Вместо 127.0.0.1 нужно указать тот, откуда приходят запросы. (В моём случае как раз 127.0.0.1)

  • Перезагрузите Apache и дальше посмотрите, что добавляется в логи. Там должны быть внешние IP адреса

Редирект несколько доменов на один URL

Иногда, когда несколько доменов закуплено для одного сайта, нужно сделать перенаправление (redirect) на один адрес (URL). Для этого в .htaccess вы можете добавить следующее:

1
2
3
4
5
6
7
8
9
 #rederect
 RewriteCond %{HTTP_HOST} ^www\.wikiadmin\.net [OR]
 RewriteCond %{HTTP_HOST} ^domain2\.su [OR]
 RewriteCond %{HTTP_HOST} ^www\.domain2\.su [OR]
 RewriteCond %{HTTP_HOST} ^domain3\.tv [OR]
 RewriteCond %{HTTP_HOST} ^www\.domain3\.tv
 RewriteRule (.*) http://wikiadmin.net/$1 [R=301,L]
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
 RewriteRule ^index\.php$ http://wikiadmin.net/ [R=301,L]

Первым правилом убивается www, остальными - редиректится на основной wikiadmin.net

Настраиваем HTTP|HTTPS

Коротко для CentOS 6.5

1
2
3
4
5
6
7
8
 yum install mod_ssl openssl  
 openssl genrsa -out ca.key 1024 
 openssl req -new -key ca.key -out ca.csr 
 openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt 
 mv ca.crt /etc/pki/tls/certs 
 mv ca.key /etc/pki/tls/private/ca.key 
 mv ca.csr /etc/pki/tls/private/ca.csr 
 service httpd restart 

Генерируем свой сертификат

Идём в папку, где будут хранится сертификаты. Например:

cd /etc/httpd/conf.d/wikiadmin.net

Генерируем:

1
2
3
 openssl genrsa -out ca.key 1024
 openssl req -new -key ca.key -out ca.csr
 openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Прописываем в конфиге апача. Например:

1
2
3
4
5
6
7
8
 <VirtualHost 217.118.24.140:443>
         ServerName  wikiadmin.net
         SSLEngine On
         SSLCertificateFile /etc/httpd/conf.d/wikiadmin.net/ca.crt
         SSLCertificateKeyFile /etc/httpd/conf.d/wikiadmin.net/ca.key
         DocumentRoot /var/www/wikiadmin.net
         ..............
 </VirtualHost>

Проверяем

httpd -t

Если всё ок, то перезапускаем сервер и всё… Учтите, что сертификаты самоподписные и поэтому браузеры будут ругаться. Если используется для себя, как в случае с Tine20, то можно его просто экскпортировать из браузера и добавить себе в доверенные, больше ничего писать не будет.

Если же получили подписанный сертификат:

  • Сохраняем его из письма как ca.crt

  • Ключ сохраняем как ca.key, если раньше не был сохранён

  • Копируем root ключик компании и добавляем его в конфиг как SSLCACertificateFile. Например:

SSLCACertificateFile /etc/httpd/conf.d/cert/SSL123_CA_Bundle.pem

Вместо страниц в браузере код php, не отображается страница как надо

В httpd.conf в конце добавьте следующую строчку:

AddHandler application/x-httpd-php php

И перезагрузка сервиса. Всё должно быть ок.

internal dummy connection

В логах постоянная ошибка

1
"OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.2.22 (Ubuntu) (internal dummy connection)"

Если нужно просто скрыть, в apache.conf просто добавляем

SetEnvIf Remote_Addr “127.0.0.1” loopback

Аутентификация в apache

Небольшое руководство, как скрыть некоторые страницы от чужого взора за паролем. Для этого достаточно в корневую папку с сайтом положить файлик .htaccess. Например, нам нужно закрыть всеми любимый.

  • Сначала в настройках Apache проверяем, что указано для этого сайта в строке AllowOverride. Нам нужно, чтобы было указано All. Если нет - меняем и перегружаем апач.

  • В корне сайта создаём файл .htaccess.

Дополним его, чтобы были строчки с AuthType, AuthName и AuthUserFile.

Пользователь у нас будет user, а файл с паролем /var/www/html/htpswdd.

Учтите, нужно прописывать полный путь! Получается что-то типа такого:

1
2
3
4
AuthType Basic
AuthName "Private zone. Only for administrator!"
require valid-user
AuthUserFile  /var/www/html/htpswdd
  • Теперь создадим и заполним нужный файл логином и паролем. Делается это просто одной командой:

htpasswd -c /var/www/html/htpswdd user

*Перезапускаем apache