记录特定位置的请求

记录特定位置的请求

有同样的问题。尝试使用命名位置,但我总是得到同样的结果,为特定位置 (/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;
        }
    }   
}

答案1

您的配置文件存在多个问题。

修饰符^~用于前缀位置,而不是正则表达式位置(尽管存在波浪符号)。请参阅这个文件了解详情。

为了使正则表达式位置优先于另一个正则表达式位置,它只需首先出现。

位置块需要完整。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;
}

相关内容