Следующий еще один вопрос, который я только что решил, Интересно: можем ли мы что-нибудь сделать в 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
В следующий раз, когда у меня будет возможность, я попробую все решения, начиная с этого, и добавлю шаблон из того, что я использовал ... Если только кто-нибудь не сделает все это первым! :)
Меня могут назвать «старой школой» только за то, что я опубликовал это, но я думаю, что классическим решением этой проблемы является использование макроса, такого как 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 (и связанные с ними включаемые файлы) на основе определенных условий. Такого рода рутинные действия типа «сделай одну вещь, которую Х помещает» можно функционально реализовать. Я не верить для этого есть готовые методы, но эти фреймворки предназначены для того, чтобы вы могли создавать свои собственные.