วิธีการถ้า / อื่นคำสั่งที่มี nginx conf?


9

เป็นไปได้ไหมที่จะทำสิ่งนี้กับ nginx

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}

คุณอาจต้องการที่จะมีลักษณะที่เป็นโมดูลแผนที่
gf_

2
คุณเขียนอะไรที่แปลกและไร้ความหมาย พยายามที่จะเริ่มต้นจากจุดเริ่มต้นสิ่งที่คุณต้องการแก้ปัญหา
Alexey Ten

คำตอบ:


9

Nginx เขียนโมดูลจะมีifคำสั่ง (ดูเอกสารที่เชื่อมโยงสำหรับตัวอย่าง) elseแต่ไม่ สำหรับเทียบเท่าelseจะเป็นสิ่งที่ไม่ได้แก้ไขด้วยการif

คุณสามารถใช้ifภายในserver { }แต่ไม่ใช่วิธีอื่น ๆ คุณจะไม่ได้เปรียบเทียบเงื่อนไขของคุณถ้าก่อนหน้าคำขอที่ต้องการเซิร์ฟเวอร์อยู่แล้ว มีคุณเท่านั้นที่สามารถแสดงเนื้อหาเมื่อตัวแทนของผู้ใช้ wget(หรือไม่)

โปรดสังเกตว่าคุณไม่ควรใช้ifภายในlocationเพราะอาจใช้งานไม่ได้ตามที่ต้องการ (ดูIf Is Evil )


3

ในรูปแบบที่กำหนดมันจะไม่ทำงาน: การทดสอบ HTTP User-Agent บอกเป็นนัยว่าได้รับคำขอแล้ว เป็นไปได้serverก็ต่อเมื่อมีการกำหนดบางบล็อกไว้แล้ว คุณต้องการเริ่มเซิร์ฟเวอร์ใหม่โดยขึ้นอยู่กับสตริง User-Agent ของคำขอที่คุณได้รับจากที่อื่นหรือไม่?

หากคุณต้องการแสดงเนื้อหาที่แตกต่างให้เปลี่ยนเส้นทางไปยังเส้นทางอื่น ฯลฯ ขึ้นอยู่กับส่วนของคำขอเช่น User-Agent ที่เป็นไปได้เช่นกับhttp://nginx.org/en/docs/http/ngx_http_rewrite_module HTML

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.