Назад | Перейти на главную страницу

Макрос, шаблон, функция или что-то похожее на файлы конфигурации apache

Следующий еще один вопрос, который я только что решил, Интересно: можем ли мы что-нибудь сделать в Apache, чтобы избежать повторения строк конфигурация? А как насчет внешнего apache? В моем случае это будет RHEL4 от AWS EC2, но я надеюсь, что у любого ** nix * будет аналогичное решение. Может что-то вроде sed, возможно, используя .htaccess... Не знаю. Но это должно быть предварительно обработано, ничего во время выполнения или что-то в этом роде: как и файлы conf, после загрузки apache, вот и все.


Здесь я скопирую свое прошлое решение, чтобы проиллюстрировать:

UseCanonicalNames off

NameVirtualHost *:8888
<VirtualHost *:8888>
  ServerName example1.com
  ServerAlias *.example1.com

  # below, stuff that will be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]
</VirtualHost>

<VirtualHost *:8888>
  ServerAlias *
  VirtualDocumentRoot /var/www/html/%-3

  # below, stuff that need to be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]
</VirtualHost>

И я уверен, что во многих случаях подобные вещи redirection_to_HTTPS мог бы быть функция / процедура / макрос / шаблон / включить / и т.д.

Что ж, спасибо всем за такие отличные ответы, но ... Наверное, mod_macro было бы лучше всего сделать трюк.

И это идеалы согласованы с преимущества Я искал:

  • файлы конфигурации меньшего размера для обслуживания.
  • меньше ошибок из-за копипастов обновлено только частично.
  • лучшая читаемость. например: Используйте AllowLocalAccess можно считать более ясным, чем allow from 192.54.172.0/24 192.54.148.0/24 10.0.0.0/8
  • все это не ценой Perl или м4 программирование.

В следующий раз, когда у меня будет возможность, я попробую все решения, начиная с этого, и добавлю шаблон из того, что я использовал ... Если только кто-нибудь не сделает все это первым! :)

Меня могут назвать «старой школой» только за то, что я опубликовал это, но я думаю, что классическим решением этой проблемы является использование макроса, такого как M4, который является стандартом POSIX. Есть реализация GNU:

http://www.gnu.org/software/m4/

На этой странице autoconf упоминается как наиболее заметный пользователь, но я думаю, что большинство системных администраторов впервые входят в M4 через также классический sendmail.

Вы можете, например, сохранить M4-версии ваших конфигурационных файлов и некоторые Make-файлы, а затем «скомпилировать» их в фактические рабочие конфигурации с помощью простого make.

Apache имеет включить директиву. Что-то вроде

UseCanonicalNames off

NameVirtualHost *:8888
<VirtualHost *:8888>
  ServerName example1.com
  ServerAlias *.example1.com

  Include /etc/apache2/redirect_to_https.conf    
</VirtualHost>

<VirtualHost *:8888>
  ServerAlias *
  VirtualDocumentRoot /var/www/html/%-3

  Include /etc/apache2/redirect_to_https.conf    
</VirtualHost>

с /etc/apache2/redirect_to_https.conf

  # below, stuff that will be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]

Однако другие ответы хороши для более общей проблемы преобразования кода в файлы конфигурации.

Подобные вещи можно сделать с помощью таких фреймворков управления, как Puppet или Capistrano. В этих сценариях создаются файлы httpd.conf (и связанные с ними включаемые файлы) на основе определенных условий. Такого рода рутинные действия типа «сделай одну вещь, которую Х помещает» можно функционально реализовать. Я не верить для этого есть готовые методы, но эти фреймворки предназначены для того, чтобы вы могли создавать свои собственные.