2010-02-23 19 views
15

Python kullanarak gerçekten simple web server yazabileceğimi öğrendim. Python tabanlı web sunucusunu bu makinede denemek istediğim bir Apache web sunucusuna sahibim. Ama korkarım ki, denemem gerekirse bir çeşit anlaşmazlık yaşayabilirim. İstemciden bir sunucuya kimin ihtiyaç duyduğunu iki web sunucusunun "karar vermesi" ne demek istedim?Aynı bilgisayarda iki web sunucusu çalıştırabilir miyim?

+0

FWIW, Python yerleşik bir web sunucusu modülüne (SimpleHTTPServer) sahiptir. Varsayılan bağlantı noktası 8000'dir. Komut satırında komut satırında çalıştırabilirsiniz: python -m SimpleHTTPServer – ianalis

cevap

26

Farklı portları dinlemelerini sağlayın ve iyi olursunuz. Eğer noktası belirtmeden tarayıcıda bazı url açtığınızda

varsayılan web portu 80'dir, 80 varsayılan olarak kullanılır.

farklı bir bağlantı noktasına dinlemek için web sunucusu yapılandırabilirsiniz ama o zaman da url açıkça belirtmek gerekir: bu özel port numarası

http://localhost:8080 

bir liman ödeme dikkati seçerek olmadığını henüz kutunuzda yüklü ve çalışan herhangi bir yazılım tarafından kullanılıyor. Aksi halde, doğru tahmin ettiğiniz gibi, bir çatışma olacak.

P.S. Sadece birkaç gün önce yeniden yükleme yapıyordum IIS'yi başaramadım (görünüşte sebepsiz). Skype'ın yeni sürümü bu varsayılan bağlantı noktasını kapatarak çıktı! "Bağlantı 80 ve 443'ü gelen bağlantılar için alternatif olarak kullan" ayarını kaldırmak zorunda kaldı. İki veya daha fazla web sunucuları yapmak isteyen varsa

+0

Tamam. Web tarayıcıları tarafından kullanılan varsayılan bir bağlantı noktası var mı? Belirli bir web sunucusunda bir web sayfasını açmaya çalıştığımda bağlantı noktasını belirtebilir miyim? – Roman

+0

Varsayılan HTTP bağlantı noktası 80'dir. URL'deki bağlantı noktalarını şu şekilde belirtebilirsiniz: 'http: // sunucunuz: portnumber'. –

+0

HTTPS için HTTP 443 için varsayılan değer 80'dir. Farklı bir tane belirtebilirsiniz: – Ofir

1

Sen (80 varsayılan) aynı limanda iki web sunucuları açamıyor, farklı bağlantı noktalarını kullanmak zorunda.

Eğer bir DNS kullanıyorsanız, web sunucunuzu farklı web sitelerine farklı isteklerle yanıt verebilecek şekilde kolayca ayarlayabilir, böylece farklı alt siteler veya farklı alanlar için farklı web sitelerine sahip olmanız gerekebilir.

+1

HTTP/1.1 –

+0

kazanmak için HOST-HEADER! – Dal

7

Bir web sunucusu belirli bir bağlantı noktasına bağlıdır. Normalde, bu port 80'dir. Bağlantı noktası açıkça belirtilmemişse, bu bir tarayıcının vurmaya çalışacağı bağlantı noktasıdır.

işlemi, alternatif sunucu, farklı bir bağlantı noktasına (8080 veya 8081 web sunucuları için popüler eklenik tuzlar gibi görünüyor, ama seçim sizin) üzerinde çalışacak şekilde alabilirsiniz.

Bu, çakışmanın olmasını engeller. 80 numaralı bağlantı noktasına giden her şey eski sunucunuza ulaşır. 8080'e (veya sunucunuzu çalıştırmaya karar verdiğiniz bağlantı noktası) giden her şey basit python sunucunuza çarpacaktır.

http://localhost:8080/

1

web sunucularının bağlantı istek Hizmetleri kim hiç söz olurdu (bu görev işletim sistemi düzeyinde hala) -:

