Назад | Перейти на главную страницу

Регистрировать запросы для определенного местоположения

Есть такая же проблема. Пытался использовать именованное местоположение, но всегда получаю одно и то же: журнал доступа, созданный для определенного местоположения (/ 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;
}