Тонкости настройки nginx и apache2+mod_aclr2

25 Июн
2012

Модуль mod_aclr2 для apache2 позволяет автоматизировать обслуживание статического контента при помощи nginx, работающего в качестве локального реверс-прокси. Очень полезно, когда надо, чтобы правила доступа в .htaccess срабатывали и для статики тоже. Собирается и настраивается модуль очень легко, здесь находится он сам, его документация, образцы конфигов для apache и nginx. Но при настройке пришлось применить несколько хитростей.

1. Выбираем уникальный путь для специального location`а

Вот он, этот location:
location /int/ {
      # path must be equal to Apache's DocumentRoot
      alias /var/www/site.com/;
      internal;
}

После установки модуля я задумался, а что будет, если создать директорию с именем «int»? Эксперимент показал, что nginx, сославшись на «internal», выдает 404, а без «internal» ищет запрошенный файл в корне сайта. Такое поведение мне совсем не подходило. Хитрым и вредным юзерам ничего не стоит создать такой каталог, сунуть туда что-то очень важное и прокричать мне в телефон: «Почему ничего не работает?!». Значит, надо придумать такой путь, который не угадает даже самый хитрющий юзер. Можно было написать туда длинную строку, потыкав по клавиатуре случайными пальцами, но тут я попробовал так, в качестве бреда:
location / {
      proxy_pass                http://127.0.0.1;
      proxy_set_header 	X-Accel-Internal /;
}
	
location // {
      alias	/home/web/somesite.com/www/;
      internal;
}

и… это сработало! Директорию с именем, начинающимся на слэш создать нельзя, файл — тоже (или я плохо пытался, но у меня не вышло). Запросы вида somesite.com//file.txt попадают в первый location благодаря merge_slashes on, а внутренние редиректы нормально обрабатываются вторым location`ом. Я не совсем понял, почему оно работает, но мне кажется, что при внутреннем редиректе не происходит нормализация uri и двойной слэш не склеивается в один. Подобная конфигурация работает на сервере с парой десятков сайтов уже с месяц и проблем я пока не заметил. Только боюсь, что такое поведение nginx в будущих версиях внезапно изменится и всё сломается.

2. Прячем из заголовков информацию о mod_aclr2

mod_aclr2 добавляет в заголовки ответа строку «X-Accel-Version: 0.01», которая мне не нравится и успешно оттуда скрывается:
proxy_hide_header	X-Accel-Version;


3. Лечим статику в phpmyadmin

А ещё у меня пропала статика в phpmyadmin, но ему помогло AccelRedirectOutsideDocRoot On в конфиге apache.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх