ฉันจะกำหนดค่าที่ตั้ง nginx เพื่อแชร์ตัวเลือกการกำหนดค่าทั่วไปได้อย่างไร


37

ฉันจะกำหนดค่าบล็อกการตั้งค่าที่ใช้ร่วมกันสำหรับชุดของตำแหน่งที่ตั้งได้อย่างไร

    location / {

            proxy_pass        http://127.0.0.1:9000/;
            proxy_redirect    off;
            proxy_set_header  Host             $http_host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache cache-test;
            proxy_cache_valid 200 302 24h;
            proxy_cache_valid 404 60s;
            add_header X-Cache-Status $upstream_cache_status;

    }


    location /api/0.1/user{
            proxy_cache_key /user/$http_authorization;
    }

ตอนนี้ถ้าฉันพยายามเข้าถึง /api/0.1/user แล้วฉันจะได้รับ 404 เพราะมันไม่ผ่านการร้องขอไปที่ 127.0.0.1:9000

คำตอบ:


53

สร้างการกำหนดค่าพร็อกซีทั่วไปและรวมตามที่ต้องการ

/etc/nginx/api_proxy.conf

proxy_pass        http://127.0.0.1:9000/;
proxy_redirect    off;
proxy_set_header  Host             $http_host;
proxy_set_header  X-Real-IP        $remote_addr;
proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_cache cache-test;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 60s;
add_header X-Cache-Status $upstream_cache_status;

ไฟล์กำหนดค่าโฮสต์ของคุณ

...
location /api/0.1/user {
    include /etc/nginx/api_proxy.conf;
    proxy_cache_key /user/$http_authorization;
}
...

1
+1 แต่เพียงหนึ่งทราบ: จะเปิดออกคุณสามารถรวมทั้งกลุ่มของการกำหนดค่าด้วยวิธีนี้รวมทั้งที่ตั้งของทั้งnginx.org/en/docs/ngx_core_module.html#include
equivalent8

... หรือตัวอย่างของฉันgithub.com/equivalent/scrapbook2/tree/master/examples/
เทียบเท่า

11

ตัวแปรการกำหนดค่า proxy_ * ส่วนใหญ่ยังได้รับอนุญาตภายในบริบทเซิร์ฟเวอร์ดังนั้นคุณสามารถเลื่อนขึ้นเพื่อแชร์การตั้งค่าเดียวกันในหลาย ๆ ที่

อย่างไรก็ตาม proxy_pass ควรใช้ภายในสถานที่เท่านั้น ดังนั้นคุณควรมีคำสั่งนี้อย่างน้อยภายในแต่ละตำแหน่งโดยเลือกที่จะแทนที่ค่าของ proxy_ * vars พิเศษบางอย่าง


สิ่งนี้จะไม่ทำงานหากคุณมีproxy_set_headerคำสั่งเฉพาะตำแหน่งเนื่องจาก "คำสั่งเหล่านี้สืบทอดมาจากระดับก่อนหน้าหากว่าไม่มีคำสั่ง proxy_set_header กำหนดไว้ในระดับปัจจุบัน" nginx.org/en/docs/http/…
Emerson Farrugia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.