Nginx — htaccess, как конвертировать

загрузка...

Apache — это не единственный тип сервера, который существует. Второй по популярности сервер — это Nginx. Те, кто уже побывал на Apache, наверняка привыкли к тому, что там есть файл конфигураций htaccess. Потому после перехода на Nginx таким пользователям будет сложно осознать, что данный сервер не поддерживает файл htaccess и его директивы.

Если хотите использовать функции конфигурационного файла htaccess на сервере Nginx, то вам придется научиться конвертировать директивы этого документа в опции Nginx.

Стоит ли использовать аналог htaccess на сервере Nginx

Прежде чем начать искать аналоги файла htaccess для этого сервера, стоит задуматься о целесообразности такого решения. Использовать файл дополнительных конфигураций необязательно, даже для серверов Apache. Многие его функции можно реализовать через php-код. Большинство вебмастеров лишь изредка обращаются к htaccess, так как этот файл со временем сильно нагружает сервер. Ведь он загружается каждый раз, когда появляется запрос к серверу.

Тем не менее, некоторые опции конфигурационного файла позволяют ускорить работу сервера. К примеру, при помощи него вы сможете активировать кэширование браузеров пользователей, включить сжатие данных и т. д. Также файл htaccess подходит для защиты файлов и папок, а также для общей оптимизации ресурса. Потому все-таки есть смысл искать аналоги этого файла для Nginx.

Как конвертировать опции htaccess для серверов Nginx

Существует специальный Nginx converter — это онлайн-сервис, который необходим для перевода синтаксиса файла htaccess в синтаксис конфигурационного документа сервера Nginx. То есть все, что вам понадобится сделать, — это ввести директивы файла htaccess в конвертер, затем скопировать результат, и вставить в конфигурации Nginx. При этом важно, чтобы файл Apache, с которого вы копируете данные, был рабочим. Протестируйте его на локальном сервере. Если возникает ошибка 500, значит его нельзя использовать для перевода — в нем содержится ошибка.

В основном, конвертер предназначается для перевода директив модуля mod_rewrite. Как известно, директивы этого модуля используются в htaccess чаще других. Вы сможете перевести опции переадресаций с редиректами, директивы склеивания зеркал, удаления слешей из ссылок и т. д. А теперь коротко рассмотрим некоторые директивы htaccess и их аналоги в Nginx.

загрузка...

Если вы захотите добавить в Nginx свои страницы с ошибками, что весьма правильно, то вместо ErrorDocument, вам нужно будет писать, к примеру, вот так: error_page 404 http://domen.ru/error/404.htm. И так вы сможете написать для каждой страницы. Только не забудьте предварительно создать страницы с ошибками. Только потом вы сможете прописать для них путь.

В качестве защиты папок в htaccess часто указывали директиву для запрета листинга каталогов. Для этого писали следующую опцию: Options -Indexes. В Nginx она будет выглядеть совсем по-другому: autoindex off. А для активации листинга укажите вместо off слово on. К сожалению, директиву IndexIgnore через конвертер у вас перевести не получится. Потому вы не сможете при открытом листинге скрывать какие-либо файлы на сервере Nginx. Зато вы сумеете указать свой вариант индексного файла. Для этого нужно прописать вместо DirectoryIndex одно слово: index, и к нему добавить перечень файлов, которые нужно считать индексными.

Некоторые директивы так же легко переводить в Nginx, как и опцию DirectoryIndex. К примеру, директива определения основной кодировки для сайта AddDefaultCharset. Она нужна для того, чтобы все браузеры видели сайт в одной кодировке. Настройка этой опции исключит появление несвязных закорючек на страницах вашего ресурса. Кроме того, вы сможете создать версии портала на другом языке. Чтобы сделать это в Nginx, нужно указать директиву Charset и название кодировки.

Если вы хотите заблокировать доступ к сайту только для некоторых пользователей, то необязательно прописывать сначала Allow from all, а потом указывать исключения. В Nginx достаточно прописать каждый IP-адрес в отдельной строчке после директивы Deny. Например:

deny 81.222.144.12;
deny 81.222.144.20;

А если нужно разрешить доступ только некоторым IP-адресам, то нужно сначала его запретить для всех при помощи директивы Deny all. А потом так же, как и с deny в предыдущем примере: указать в каждой строке по одному IP-адресу, только уже с директивой Allow. Для блокировки какого либо-файла или папки вместо тегов <Files></Files> вам следует писать сначала опцию location, а затем в скобках {} указывать директивы deny и allow. Например, вот как будет выглядеть блокировка файла passwd.html для всех, кроме IP-адреса 81.222.144.12:

location /passwd.html {
deny all;
allow 81.222.144.12;
}

А что касается установки пароля на определенные файлы, то в Nginx это делать еще проще, чем если бы прописывали эту опцию в документе htaccess. Вместо того, чтобы указывать четыре директивы, вам необходимо будет указать всего две. В первой строчке необходимо написать опцию auth_basic и в кавычках указать обращение к пользователю, который хочет авторизоваться. А во второй auth_basic_user_file вам следует написать путь к файлу с паролями, которые необходимы для аутентификации.

Единственное, с чем вам придется изрядно помучиться — это перевод директив модуля mod_rewrite в формат настроек Nginx. С этим действительно все сложно, поскольку вам придется изучить синтаксис Nginx, чтобы понять, как активировать на сервере перенаправление URl. В любом случае, вам понадобится директива location, которая нужна для указания адреса переадресации. В скобках вместо директивы RewriteCond, обозначающей условия перенаправления ссылки, нужно писать if. А вместо правила переадресации RewriteRule пишите просто Rewrite.

Многие функции вы не сможете перевести из стандартного файла htaccess в модифицированный для серверов Nginx. Потому от некоторых возможностей Apache вам придется либо полностью отказаться, либо искать другие пути решения. Используйте специальные плагины и модули для сайта, и сможете реализовать возможности htaccess не через сервер, а через движок.

Похожие статьи

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here