2010-02-23 166 views
15

我剛剛發現我可以用Python編寫一個真正的simple web server。我已經有了一個Apache Web服務器,我想在這臺機器上嘗試基於Python的Web服務器。但是如果我嘗試一下,我恐怕會遇到某種衝突。我的意思是兩個Web服務器如何「決定」誰需要從客戶端請求服務器?我可以在同一臺計算機上運行兩臺Web服務器嗎?

+0

FWIW,Python有一個內置的web服務器模塊(SimpleHTTPServer)。它的默認端口是8000.您可以使用以下命令在命令行中運行它:python -m SimpleHTTPServer – ianalis 2010-02-23 17:00:53

回答

26

讓他們聽聽不同的端口,你會沒事的。

默認的Web端口爲80.當您在瀏覽器中打開某個URL而未指定端口時,默認情況下使用80。

你可以配置你的Web服務器監聽到一個不同的端口,但那麼你也將需要在URL中明確指定:

http://localhost:8080 

當選擇一個端口注意,這個特殊的端口號是不是尚未被您安裝並運行在您的盒子上的任何軟件使用。否則,正如你猜對的那樣,會有衝突。

P.S.就在前幾天做重新安裝我得到IIS無法啓動(似乎沒有理由)。原來Skype的新版本佔用了這個默認端口!必須刪除其設置「使用端口80和443作爲傳入連接的替代品」。

+0

OK。 Web瀏覽器是否有默認端口?當我嘗試打開特定Web服務器上的網頁時,可以指定端口嗎? – Roman 2010-02-23 16:16:20

+0

默認的HTTP端口是80.您可以在URL中指定端口,例如:http:// yourserver:portnumber。 – 2010-02-23 16:21:04

+0

HTTPS的HTTP 443的默認值爲80。您可以指定一個不同的: – Ofir 2010-02-23 16:21:10

1

如果您希望製作兩個或更多Web服務器,則無法在同一端口中打開兩個Web服務器(默認值爲80),您必須使用不同的端口。

如果您使用的是DNS,您可以輕鬆設置您的網絡服務器,以針對不同的請求響應不同的網站,如果您需要針對子域或不同的域使用不同的網站,這可能會非常有用。

+1

HTTP/1.1爲贏得 – 2010-02-23 16:18:01

+0

確實,冰雹主機頭! – Dal 2010-02-23 16:47:33

7

Web服務器綁定到特定端口。通常情況下,這是端口80.如果沒有明確指定端口,則這是瀏覽器嘗試點擊的端口。

你可以讓你的備用服務器在不同的端口上運行(8080或8081似乎是Web服務器的流行選擇,但選擇是你的)。

這將停止發生衝突。所有到端口80的東西都會擊中你的舊服務器。一切到8080(或任何您決定運行您的服務器的端口)將打擊您的簡單的Python服務器。

打你的其他服務器,使用URL,如: -

http://localhost:8080/

1

的Web服務器會在誰服務的連接請求沒有發言權(這個任務仍然是在操作系統級別)。此外,沒有特殊的套接字選項,套接字必須綁定到接口,互聯網地址和端口的唯一組合。

0

我建議你專用一臺服務器來提供https(端口443)請求。

這樣你就可以避免別人提到的端口衝突,同時也不要求用戶在瀏覽器中輸入任何奇怪的東西(任意端口號)。甚至可以讓每個服務器將流量重定向到另一個服務器(例如,http服務器接收到一個它知道https服務器處理的主機名的http請求,以便它可以使用相同的主機名將請求重定向到https,從而將請求傳輸到適當的服務器)。

服務器A:

http://localhost 

服務器B:

https://localhost 
8

如果你真的想運行單獨的服務器來測試服務器軟件看到其他的答案,但...

這聽起來像(因爲你是一個開發人員,而不是一個系統管理員吧?)你真的只是想在同一臺計算機上運行Python和PHP網站。所以,如果我正在閱讀你的問題,請原諒我,但這種設置允許我在同一臺計算機上使用同一端口(端口80)在一臺服務器上運行兩種站點,即Apache。

我使我的/ etc新條目/ hosts文件(或C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ Windows上等\主機),並將其指向127.0.0.1:在Apache中

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 

然後我想補充VirtualHosts爲每個站點:

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

因此,PHP站點運行在DocumentRoot就像他們總是這樣。 Python站點運行在WSGI中。他們都在Apache運行。然後進行測試,我只需在我用於處理本地副本的任何瀏覽器中添加「.local」。

+2

+1,並沒有回答這個問題,但仍然有用且相關。 – AlexMA 2012-05-05 21:07:12

+3

正是我需要的!爲什麼有人想讓用戶鍵入一個端口號? – 2014-02-05 19:42:03

+0

以防萬一有人需要兩臺不同的網絡服務器。例如一個node.js應用程序和一個php應用程序,都是公共的。如果這兩個服務器在同一臺服務器上,其中一臺必須監聽不同的端口。 – Akis 2015-05-28 06:19:19

相關問題