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

Модуль 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.
Tags:
nginx, apache2, mod_aclr2

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.

Similar posts