Score:0

การขยายตัวแปรในคำขอไฟล์บันทึกของ Apache2

ธง br

ฉันต้องการมีไฟล์บันทึกที่กำหนดเองสำหรับผู้ใช้ทุกคนที่เข้าถึงโฮสต์เสมือน ชื่อผู้ใช้มีอยู่ในตัวแปรสภาพแวดล้อม "SSL_CLIENT_S_DN_CN" (มาจากการรับรองความถูกต้องของใบรับรองไคลเอ็นต์) ก่อนอื่นฉันลองทำบางอย่างเช่น

 บันทึกที่กำหนดเอง /var/log/apache2/by_user/%{SSL_CLIENT_S_DN_CN}x.log \
      "%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

ซึ่งเห็นได้ชัดว่าใช้งานไม่ได้เนื่องจากโมดูลบันทึกไม่ขยายตัวแปรในเส้นทางของไฟล์ด้วยตัวมันเอง

ปัญหาของฉันคล้ายกับ นี้ที่นี่แต่ฉันต้องการการทดแทนตามคำขอ ไม่ใช่เพียงครั้งเดียวเมื่อ Apache โหลดการกำหนดค่าไซต์

mod_macro ดูเหมือนว่าจะทำการขยายเพียงครั้งเดียวเมื่อโหลดการกำหนดค่า ดังนั้นวิธีการนี้จึงไม่สามารถแก้ปัญหาของฉันได้

ฉันยังลองทำการสร้างบันทึกในสคริปต์ภายนอก (logtest) โดยใช้คุณสมบัติ "log pipe" แต่สิ่งนี้นำไปสู่ ​​"ข้อผิดพลาดในเงื่อนไขข้อ":

CustomLog "|/usr/local/bin/logtest" "/var/log/apache2/by_user/%{SSL_CLIENT_S_DN_CN}x.log" \
"%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

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

แก้ไข:

ฉันมีวิธีแก้ไขชั่วคราวโดยใช้ "piped logs" ดังนี้:

apache ไซต์ conf:

CustomLog "|/usr/local/bin/apache_logger" "%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

สคริปต์ทุบตีอยู่ที่ /usr/local/bin/apache_logger:

#!/bin/bash

ในขณะที่อ่าน STDIN
ทำ

  # รูปแบบ: [TIMESTAMP] IP USERNAME TLS CYPHER PROTOCOL ขนาด "คำขอ"
  TIMESTAMP=$(echo "$STDIN" | ตัด -d" " -f1-2)
  IP=$(echo "$STDIN" | ตัด -d" " -f3)
  USER=$(echo "$STDIN" | ตัด -d" " -f4)
  TLS=$(echo "$STDIN" | ตัด -d" " -f5)
  CYPHER=$(echo "$STDIN" | ตัด -d" " -f6)
  โปรโตคอล=$(echo "$STDIN" | ตัด -d" " -f7)
  REQUEST=$(echo "$STDIN" | ตัด -d" " -f8-10)
  SIZE=$(echo "$STDIN" | ตัด -d" " -f11)

  echo "$TIMESTAMP $IP $USER $TLS $CYPHER $PROTOCOL $REQUEST $SIZE" >> /var/log/apache2/by_user/$USER.log

เสร็จแล้ว
ทางออก 0

ดูเหมือนว่าจะทำงานตามที่คาดไว้ในตอนนี้ คงจะดีไม่น้อยหากสามารถทำได้โดยไม่ต้องใช้การเรียกสคริปต์จากภายนอกที่มีราคาแพง

โพสต์คำตอบ

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