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

Поддержка nginx для правил .htaccess / перезаписи? Отличия от Apache?

Я довольно долго работал с http-серверами Apache и, наконец, перешел на серверы статического контента вместе с другими машинами с динамическим контентом.

Мне было интересно, поддерживает ли nginx файлы ".htaccess" и такие вещи, как mod_rewrite?

Поскольку я очень привык к синтаксису, мне было интересно, в чем заключаются (синтаксические) различия и какова кривая обучения при переходе от конфигураций Apache к nginx.

Синтаксис nginx rewrite намного чище, чем его аналог в mod_rewrite:

Правило mod_rewrite:

 RewriteRule ^[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 [QSA,L,NC]

В nginx становится:

rewrite ^/[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 last;

Но нет поддержки .htaccess ...

Изменить: еще один пример поддержки http://example.com/~username/ URL-адреса в nginx:

location ~ /~([a-zA-Z0-9]*)/(.*) {
    root /home/;
    autoindex on;
    index index.html;
    rewrite ^/~([a-zA-Z0-9]*)/(.*)$ /$1/www/$2 break;
}

nginx поддерживает функцию перезаписи, проверьте NginxHttpRewriteModule

Что вы хотите делать с .htaccess? Вы можете настроить nginx для базовой аутентификации с помощью NginxHttpAuthBasicModule но директивы конфигурации AFAIK могут храниться только в nginx.conf

Похоже, что у nginx есть эквивалент mod_rewrite, и можно найти документацию Вот. Я сам не использовал nginx, но документация выглядит так, как будто конфигурация совершенно другая, но не должно быть слишком сложно понять, что он делает. В вики есть множество примеров.

Я не могу ответить, можно ли иметь файлы конфигурации для каждого каталога, как это можно сделать с apache. Меня бы не удивило, если бы вы могли, потому что люди привыкли ожидать этого от использования apache.

NGINX поддерживает конфигурацию многих файлов с помощью директивы include. По сути, он загружает подконфигурацию и помещает ее на место. Он также поддерживает персонажей-джокеров, поэтому их легко загрузить за один раз.

Единственное ограничение (на мой взгляд) заключается в том, что вам нужно перезагружать при изменении конфигурации. Таким образом, любому пользователю, у которого есть часть конфигурации, могут потребоваться права на перезагрузку конфигурации nginx:

/etc/ini.d/nginx force-reload (на centos)

Я действительно не знаю, есть ли способ избежать этого или сделать это по-другому, потому что я использую NGINX на многих серверах с большим количеством приложений (виртуальных хостов), которые являются моими собственными. Это означало бы, что NGINX не идеален для виртуального хостинга.

Тем не менее, мне очень нравится NGINX, потому что конфигурация намного удобнее, чем неприятный XML-файл. Думаю, вопрос вкуса. Другой хороший момент - это, конечно, скорость, если это важно в вашем случае.

Удачи, миг