nginx и кэширование

MiksIr

miksir@home:~$
Так в том то и дело, что = / для скрытия index.php не годится.
Годится, если других php в document root нет и соответствующий обрабатывающий php локейшен сделать internal. Ну и если 404 устраивает.
В иных случаях - rewrite, или, еще лучше, location = /index.php { }
А кеширование… Поставь фронт для кэша отдельно. Будет НАМНОГО проще писать конфиги.
Вот иногда все же лучше думать, прежде чем что-то сказать.
 

fixxxer

К.О.
Партнер клуба
Только после того, как PHP пофиксят.
Там особо нечего фиксить, с fix_pathinfo 0 все отлично работает при script_filename с полным путем.

Я предлагал выкинуть fix_pathinfo вообще нафиг и при отсутствии script_filename строить его из document_root + script_name, мой баг висит уже лет 6. Но одна лишняя строчка в fastcgi_params мне не особо мешает, так что я не особо и пушил.
 

MiksIr

miksir@home:~$
Кстати, еще один вариант
Код:
map $request_uri $bypass_cache {
default 1;
/ 0;
}

...
fastcgi_cache_bypass $bypass_cache;
 

AnrDaemon

Продвинутый новичок
Пример можно? Я пока вижу это работоспособным только для чистого бэка с единой точкой входа.
 

fixxxer

К.О.
Партнер клуба
А я про такой и говорю. Статика - на субдомене, для особых случаев типа favicon и robots.txt - location =.
 

MiksIr

miksir@home:~$
Как-то так. У равно приоритет, остальное blabla.php работает.
Код:
location / {
  try_files $uri @index;
}
location @index {
  fastcgi_param SCRIPT_NAME /index.php;
  fastcgi_param SCRIPT_FILENAME $document_root/index.php;
  fastcgi_pass ...;
}
location = /index.php {
  return 301 /;
}
location ~ \.php$ {
  try_files $uri =404;
  fastcgi_pass ...;
}
 

MiksIr

miksir@home:~$
А я все видел ;) Не, try_files же не выдает файл, он только проверяет наличие - и если есть, то продолжает выполнение этого локейшена... с изменением $uri вроде. Так в доке написано.
 

fixxxer

К.О.
Партнер клуба
;)
Не, try_files же не выдает файл, он только проверяет наличие - и если есть, то продолжает выполнение этого локейшена... с изменением $uri вроде. Так в доке написано.
Ага, логично.
Но с современными фреймворками, когда все роутится на ровно один файл, мне это все кажется излишним. Я чаще делаю так:
Код:
location / {
    root /path/to/static/docroot;
    try_files $uri @php;
}
location @php {
   fastcgi_param SCRIPT_FILENAME /path/to/application/index.php;
   fastcgi_pass ...
}
А в докруте вообще нету ни одного php-файла.
 

AnrDaemon

Продвинутый новичок
Это на самом деле даже лучшая мысль, чем то, что я тут начал строить, между прочим…
 

fixxxer

К.О.
Партнер клуба
fastcgi-модуль nginx-а как раз прекрасен тем, что все fastcgi-переменные среды объявляются явно
 
Сверху