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

Ограничить область действия псевдонима apache vhost .conf

У нас есть файл конфигурации vhost, который является универсальным в мультитенантном сценарии, однако для одного из наших клиентов требуется наличие определенного alias декларация, которая в настоящее время определяется так ...

Alias /special "/srv/application/public/example/special"

В настоящее время это означает, что КАЖДЫЙ отдельный клиент / домен в системе будет пойман и вынужден обслуживать /special/ что, очевидно, является проблемой.

Как я могу ограничить объем этого Alias объявление, чтобы оно применялось только тогда, когда запрашиваемый домен совпадает example.com или www.example.com?

К вашему сведению, мы скоро перейдем с Apache 2.2 на 2.4, если есть какие-либо различия в конкретном случае, укажите на них. Спасибо!


РЕДАКТИРОВАТЬ Я должен указать, что в этом случае мы ограничены промежуточным программным обеспечением и должны хранить все в одном объявлении vhost.

Самый простой способ - создать отдельное объявление виртуального хоста не по умолчанию только для этого домена:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  Alias /special "/srv/application/public/example/special"
  # other default directives
</VirtualHost>
<VirtualHost *:80>
  # other default directives
</VirtualHost>

Единственный недостаток заключается в том, что вам нужно будет поддерживать тот же # other default directives как на example.com, так и на виртуальных хостах по умолчанию. Хороший способ сделать это - поместить их все в файл и Include этот файл в обоих объявлениях виртуального хоста.

В качестве альтернативы вы можете сохранить только одно объявление виртуального хоста и добавить RewriteRule:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/special(/.*|$) /srv/application/public/example/special$1

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

Вы должны поместить директиву alias в определение VirtualHost для example.com

<VirtualHost *:80>
    ServerName example.com
    ...
    Alias /special /srv/application/pulic/example/special
    ...
</VirtualHost>

большие файлы vhost очень усложняют управление, создайте отдельный файл для каждого клиента и ВКЛЮЧИТЕ его в файл vhost. это можно сделать вживую, и когда это будет сделано, Apache перезагрузит конфигурации. таким образом вы можете поддерживать несколько доменов для каждого клиента и упростить внесение изменений, как предложил Эндрю выше.