ฉันสามารถนามแฝงคำขอไดเรกทอรีทั้งหมดไปยังไฟล์เดียวใน nginx ได้หรือไม่


9

ฉันพยายามหาวิธีนำคำขอทั้งหมดไปยังไดเรกทอรีเฉพาะและคืนค่าสตริง json โดยไม่เปลี่ยนเส้นทางใน nginx

ตัวอย่าง:

curl -i http://example.com/api/call1/

ผลลัพธ์ที่คาดหวัง:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/json
Date: Fri, 13 Apr 2012 23:48:21 GMT
Last-Modified: Fri, 13 Apr 2012 22:58:56 GMT
Server: nginx
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 38
Connection: keep-alive

{"logout": true}

นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ใน nginx conf:

location ~ ^/api/(.*)$ {
    index /api_logout.json;
    alias /path/to/file/api_logout.json;
    types { }
    default_type "application/json; charset=utf-8";
    break;
}

อย่างไรก็ตามเมื่อฉันพยายามที่จะทำให้คำขอประเภทเนื้อหาไม่ติด:

$ curl -i http://example.com/api/call1/
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/octet-stream
Date: Fri, 13 Apr 2012 23:48:21 GMT
Last-Modified: Fri, 13 Apr 2012 22:58:56 GMT
Server: nginx
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 38
Connection: keep-alive

{"logout": true}

มีวิธีที่ดีกว่าในการทำเช่นนี้? ฉันจะทำให้แอปพลิเคชัน / json ประเภทติดได้อย่างไร

แก้ไข: ทางออก!

ฉันคิดว่าคุณสามารถส่งสตริงเองได้ในคำสั่ง return ดังนั้นฉันก็ทำได้แทนที่จะใช้นามแฝง!

รหัสสุดท้ายที่ฉันใช้:

location /api {
    types { }
    default_type "application/json";
    return 200 "{\"logout\" : true"}";
}

คำตอบ:


2

คุณสามารถใช้การเขียนซ้ำเพื่อรับพฤติกรรม catchall

location /logout.json {
    alias /tmp/logout.json;
    types {
        application/json json;
    }
}
rewrite ^/api/.* /logout.json;

สิ่งนี้ไม่ได้นำคุณไปสู่ ​​/logout.json หรือไม่ ฉันพยายามหลีกเลี่ยงการส่งการตอบสนองการเปลี่ยนเส้นทาง 302
749618

ไม่มีที่ภายในเขียน การเปลี่ยนเส้นทางจะถูกส่งเฉพาะเมื่อมีการระบุตำแหน่งที่แน่นอนหรือระบุredirectหรือpermanentตั้งค่าสถานะ
mgorven

0

ง่ายมาก. การกำหนดค่าทั้งหมดอาจเป็น:

# default.conf
# Add file here: /etc/nginx/html/logout.json

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.