Welcome! Log In Create A New Profile

Advanced

Re: Помогите разобраться почему не работает

Валентин Бартенев
August 23, 2011 02:04PM
Логика работы этого конфига мне более-менее понятна (если я правильно понимаю
работу Nginx директив), но вот что хотел автор, его написавший, представляется
боооольшой загадкой.

On Tuesday 23 August 2011 16:23:51 gamak wrote:
> Здравствуйте!
> Помогите разобраться с проблемой:
> location @metka {
> rewrite ^(.*[^/])$ $uri/ last;
> sendfile off;
> fastcgi_pass php_local;
> }

Прежде всего, зачем вы делаете выделение и не используете его?

Если вдруг внутренним редиректом в этот локэйшн попадает запрос, то происходит
одно из двух:
1) если на конце нет слэша, то будет выполнен внутренний редирект с добавление
слэша;
2) в противном случае (если слэш есть), то запрос будет передан factcgi
бэкэнду.

Редиректнутый запрос (случай 1) попадет опять же сюда:

> location / {
> try_files $uri $uri/ @metka;
> location ~ \.php$ {
> set $script_name $fastcgi_script_name;
> sendfile off;
> fastcgi_pass php_local;
> }
> }

По-умолчанию сюда попадают все запросы.

Тут проверяется существование пути соответствующего запросу или пути
соответствующего запросу плюс слэш на конце. Если файла или директории не
существует, то делаем внутренний редирект на именованный локэйшн @metka.

Причем, если у нас запрос без слэша на конце, и соответствующего файла и
директории не существует, то происходит призабавнейшая ситуация:
1) Убеждаемся в отсутствии $uri и $uri/
2) Запрос уходит в @metka, где к $uri добавляется /
3) Запрос попадает опять сюда только уже $uri = $uri/
4) Очевидно он опять уходит в @metka (ибо п. 1)
5) В @metka он попадает уже на factcgi бэк-энд

Вот так вот понять, что этим конфигом хотел добиться автор, imho, невозможно.

Если $uri или $uri/ все-таки существует, то в случае, если запрос оканчивается
на .php, он будет передан fastcgi бэк-энду, иначе обработан как обычный запрос
к файлу или директории.

> При открытии главной -все ок. Как только
> жму по любой вкладе, отдается пустая

Что значит жмете по любой вкладке? Что за вкладки?

> страница. в access.log 404 ошибка.

А в error-лог смотрели?

> Правлю вот так:
> location @metka {
> rewrite ^(.*[^/])$ $uri/ last;
> sendfile off;
> fastcgi_pass php_local;
> }
>
> location / {
> try_files $uri $uri/ @metka /index.php?q=$request_uri;


В данном варианте конфига запрос в локэшн @metka не попадет никогда.

Все запросы попадут в location /, после чего будет проверено наличие путей:
$uri, $uri/ и @metka

К слову сказать файл с именем @metka вполне может существовать, так что смысла
это не лишено, но вряд ли этого добивается автор.

Если соответствующих объектов не обнаружено, то будет выполнен внутренний
редирект на /index.php?q=$request_uri , который очевидно попадет опять же
сюда, и при наличии файла index.php затем попадет на factcgi бэкэнд.

>
> Все начинает работать, но меня не
> устраивает такой редирект, потому что
> некоторый функционал на сайте
> перестает работать.
> Подскажите пожалуйста, куда копать.
>

Подскажите пожалуйста, что вы хотите сделать, и что у вас не получается (какие
запросы не работают)? Читали ли вы документацию?

--
Валентин Бартенев
http://vbart.ru/

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Помогите разобраться почему не работает

gamak August 23, 2011 08:23AM

Re: Помогите разобраться почему не работает

Валентин Бартенев August 23, 2011 02:04PM

Re: Помогите разобраться почему не работает

gamak August 23, 2011 11:55PM

Re: Помогите разобраться почему не работает

gamak August 24, 2011 05:52AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 111
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready