Рейтинг:1

Как передать пользовательское значение параметра FastCGI в переменную NGINX?

флаг br

С использованием FastCGI Модуль позволил мне передавать серверные переменные непосредственно в мое PHP-приложение с помощью параметр. Что я надеюсь сделать дальше, так это записать один из этих параметров в мои журналы доступа NGINX.

Я попытался напрямую назначить это формату журнала по имени параметра, но, похоже, это пустое значение. Позже я попытался передать этот параметр в переменную NGINX, но и там не повезло.

В следующей конфигурации я определил свою собственную переменную NGINX. $логпарам для хранения значения, объявленного в моем собственном параметре FastCGI LOG_PARAM, который, кажется, не работает таким образом.

Если есть какое-либо возможное решение, чтобы справиться с этим, это было бы очень признательно.

http {
    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Добавление переменной nginx для доступа к формату лога
    log_format docker '$remote_addr - $remote_user [$time_local] "$request" '
                      '$статус $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$logparam"';

    включить conf.d/*.conf;

    карта $http_upgrade $connection_upgrade {
        по умолчанию "обновление";
    }

    сервер {
        слушать 80 default_server;
        access_log /var/log/nginx/access.log докер;
        # Объявленная переменная для хранения параметра fastcgi
        установить $logparam "";

        client_header_timeout 60;
        client_body_timeout 60;
        keepalive_timeout 60;
        сжатие выключено;
        gzip_comp_level 4;
        gzip_types текст/обычный текст/приложение css/приложение json/приложение javascript/текст x-javascript/приложение xml/приложение xml/текст xml+rss/javascript;

        место расположения / {
            try_files $uri $uri/ /index.php?_url=$uri&$args;
        }

        расположение ~ [^/]\.php(/|$) { 

            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index /index.php;

            fastcgi_buffers 16 16k; 
            fastcgi_buffer_size 32 КБ;
            
            включить /etc/nginx/fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            # Объявлен новый параметр с пользовательским значением и передачей в переменную nginx
            fastcgi_param LOG_PARAM "тестирование";
            установить $logparam LOG_PARAM;
        }

        местоположение ~ /\.ht {
            отрицать все;
        }

        расположение ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
            истекает макс.;
            log_not_found выключен;
            доступ_лог выключен;
        }

    }
}
Рейтинг:0
флаг cn

Я считаю, что вы могли бы добавить переменную в заголовок ответа и зарегистрировать этот заголовок ответа.

Добавить переменную в заголовок ответа:

расположение ~ [^/]\.php(/|$) {
    add_header x-my-param "$logparam";
    ...
}

И измените формат журнала:

log_format docker '$remote_addr - $remote_user [$time_local] "$request" '
                      '$статус $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#переменные

флаг br
Привет @ampularius, ваш ответ напрямую не соответствует моему вопросу, я надеялся найти способ передать значение параметра FastCGI LOG_PARAM в переменную $logparams Nginx, подход, который вы используете, не охватывает, как его передать из параметра FastCGI. И поскольку это параметр FastCGI, он предназначен для использования в качестве серверной переменной, поэтому я не хочу использовать заголовок в этом сценарии.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.