有同样的问题。 尝试命名的位置,但我总是得到同样的东西,为特定位置(/日历)创build的访问日志是空的,日志存储在一般位置上下文中的访问日志(/)。
如果我从最后一个位置上下文中删除.+\.php$ part,我得到了index.php文件的原始视图,因为^~修饰符。 任何build议如何将请求logging到特定位置?
#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; } } }
您的configuration文件有多个问题。
修饰符^~是用于前缀位置而不是正则expression式位置(尽pipe存在代字符)。 详情请参阅此文件 。
为了给正则expression式位置优先于另一个正则expression式位置,它只需要首先出现。
位置块需要完整。 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; }