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.