Score:1

แปลง NGINX var จากตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก

ธง co

ฉันต้องการความช่วยเหลือเล็กน้อยเกี่ยวกับการตั้งค่า nginx conf การกำหนดค่าของฉันเป็นพื้นนี้ ...

แผนที่ $http_apikey $api_client_name {
    ค่าเริ่มต้น "";

    "CLIENT_ID" "client_one";
}

เซิร์ฟเวอร์ {
  access_log /dev/stdout หลัก;

  ฟัง 443 ssl;
  server_name localhost;

  #การกำหนดค่า TLS
  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/key.pem;
  ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
  ssl_session_timeout 5 นาที;
  ssl_ciphers สูง:!aNULL:!MD5;
  ssl_protocols TLSv1.2 TLSv1.3;

  เปิด proxy_intercept_errors; # อย่าส่งข้อผิดพลาดส่วนหลังไปยังไคลเอนต์
  แอปพลิเคชัน default_type/json; # หากไม่มีประเภทเนื้อหาให้ถือว่า JSON

  ตำแหน่ง ~ ^/index-$http_apikey {
      ถ้า ($http_apikey = "") {
          กลับ 401; #ไม่ได้รับอนุญาต
      }

      ถ้า ($api_client_name = "") {
          กลับ 403; # ต้องห้าม
      }

      proxy_pass http://elasticsearch:9200;
  }

....

แนวคิดคือการได้รับ http_apike จากข้อมูลส่วนหัวบน POST และใช้เป็นส่วนหนึ่งของลิงก์ อย่างไรก็ตาม VAR http_apike, มีตัวอักษรตัวพิมพ์ใหญ่ในนั้นเช่นเดียวกับตัวพิมพ์เล็กและตัวเลข URI คาดว่าจะเป็นตัวพิมพ์เล็กทั้งหมด ดังนั้นโดยพื้นฐานแล้ว:

  ตำแหน่ง ~ ^/index-$http_apikey.lower() {
      ถ้า ($http_apikey = "") {
          กลับ 401; #ไม่ได้รับอนุญาต
      }

      ถ้า ($api_client_name = "") {
          กลับ 403; # ต้องห้าม
      }

      proxy_pass http://elasticsearch:9200;
  }

ตำแหน่ง ~ ^/index-$http_apikey.lower()

มีวิธีการทำเช่นนี้ใน nginx หรือไม่? เช่นเดียวกับการทุบตีฉันจะ ${http_apikey,,} ... มี nginx ที่เทียบเท่าหรือไม่?

ขอบคุณ

Gerard H. Pille avatar
in flag
“วีเออาร์” คืออะไร ?
Score:1
ธง za

เวอร์ชันย่อ: ไม่ มันเป็นไปไม่ได้

เวอร์ชันสั้นๆ แต่มองโลกในแง่ดี: ไม่สามารถทำได้เมื่อใช้ nginx เท่านั้น แต่เป็นไปได้เมื่อใช้ส่วนขยาย lua หรือส่วนขยาย nginx ของภาษาโปรแกรมอื่นๆ เช่น เพิร์ล.

รุ่นยาว: ดังนั้นคุณจึงพยายามเขียนโค้ดภายในไฟล์ nginx config แม้ว่าการกำหนดค่า nginx จะมีเครื่องมือบางอย่างในการเขียนโปรแกรม (การตั้งค่าตัวแปร การใช้กิ่งที่มีเงื่อนไข) แต่ภาษาการกำหนดค่าไม่ใช่รหัส (ความแตกต่างที่สำคัญระหว่างภาษาการเขียนโปรแกรมและการกำหนดค่าคือคำสั่งรหัสจะได้รับการปฏิบัติตามลำดับที่ปรากฏ และ เอฟเฟกต์ของคำสั่ง config นั้นไม่ขึ้นกับตำแหน่งของมัน - นั่นคือสาเหตุที่ทำให้เกิดเสียงรบกวนรอบ ๆ สาขาเงื่อนไข nginx (หากเป็นความชั่วร้ายและอื่น ๆ ที่คล้ายกัน) และนั่นอาจเป็นสิ่งที่ Igor Sysoev และทีมของมันตระหนักเมื่อนานมาแล้วและเริ่มใช้ส่วนขยายการเขียนโปรแกรมเต็มรูปแบบของ nginx - lua แทนที่จะแก้ไขปัญหาในตัวอ่อนการเขียนโปรแกรม nginx config (นั่นคือ เหตุใดจึงเป็นบางส่วนและไม่สมบูรณ์ - ถ้าไม่ได้ให้ อื่นลำดับของ ifs และ ชุดs เป็นนัยเป็นต้น. ทันทีที่คุณต้องการใส่โค้ดในไฟล์ปรับแต่ง nginx คุณควรเริ่มใช้ lua (หรืออย่างอื่น) สามารถเพิ่ม Lua ได้โดยใช้ไฟล์ เปิดโล่ง เวอร์ชัน nginx ซึ่งมี lua ที่สร้างขึ้นอย่างเหมาะสมพร้อมส่วนขยายและตัวอย่างมากมาย หรือเพียงเพิ่มโมดูล thd lua nginx แยกต่างหาก ขึ้นอยู่กับ distro ที่คุณใช้

Nick Hatfield avatar
co flag
ขอบคุณสำหรับข้อมูลเชิงลึก ฉันใช้คอนเทนเนอร์ nginx docker ล่าสุดซึ่งมีเวอร์ชัน 1.14.2 คุณช่วยยกตัวอย่างวิธีแก้ปัญหาข้างต้นด้วย perl หรือ lua ได้ไหม? ขอบคุณ
drookie avatar
za flag
ตัวอย่าง Perl อยู่ใต้ลิงค์แรกที่ฉันให้ไว้
Nick Hatfield avatar
co flag
สุดยอด ขอบคุณ!!
Nick Hatfield avatar
co flag
เฮ้ ฉันอีกแล้ว... ดังนั้นตัวอย่าง perl ดูเหมือนจะแสดงและเหมาะสมกับกรณีการใช้งานที่ลูกค้าส่ง URI เช่น `SoMeThInG` และคำสั่ง perl จะแปลง `nginx.var.uri` ให้เป็นตัวพิมพ์เล็ก สตริง ฉันมีปัญหาในการทำให้สิ่งนี้ใช้ได้กับสถานการณ์ที่ฉันอธิบายไว้ด้านบนที่ผู้ใช้ส่งส่วนหัว HTTP `-H "apikey: SoM3RaNd0m"` และเราจำเป็นต้องจับภาพสิ่งนี้และทำให้เป็นตัวพิมพ์เล็ก แล้วจึงส่ง ไปยังตำแหน่งและจับคู่เป็นตัวพิมพ์เล็กที่นั่น `http_apikey: S0m3RaD0m3` `(perl => http_apikey_lowercase)` `ตำแหน่ง ~ ^/hnt-$http_apikey_lowercase { }`

โพสต์คำตอบ

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