Nginx дополнительные параметры на подпапку

grigori

( ͡° ͜ʖ ͡°)
Команда форума
hi all
у меня ощущение, что я туплю
сначала были динозавры стандартный конфиг nginx с ЧПУ
Код:
server {
        server_name            site.ru;
        root /opt/www;

        location / {
          index index.php;
          try_files $uri /index.php?$args;
        }

        location ~ \.php$ {
          include        fastcgi_params;
          fastcgi_pass  127.0.0.1:9000;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      }
но захотел я особые параметры для папки:
expires, или там allow 192.168.0.1 для /api/

если добавить отдельный location, надо как-то отправлять обработку на fcgi,
и мне не надо проверять наличие файла, соответствующего URL, а try_files просит 2 параметра.
и вот я не пойму, дублировать аргумент для try_files,
Код:
        location /api/ {
            try_files  /index.php?$args /index.php?$args;
            allow 192.168.0.0/24;
            deny  all;
        }
или есть менее странный способ передать обработку в другой location?
 
Последнее редактирование:

MiksIr

miksir@home:~$
Можно просто писать fastcgi_pass для всех таких локейшенов. fcgi конфиг или поднять выше на уровень сервера или устроить вложенные локейшены.
Хотя я обычно try_files $uri @index делаю - если файлов нет, то их и нет, а если вдруг есть - наверно все же они там не просто так.
Еще можно связку error_page + return использовать, но это как-то совсем криво, имхо.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
fcgi конфиг поднять выше на уровень сервера.
о! спасибо за идею :)

Хотя я обычно try_files $uri @index делаю - если файлов нет, то их и нет, а если вдруг есть - наверно все же они там не просто так.
если это API - их там не должно быть, и самой папки api нет, и дергать диск совсем не обязательно.

Вообще, задача с редиректом возникает часто. Например, basic auth для страниц, которые генерятся через php, но не для картинок в папке img, которые тоже генерятся тем же php.

или устроить вложенные локейшены
наследования директив во вложенных локейшенах нет :)
Код:
location / {
try_files $uri /index.php?$args;
  location /api/{ allow all;}
}
на /api/get выдает 404
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
если вложить локейшен с регуляркой - сработает

location /api/ {
location ~ ^/api/get/ { ... }
location ~ ^ { .. other .. }
}
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если вложить локейшен с регуляркой - сработает

location /api/ {
location ~ ^/api/get/ { ... }
location ~ ^ { .. other .. }
}
может, версия, но у меня try_files во вложенном location не работает
Код:
    location / {
        try_files $uri /test.php;
        location ~ ^/api/ {allow all;}
    }
[root@vm ~]# curl http://localhost/test/adasdasd
works 3909442
[root@vm ~]# curl http://localhost/api/adasdasd
<html>
<head><title>404 Not Found</title></head>
возможно, опции fcgi будут применены, но это нелогично
 
Последнее редактирование:

MiksIr

miksir@home:~$
Настройки наследуются, действия (try_files, proxy_pass, return) - нет
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
понятно, спасибо. проблема, видимо, в том, что это не документировано
 
Сверху