Score:1

ฉันจะส่งต่อค่าพารามิเตอร์ FastCGI ที่กำหนดเองไปยังตัวแปร NGINX ได้อย่างไร

ธง br

ใช้ FastCGI โมดูลอนุญาตให้ฉันส่งตัวแปรเซิร์ฟเวอร์ไปยังแอปพลิเคชัน PHP ของฉันโดยตรงผ่านการใช้ พารามิเตอร์. สิ่งที่ฉันหวังว่าจะทำต่อไปคือบันทึกหนึ่งในพารามิเตอร์เหล่านี้ลงในบันทึกการเข้าถึง NGINX ของฉัน

ฉันได้ลองกำหนดสิ่งนี้โดยตรงให้กับรูปแบบบันทึกโดยใช้ชื่อพารามิเตอร์ แต่ดูเหมือนว่าผลลัพธ์จะเป็นค่าว่าง ต่อมาฉันได้ลองส่งพารามิเตอร์นี้ไปยังตัวแปร NGINX แต่ก็ไม่มีโชคเช่นกัน

ในการกำหนดค่าต่อไปนี้ ฉันได้กำหนดตัวแปร NGINX ของตัวเองแล้ว $ล็อกพาราม เพื่อเก็บค่าที่ประกาศในพารามิเตอร์ FastCGI ที่ฉันกำหนดเอง LOG_PARAMซึ่งดูเหมือนจะไม่ทำงานอย่างนั้น

หากมีวิธีแก้ปัญหาใด ๆ ที่เป็นไปได้ในการจัดการกับสิ่งนี้ มันจะขอบคุณมาก

http {
    รวม /etc/nginx/mime.types;
    แอปพลิเคชัน default_type/octet-stream;

    # การเพิ่มตัวแปร nginx เพื่อเข้าถึงรูปแบบบันทึก
    นักเทียบท่า log_format '$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 param
        ตั้ง $logparam "";

        client_header_timeout 60;
        client_body_timeout 60;
        keepalive_timeout 60;
        gzip ปิด;
        gzip_comp_level 4;
        ข้อความ gzip_types/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/แอปพลิเคชันจาวาสคริปต์/ข้อความ x-จาวาสคริปต์/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss ข้อความ/จาวาสคริปต์;

        ที่ตั้ง / {
            try_files $uri $uri/ /index.php?_url=$uri&$args;
        }

        ตำแหน่ง ~ [^/]\.php(/|$) { 

            fastcgi_pass ยูนิกซ์:/run/php-fpm/www.sock;
            fastcgi_index /index.php;

            fastcgi_buffers 16 16k; 
            fastcgi_buffer_size 32k;
            
            รวม /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;
            access_log off;
        }

    }
}
Score:0
ธง cn

ฉันเชื่อว่าคุณสามารถเพิ่มตัวแปรในส่วนหัวการตอบกลับและบันทึกส่วนหัวการตอบกลับนี้ได้

เพิ่มตัวแปรในส่วนหัวของการตอบสนอง:

ตำแหน่ง ~ [^/]\.php(/|$) {
    add_header x-my-param "$logparam";
    ...
}

และเปลี่ยนรูปแบบบันทึกของคุณ:

นักเทียบท่า log_format '$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#variables

br flag
สวัสดี @ampularius คำตอบของคุณไม่ตรงกับคำถามของฉันโดยตรง ฉันหวังว่าจะหาวิธีส่งค่าของ FastCGI param LOG_PARAM ไปยังตัวแปร $logparams Nginx วิธีการที่คุณใช้ไม่ครอบคลุมวิธีการส่งผ่าน จากพารามิเตอร์ FastCGI และเนื่องจากเป็นพารามิเตอร์ FastCGI จึงตั้งใจให้ใช้เป็นตัวแปรเซิร์ฟเวอร์ ดังนั้นฉันจึงไม่ต้องการใช้ส่วนหัวในสถานการณ์นี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา