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