Bagaimana saya bisa mengonfigurasi lokasi nginx untuk berbagi opsi konfigurasi umum?


37

Bagaimana saya bisa mengkonfigurasi blok konfigurasi bersama untuk satu set lokasi?

    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;
    }

Sekarang jika saya mencoba mengakses /api/0.1/user maka saya akan mendapatkan 404 karena tidak meneruskan permintaan ke 127.0.0.1:9000

Jawaban:


54

Buat konfigurasi proxy yang umum dan sertakan sesuai kebutuhan.

/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;

File Konfigurasi Host Anda

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

1
+1, tetapi hanya satu catatan: ternyata Anda dapat menyertakan sejumlah konfigurasi dengan cara ini termasuk seluruh lokasi nginx.org/en/docs/ngx_core_module.html#include
setara dengan 8


11

Sebagian besar variabel konfigurasi proxy_ * juga diperbolehkan dalam konteks server, sehingga Anda dapat memindahkannya untuk berbagi pengaturan yang sama di beberapa lokasi.

Namun, proxy_pass hanya boleh digunakan di dalam lokasi. Jadi Anda harus memiliki setidaknya arahan ini di setiap lokasi, secara opsional mengesampingkan nilai beberapa proxy__ vars tambahan.


Ini tidak akan berfungsi jika Anda memiliki proxy_set_headerarahan khusus lokasi karena "Arahan ini diwarisi dari tingkat sebelumnya jika dan hanya jika tidak ada arahan proxy_set_header yang ditentukan pada level saat ini." nginx.org/en/docs/http/…
Emerson Farrugia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.