diğer sunucunuz vurmak için, gibi bir URL kullanın. Ayrıca, özel soket seçenekleri olmadan, soketin benzersiz bir arayüz, internet adresi ve port kombinasyonuna bağlı olması gerekir.

0

Bir sunucuyu https (bağlantı noktası 443) isteklerine hizmet vermeye adamanızı öneririm. Ayrıca tarayıcılarında (keyfi bağlantı noktası numaraları) içine garip bir şey yazmak için kullanıcıların ihtiyaç duymaz

Bu yolla liman çatışma diğerleri de söylediğim önleyebilirsiniz. Hatta her sunucunun diğerine trafiği yeniden yönlendirmesini sağlayabilirsiniz (ör. Http sunucusu, https sunucu tanıtıcılarını bildiği bir ana bilgisayar adı için bir http isteği alır, böylece isteği aynı ana bilgisayar adı ile https'ye yönlendirebilir ve böylece isteği uygun sunucu).

Sunucu A:

http://localhost 

Sunucu B:

https://localhost 
8
aslında diğer yanıtları görmek sunucu yazılımını test etmek ayrı sunucular çalıştırmak istiyorsanız

, ama ...

Kulağa hoş geliyor (çünkü sen bir geliştiricisin, bir sysadmin değil mi?) gerçekten sadece aynı bilgisayarda Python ve PHP sitelerini çalıştırmak istiyor. Öyleyse, sorunuzu okuyorsam beni bağışla, ama bu kurulum aynı bilgisayardaki her iki siteyi aynı sunucuda (port 80) bir sunucuda, Apache'de çalıştırmamı sağlıyor. ve 127.0.0.1 na yönlendirmek:

G/hosts dosyası (\ Windows \ System32 \ drivers \ Windows üzerinde etc \ hosts veya C): Benim/etc yeni girişler yapmak Apache Sonra

127.0.0.1  localhost 

# development projects 
127.0.0.1  somephpsite.com.local 
127.0.0.1  www.somephpsite.com.local 
127.0.0.1  otherpythonsite.com.local 
127.0.0.1  www.otherpythonsite.com.local 

her site için VirtualHosts ekleyin: hep olduğu gibi

<VirtualHost *:80> 
    DocumentRoot "/Library/WebServer/Documents" 
    ServerName localhost 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/SomeSite/somephpsite.com"> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/SomeSite/somephpsite.com" 
    ServerName somephpsite.com.local 
    ServerAlias www.somephpsite.com.local 
    ErrorLog "/Users/Robert/Projects/SomeSite/error.log" 
    CustomLog "/Users/Robert/Projects/SomeSite/access.log" common 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/OtherSite/otherpythonsite.com"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/OtherSite/otherpythonsite.com/static" 
    Alias /(.*(\.css|\.gif|\.ico|\.jpg|\.js|\.pdf|\.txt)) /Users/Robert/Projects/OtherSite/otherpythonsite.com/static/$1 
    WSGIScriptAlias//Users/Robert/Projects/OtherSite/otherpythonsite.com/wsgi.py 
    ServerName otherpythonsite.com.local 
    ServerAlias www.otherpythonsite.com.local 
    ErrorLog "/Users/Robert/Projects/OtherSite/error.log" 
    CustomLog "/Users/Robert/Projects/OtherSite/access.log" common 
</VirtualHost> 

Yani, PHP siteleri DocumentRoot çalışır. Ve Python siteleri WSGI'da çalışır. Ve ikisi de Apache'de çalışıyorlar. Sonra test etmek için, yerel kopyanımda çalışmakta olduğum her tarayıcıya ".local" ekledim.

+2

+1, soruya cevap vermez ama yine de yararlı ve alakalıdır. – AlexMA

+3

Sadece ihtiyacım olan şey! Neden bir kullanıcı bir bağlantı noktası numarasına sahip olmak ister? –

+0

Sadece birinin iki farklı web sunucusuna ihtiyacı varsa. Örneğin, her ikisi de bir node.js uygulaması ve bir php uygulaması. Eğer bu ikisi aynı sunucudaysa, bunlardan biri farklı portu dinlemelidir. – Akis

İlgili konular