LINUX.ORG.RU

Блок в конфиге nginx перестает работать, если его переместить ниже по конфигу.

 


0

1

Хочу оставить открытой админку Битрикса только для своего адреса. Добавляю блок в конфиг. (Может, и сам блок неидеален в плане точного решения задачи, но суть в том, что он работает, если расположен выше по конфигу. И перестает работать, если располагается ниже по конфигу).

Вот конфиг: https://pastebin.com/RLMtVuqh

Ну, вроде же nginx’у должно быть все равно, ниже блок location или выше? В чем может быть дело?

Потому что сайт в панели ISPConfig, а в ней можно заготовки nginx-конфигов делать. И вот панелька добавляет кусок кода в низ конфига, а он там не работает. Приходится вручную вверху добавлять блок. Неудобно.



Последнее исправление: truebin (всего исправлений: 1)

Ну, вроде же nginx’у должно быть все равно, ниже блок location или выше?

Нет. Не только порядок, но и тип сравнения играют роль.

PS: ссылку на доку уже привели.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от l0stparadise

Благодарочка. Так приоритет и порядок — это не разные вещи?

Как раз, я и думал, что место блока в конфиге не важно, главное, какая операция в location.

Ну, наиболее приоритетная операция =

Лады, читаю доку…

truebin
() автор топика
Ответ на: комментарий от l0stparadise

Ага. Ну в общем-то, да. Благодарю.

Может подскажете: возможно ли как-то мне сформировать другой блок location (может и без регулярного выражения. Хотя… Вряд ли), чтобы он был чисто префиксным. Тогда у него будет выше приоритет, и, возможно, он будет работать внизу.

truebin
() автор топика
Ответ на: комментарий от beastie

PPS: https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#nginx-location-priority

  1. Test the URI against all prefix strings.
  2. The = (equals sign) modifier defines an exact match of the URI and a prefix string. If the exact match is found, the search stops.
  3. If the ^~ (caret-tilde) modifier prepends the longest matching prefix string, the regular expressions are not checked.
  4. Store the longest matching prefix string.
  5. Test the URI against regular expressions.
  6. Stop processing when the first matching regular expression is found and use the corresponding location.
  7. If no regular expression matches, use the location corresponding to the stored prefix string.

Учитывая все «search stops» и «not checked» результирует в «first most specific (longest) match wins» IIRC, поэтому оно у тебя и ниже в конфиге не работает.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 3)
Ответ на: комментарий от truebin

Твоя регулярка эквивалентна префиксу /bitrix/admin/, неужели ты сам не видишь?

Но она неправильная: отправляет в пхп всё что с таким префиксом, а надо только то что на .php заканчивается. В bitrix/admin есть что-то кроме php-файлов? Если нет - можешь этот префикс и использовать, но это некрасиво (лучше см. ниже). Если есть другие - то см. ниже.

Чтобы всё работало правильно, регулярка должна быть /bitrix/admin/.+\.php и стоять выше (а что плохого то, зачем вниз обязательно?). Если хочешь закрывать не только пхп но и статику - то надо сделать ещё локации для закрывания статики с своими правилами (ниже этой).

firkax ★★★★★
()
Ответ на: комментарий от firkax

надо только то что на .php заканчивается.

Да понимаете, у меня открывается окно авторизации в админку по всяким запросам (я это опытным путём проверил).

Например, вот так /bitrix/admin/1111 открылось окно авторизации.

Вот я и решил вообще всё перенаправить, а не только .php

truebin
() автор топика
Последнее исправление: truebin (всего исправлений: 1)
Ответ на: комментарий от firkax

плохого то, зачем вниз обязательно

Ничего плохого. :) Дело в том, что я пользуюсь панелью ISPConfig. На сервере не один сайт, который управляется Битриксом.

Панель позволяет в её веб-интерфейсе сделать одну заготовку конфига nginx (что я и сделал + добавил этот блок фильтра моего айпишника на вход в админку), а потом ко всем сайтам её присоединять.

И почему-то эта заготовка конфига добавляется к конфигам сайтов снизу.

То есть, у сайта есть базовый конфиг, а к нему дописываются снизу мои прописанные правила в ISPConfig.

truebin
() автор топика
Ответ на: комментарий от truebin

Там ещё ниже правило location / { с rewrite-ом для несуществующих файлов:

try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;
Оно наверно и выдаёт авторизацию.

Так что твоя локация на всё без учёта наличия .php создаёт даже две проблемы:

1) если указан несуществующий файл - он не попадёт в location / и не превратится в /bitrix/urlrewrite.php т.к. он приоритетнее попадёт в твою локу

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

Так что лучше всё-таки сделать правильную локацию, точнее две: первую ^/bitrix/admin/.*\.php$ с отправкой в пхп, вторую - ^/bitrix/admin с try_files как в /, ну и обе с фильтром по айпи.

Есть ещё вариант: делаешь внизу префиксную локацию на ^~ /bitrix/admin/, и в ней внутри две регэксповые локации, первая \.php$, вторая для остального с try_files.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от truebin

Испконфиг платный (где ты его откопал вообще), пиши им в саппорт или на форум.

И почему-то эта заготовка конфига добавляется к конфигам сайтов снизу.

Лет 10-15 назад ее юзал и она так же себя вела. Хотя как ты хочешь, чтобы она добавлялась? Конфиги разные, локейшны могут быть разные.

Короче им пиши, а не сюда.

anonymous
()
Ответ на: комментарий от anonymous

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

В nginx тоже можно сделать всё удобно, но не жертвуя адекватностью работы.

firkax ★★★★★
()