Есть такая же проблема. Пытался использовать именованное местоположение, но всегда получаю одно и то же: журнал доступа, созданный для определенного местоположения (/ calendar), пуст, а журналы хранятся в общем журнале доступа (/) в контексте местоположения.
Если я удалю .+\.php$
часть из последнего контекста местоположения я получаю необработанное представление файла index.php. из-за ^~
модификатор. Любой совет, как регистрировать запросы в определенное место?
#user root;
worker_processes 1;
pid /usr/local/nginx/logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
#default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name ip-address;
root /var/www;
index index.php;
access_log /usr/local/nginx/logs/access.log;
location / {
try_files $uri /index.php;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:8080;
try_files $uri =404;
}
location ^~ /calendar/.+\.php$ {
access_log /usr/local/nginx/logs/calendar.log;
}
}
}
Есть несколько проблем с вашим файлом конфигурации.
Модификатор ^~
предназначен для префиксов, а не для местоположений регулярных выражений (несмотря на наличие тильды). Видеть этот документ для подробностей.
Чтобы дать приоритет местоположению регулярного выражения над другим местоположением регулярного выражения, оно просто должно появиться первым.
Блок местоположения должен быть полным. nginx
не будет брать биты из одного места и объединять их с битами из другого.
Например, это может сработать для вас:
location ~ ^/calendar/.+\.php$ {
access_log /usr/local/nginx/logs/calendar.log;
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:8080;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:8080;
}