Pertanyaan bagaimana cara mendapatkan nginx untuk meneruskan permintaan HTTP POST melalui penulisan ulang?


Aplikasi iOS saya saat ini mengakses domain A melalui http POST tetapi saya ingin meneruskan semua permintaan ke domain B.

Jika saya menggunakan yang biasa rewrite ^/(.*)$ http://mydomain/$1 permanent; data POST tampaknya hilang.

Bagaimana saya bisa mengirimkan data HTTP POST ke domain yang berbeda menggunakan NginX?


15
2017-09-16 08:41






Jawaban:


Coba gunakan dukungan reverse proxy sebagai gantinya. Sebuah contoh location bagian akan menjadi:

location / {
  proxy_pass      http://localhost:8080;
  proxy_redirect  http://localhost:8080/ /;
  proxy_read_timeout 60s;

  # May not need or want to set Host. Should default to the above hostname.
  proxy_set_header          Host            $host;
  proxy_set_header          X-Real-IP       $remote_addr;
  proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
}

Contoh ini akan melewati semua permintaan untuk ini server blok ke server kedua berjalan di localhost:8080. Ini bertahan POSTdan juga harus mempertahankan jenis permintaan lain juga jika itu menjadi masalah.

Masalahnya adalah bahwa pengalihan eksternal akan tak pernah kirim ulang POST data. Ini ditulis ke dalam spesifikasi HTTP (periksa bagian 3xx). Setiap klien yang melakukan hal ini melanggar spesifikasi.

Jika kode status 301/302 diterima sebagai tanggapan atas permintaan selain GET atau HEAD, agen pengguna TIDAK HARUS secara otomatis mengalihkan permintaan kecuali jika dapat dikonfirmasi oleh pengguna, karena ini mungkin mengubah kondisi di mana permintaan dikeluarkan .

Saya cukup yakin bahwa sebagian besar browser menerapkan ini dengan hanya memaksa permintaan diarahkan menjadi GET permintaan. Secara teoritis, spesifikasi ini memungkinkan untuk browser yang akan meminta pengguna apakah akan mengarahkan ulang POST data, tetapi saya tidak mengetahui apa pun yang saat ini dilakukan.


25
2017-09-16 08:48



awsome! bekerja seperti pesona - Jiho Kang
Berhasil. Terima kasih banyak. - hudolejev
sedikit bingung dari komentar. Apakah saya biasanya ingin mengatur proxy_set_header nilai-nilai? Kalau tidak, saya kira bahwa alamat jauh menjadi alamat jauh dari server proxy tetapi apa yang biasanya saya inginkan adalah alamat jauh dari klien, benar? - Georgios Pligoropoulos
Terima kasih atas jawaban yang menyelamatkan saya! Apakah ada cara untuk mengatur nginx sehingga melewati permintaan posting dengan benar kembali ke uwsgi tetapi dengan soket bukannya menjalankan uwsgi dalam mode http? - Greg Jennings