Debian.pro/

Про Debian


Избавляемся от mod_alias в apache, переносим работу mod_alias в nginx.

На меня много кто ругается, что я не люблю php_fpm и не люблю писать реврайты. И каждый раз я отвечаю, что вы не умеет готовить apache2. Продолжим разговор на эту тему.
Есть у apache2 бесполезный модуль. Называется он mod_alias. Почему он бесполезен… Да очень просто — вся его функциональность дублируется в стандартной поставке nginx. И опять же — nginx-овая идеология аналогичных директив намного более безопасная.
За что отвечает этот модуль. По сути он отвечает за 2 важные директивы — Alias и Redirect.
Начнем с Redirect. Приведу несколько примеров редиректов в nginx.
1) редиректим http://www.site.ru/something на http://site.ru
Permanent redirect:
rewrite ^/ http://site.ru/ permanent;
Temporary redirect:
rewrite ^/ http://site.ru/ ;

2) редиректим http://www.site.ru/something на http://site.ru/something, где something = любое содержимое параметра GET:
rewrite ^/(.*) http://site.ru/$1 permanent;
rewrite ^/(.*) http://site.ru/$1 ;

Естественно, что эти примеру нужно вписывать примерно сюда:
server {
server_name www.site.ru;
listen 80;
#здесь редиректы
}

3) простые редиректы:
rewrite /info http://info.site.ru permanent;
rewrite /billing https://billing.site.ru ;

Вот. С редиректами вроде разобрались.

Теперь насчет Alias. С Alias для статики всё очень просто. Пишем такое:
location /deb-packages {
alias /home/git/compiled;
}

Или ещё проще, если содержимое /deb-packages должно смотреть в папку /home/git/deb-packages (так просто быстрее):
location /deb-packages {
root /home/git;
}

Возникает некоторая сложность, если нам нужно в такой alias запхнуть обработку php.
У меня это выглядит примерно так:
location /phpmyadmin {
alias /phpmyadmin/install/dir;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:81;
}

И phpmyadmin я оставляю, обычно, только на одном домене.

Ну и попробуем выключить mod_alias:
a2dismod alias
/etc/init.d/apache2 reload

Apache будет ругаться на строки в вашем конфиге — найдите их, удалите/закомментируйте. После чего спокойно запускайте apache.


Комментариев пока нет.

Написать комментарий