2008-09-17 23 views
3

Tek bir ortak Python web çerçevesinden (örn: Pylons, TurboGears, vb.) Birden çok siteyi çalıştırma yolları iyi (veya en az zeki) nelerdir? URI'yi siteye özgü bir yere işaret edecek şekilde yeniden yazma yolunu veya yolunu temel alan yönlendirme yapabileceğinizi biliyorum ve ayrıca kaçınmak istediğim "if site == 'site1'/elseif/elseif/etc" adlı bir "brütish" gördüm.Tek bir Python web çerçevesinden birden çok siteyi çalıştırma

cevap

8

Django yerleşiktir. Bkz. the sites framework.

Genel bir teknik olarak, veri tabanına özgü olmasını istediğiniz verilere eklenmiş veritabanı şemanınızda bir 'ana makine' sütunu ekleyin, ardından veri aldığınızda sorguya Host HTTP üstbilgisini ekleyin.

2

CherryPy'yi web sunucum olarak kullanıyorum (Turbogears ile birlikte gelir) ve ben de localhost'a bağlı farklı portlarda CherryPy web sunucusunun birden çok örneğini çalıştırıyorum. Ardından, HTTP isteğine bağlı olarak istekleri doğru bağlantı noktasına iletmek için mod_proxy ve mod_rewrite ile Apache'yi yapıyorum.

1

Yerel bağlantı noktalarında birden çok sunucu örneği kullanmak iyi bir fikirdir, ancak HTTP isteklerini yeniden yönlendirmek için tam özellikli bir web sunucusuna ihtiyacınız yoktur.

İşi yapmak için pound'u ters bir proxy olarak kullanırdım. Küçük, hızlı, basit ve tam olarak burada ihtiyacımız olan şeyi yapıyor.

NEDİR POUND:

  1. Bir ters proxy: bir veya daha fazla arka uç sunuculara istemci tarayıcılarından isteklerini geçer.
  2. yük dengeleyici: oturum bilgilerini saklarken istekleri birkaç arka uç sunucu arasında istemci tarayıcılardan dağıtacaktır.
  3. Bir SSL sarıcısı: Pound, istemci tarayıcılardan HTTPS isteklerinin şifresini çözecek ve bunları arka uç sunuculara düz HTTP olarak iletecektir.
  4. HTTP/HTTPS dezenfektanı: Pound, doğruluk isteklerini doğrulayacak ve yalnızca iyi oluşturulmuş olanları kabul edecektir.
  5. başarısız bir sunucu üzerinden: bir arka uç sunucusu başarısız olursa, Pound gerçeği dikkate alır ve kurtarılana kadar istekleri iletmeyi durdurur.
  6. istek yeniden yönlendirici: istekleri, istenen URL'ye göre sunucular arasında dağıtılabilir. mod_python ile apache üzerinde Django kullanarak
6

, ben sadece şu apache yapılandırma ile çoklu (ilgisiz) django sitelerini barındırmak: Birden apache örnekleri veya proxy sunucular için

<VirtualHost 1.2.3.4> 
     DocumentRoot /www/site1 
     ServerName site1.com 
     <Location /> 
       SetHandler python-program 
       SetEnv DJANGO_SETTINGS_MODULE site1.settings 
       PythonPath "['/www'] + sys.path" 
       PythonDebug On 
       PythonInterpreter site1 
     </Location> 
</VirtualHost> 

<VirtualHost 1.2.3.4> 
     DocumentRoot /www/site2 
     ServerName site2.com 
     <Location /> 
       SetHandler python-program 
       SetEnv DJANGO_SETTINGS_MODULE site2.settings 
       PythonPath "['/www'] + sys.path" 
       PythonDebug On 
       PythonInterpreter site2 
     </Location> 
</VirtualHost> 

gerek yok. Her site için farklı bir PythonInterpreter yönergesi kullanmak (girdiğiniz ad isteğe bağlıdır) ad alanlarını ayrı tutar.

İlgili konular