Apakah mungkin / bagaimana saya bisa mengkonfigurasi blok lokasi Nginx ke proxy ke backend yang berbeda tergantung pada metode permintaan (mis. GET / POST)?
Alasannya adalah, saya saat ini menangani 2 metode di 2 URL yang berbeda (satu melalui proksi http dan lainnya melalui fcgi) dan saya mencoba membuatnya lebih "REST", jadi, idealnya akan MENDAPATKAN sumber daya untuk mengembalikan daftar. , sementara POSTing ke sumber yang sama harus ditambahkan ke daftar.
if
umumnya berkecil hati dengan dokumentasi Nginx: nginx.com/resources/wiki/start/topics/depth/ifisevilMeskipun Anda bisa mencapai ini
if
, ini umumnya tidak disarankan oleh dokumentasi Nginx , karenaif
tidak cocok dengan arahan lain. Misalnya, anggap GET harus terbuka untuk semua orang, sementara POST hanya untuk pengguna yang diautentikasi, menggunakan HTTP Basic Auth. Itu perluif
dikombinasikan denganauth_basic
, yang tidak berfungsi dengan baik.Berikut adalah alternatif yang berfungsi tanpa
if
. Caranya adalah dengan menggunakan "GET" dan "POST" sebagai bagian dari nama hulu, sehingga ini dapat diatasi dengan substitusi variabel:Untuk menggabungkan ini dengan HTTP Basic Auth untuk segalanya kecuali GET, cukup tambahkan satu
limit_except
blok:sumber
502 gateway error
karenano resolver defined to resolve other_HEAD
(atau apa pun hulu Anda yang hilang). Akan lebih semantik untuk mengembalikan sesuatu seperti405 method not allowed
. Apakah ada cara untuk menyelesaikan ini?Inilah yang saya lakukan untuk membuat semuanya bekerja untuk saya
sumber
Sedikit perubahan pada jawaban vog untuk menyertakan penangan default untuk metode lain seperti PILIHAN, PUT, dll.
sumber
Saya tidak bisa mendapatkan jawaban dari @timmmmmy untuk bekerja, tetapi itu mengarahkan saya ke dokumentasi peta dan ini berhasil bagi saya:
sumber