ProxyPass'i nasıl kullanacağımı anlamama yardımcı olun


11

GÜNCELLEME: Aşağıda iki cevapla oynadıktan sonra gözden geçirilmiş bir soru ekledim.

Merhaba,

Bunu okuyorsanız muhtemelen Apache'nin mod_proxy'sini ve ProxyPass işlevini biliyorsunuzdur. Diğerleri gibi, iç ağımızın dışından erişebileceğim bir uygulamaya sahip olma sorunum var, ancak bu uygulamanın kendisi farklı makinelerde diğer dahili uygulamalara erişiyor ve bu kurulumla uzaktan erişime girdiğinizde işler ters gidiyor.

Yani, kurulumum çok basit, bende var:

Makine # 1'in uzaktan erişimi etkin, bir ana bilgisayar adı üzerinden erişiyorum ve üzerinde çalışan PHP uygulamasını tükürüyor.

Makine # 2 Django çalıştıran yeni bir uygulamadır, tamamen farklı bir arka uç (hatta yetki) kullanır, ayrı bir makinede barındırılır. İntranetimizde, temel olarak dahili 192.168.0.101 ipine bağlanan basit bir ana bilgisayar adı ile erişiyoruz.

ProxyPass ile oynamak için denedim, bu yüzden örneğin, / pass yeni uygulamaya gönderir:

ProxyPass / yeni http://192.168.0.101/

Bu tür işler, diğer uygulamaya istek alır, ancak kırılır çünkü Django uygulamam anında tanımadığı / auth / login / dizinine yönlendirmek istiyor. Url'yi foo.net/new/auth/login olarak kendim değiştirirsem giriş sayfamı alıyorum, ancak tahmin edebileceğiniz gibi tarama sırasında bunu yapmak uygun değil.

Peki ProxyPass'ın istediğim gibi çalışmasını nasıl sağlayabilirim? Apache ile bir şey yapmam gerekiyor mu, böylece url diğer uygulamada her zaman yazıyor / yeni mi, yoksa bu Django uygulamamda değiştirmem gereken bir şey mi?

Herhangi bir ipucu ve işaretçiler de büyük mutluluk duyacağız. Zaman ayırdığınız için teşekkürler

Yanıtlar:


11

/ Auth / login yerine / new / auth / login konumunda olmasını beklemek için django uygulamanızı değiştirmelisiniz. Genellikle proxy geçişleriniz şöyle görünmelidir:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

Bu, Django uygulamanızla birleştirildiğinde / new / konumunda olmayı beklerken sorunlarınızı çözmeniz gerekir.


2

Bir VirtualHost kullanın. Örneğin, sunucunuzun A adını (örn. Sub.external.com ) sunucu IP'nize (örneğin 123.456.678 ) ayarlayın

Güvenlik nedeniyle, settings.py'de ProxyPass kullanıyorsanız , # 6880 numaralı Bilet başına açıkça HTTP_HOST iletmeniz gerekir :

USE_X_FORWARDED_HOST = True

Ardından Apache /etc/httpd/httpd.conf dosyasına aşağıdakileri ekleyin :

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

VirtualHost'unuzu /etc/httpd/extra/httpd-vhosts.conf dosyasına ekleyin :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

Artık "yollar" konusunda endişelenmenize gerek kalmadan sitenize http://sub.external.com adresinden erişebileceksiniz.


1

Yanıtlarınız için teşekkürler, bununla oynadıktan sonra bazı düzeltmelere ihtiyaç duyduğundan kendi sorumu yanıtlıyorum.

İlk önce, App # 2 http://192.168.0.101 bitiyor .. ProxyPass oldukça işe yaramayacak şekilde http://192.168.0.101/path bitmiyor

Yani irc'den bazı #apache adamlarıyla konuştuktan sonra, böyle bir şey yapmam gerektiğini buldum:

RewriteCond% {HTTP_HOST} ^ app2.myremotedns.com *

RewriteRule. * Http://192.168.0.101/ [P]

Bunun yaptığı şey, app2.myremotedns.com adresine gelen isteklerin proxy yoluyla dahili ip'e gönderilmesi için bir yeniden yazma kuralı göndermektir.

Bu biraz işe yarıyor ama üç sorunu var:

  • Tüm sayfalarda oturum açma gerekli olduğunda, eğer app2 üzerinde herhangi bir şeye uzaktan erişirsem, / auth / login'e yönlendirir. Bunun Django'nun yönlendirme yöntemleriyle bir ilgisi olabileceğini tahmin ediyorum ama tam olarak emin değilim.

  • Giriş yapmayı devre dışı bırakırsam, sayfalar çalışır, ancak tam olarak çalışmaz. App # 2'nin dizin sayfasını getirebiliyorum ama gerçekten başka bir şey yok

  • Statik medyanın hepsi kırılmış, ancak bu muhtemelen basit bir çözümdür.

Yani, hayal ettiğimden daha karmaşık bir sorunum var ... :)


Varsayılandan farklı herhangi bir django yapılandırması kullanmak çok sorun yaratır. Son zamanlarda blogumda

1
Bu konuda herhangi bir çözüm buldunuz mu? Özellikle vb medya stilleri kaybetme ile tamamen aynı sorunlar var
membersound
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.