yeniden yazma yoluyla HTTP POST isteklerini iletmek için nginx nasıl alabilirim?


19

İOS uygulamam şu anda A etki alanına http POST aracılığıyla erişiyor, ancak tüm istekleri B etki alanına iletmek istiyorum.

Her zamanki rewrite ^/(.*)$ http://mydomain/$1 permanent;gibi POST verileri kayboluyor gibi görünüyor.

NginX kullanarak HTTP POST verilerini farklı bir alana nasıl aktarabilirim?

Yanıtlar:


32

Bunun yerine ters proxy desteğini kullanmayı deneyin . Örnek bir locationbölüm şöyle olabilir:

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

Bu örnek, bu serverbloğa gelen tüm istekleri çalışan ikinci bir sunucuya geçirecektir localhost:8080. Bu POST, bir sorun haline gelirse diğer istek türlerini de korur ve korumalıdır.

Sorun, harici yönlendirmelerin aslaPOST verileri yeniden göndermeyecek olmasıdır . Bu HTTP spesifikasyonuna yazılır (3xx bölümünü kontrol edin). Bunu yapan herhangi bir müşteri spesifikasyonu ihlal ediyor.

301/302 durum kodu GET veya HEAD dışındaki bir isteğe yanıt olarak alınırsa, kullanıcı aracısı, kullanıcı tarafından onaylanmadıkça isteği otomatik olarak yeniden yönlendirmemelidir ZORUNLU, bu, isteğin verildiği koşulları değiştirebilir .

Çoğu tarayıcının, yeniden yönlendirilen isteği bir GETistek olmaya zorlayarak bunu uyguladığından oldukça eminim . Teorik olarak, teknik özellik, kullanıcıya POSTverileri yeniden yönlendirip yönlendirmeyeceğini soracak bir tarayıcıya izin verir , ancak şu anda bunu yapanların farkında değilim.


Awsome! cazibe gibi çalışır
— Jiho Kang

biraz yorum karıştı. Genellikle proxy_set_headerdeğerleri ayarlamak ister miyim ? Aksi takdirde uzak adresin proxy sunucusunun uzak adresi haline geldiğini düşünüyorum ama istemcimin uzak adresi genellikle istediğim doğru mu?
— Georgios Pligoropoulos

Beni kurtaran cevap için teşekkürler! Nginx'i, posta isteklerini uwsgi'ye doğru bir şekilde geri gönderecek, ancak http modunda uwsgi çalıştırmak yerine soketlerle geçirecek bir yol var mı?
— Greg Jennings

@GregJennings Yanıt için biraz geç, ancak biri 'proxy_pass' yerine 'uwsgi_pass' yönergesini kullanır. Her ihtimale karşı başka biri dolaşıyor ...
— Kamilion

1
@ proxy_redirectİki argüman alacak. Dokümanlara bakın: nginx.org/tr/docs/http/…
— Matthew Scharley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.