Have the same problem. Tried with named location, but i always get the same thing, access log created for specific location (/calendar) is empty, and logs are stored in general access log (/) in a location context.
If I remove .+\.php$
part from a last location context I'm getting a raw view of the index.php file., because of ^~
modifier. Any advice how to log requests to a specific location?
#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;
}