![如何将自定义 FastCGI 参数值传递给 NGINX 变量?](https://linux22.com/image/775793/%E5%A6%82%E4%BD%95%E5%B0%86%E8%87%AA%E5%AE%9A%E4%B9%89%20FastCGI%20%E5%8F%82%E6%95%B0%E5%80%BC%E4%BC%A0%E9%80%92%E7%BB%99%20NGINX%20%E5%8F%98%E9%87%8F%EF%BC%9F.png)
使用快速CGI模块允许我通过使用参数。我接下来希望将其中一个参数记录到我的 NGINX 访问日志中。
我尝试直接通过参数名称将其分配给日志格式,但结果似乎为空值。后来我尝试将此参数传递给 NGINX 变量,但同样没有成功。
在以下配置中,我定义了自己的 NGINX 变量$log 参数存储在我自己的自定义 FastCGI 参数上声明的值日志参数,但这种方法似乎行不通。
如果有任何可能的解决方案来解决这个问题,我们将非常感激。
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Adding nginx variable to access log format
log_format docker '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$logparam"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log docker;
# Declared variable to store fastcgi param
set $logparam "";
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location / {
try_files $uri $uri/ /index.php?_url=$uri&$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index /index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Declared new param with custom value and passing onto nginx variable
fastcgi_param LOG_PARAM "testing";
set $logparam LOG_PARAM;
}
location ~ /\.ht {
deny all;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
access_log off;
}
}
}
答案1
我相信您可以将变量添加到响应头并记录该响应头。
将变量添加到响应头:
location ~ [^/]\.php(/|$) {
add_header x-my-param "$logparam";
...
}
并更改您的日志格式:
log_format docker '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$sent_http_x_my_param"';
我希望这能起作用。
也可以看看:
https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
https://nginx.org/en/docs/http/ngx_http_core_module.html#variables