Ho appena scoperto che posso scrivere un vero simple web server usando Python. Ho già un server web Apache mi piacerebbe provare il web server basato su Python su questa macchina. Ma temo di poter avere qualche tipo di conflitto se lo provo. Voglio dire come due web server "decideranno" chi ha bisogno di eseguire il server di una richiesta da un client?Posso eseguire due server Web sullo stesso computer?
risposta
Fa in modo che ascoltino porte diverse e starai bene.
la porta Web predefinita è 80. Quando si apre un po 'url in del browser senza specificare una porta, 80 viene utilizzata per impostazione predefinita.
È possibile configurare il server web per ascoltare una porta diversa, ma poi sarà anche necessario specificare esplicitamente nella url:
http://localhost:8080
Quando si sceglie un attenzione porto di paga che questo particolare numero di porta non è ancora in uso da qualsiasi software installato e funzionante sulla tua scatola. Altrimenti, come hai giustamente intuito, ci sarà un conflitto.
P.S. Solo pochi giorni fa la reinstallazione mi ha impedito di avviare IIS (apparentemente senza motivo). Si è rivelata la nuova versione di Skype occupata questa porta predefinita! Ho dovuto rimuovere la sua impostazione "Usa la porta 80 e 443 come alternativa per le connessioni in entrata".
OK. Esiste una porta predefinita utilizzata dai browser Web? Posso specificare la porta quando provo ad aprire una pagina Web su un server web specifico? – Roman
La porta HTTP predefinita è 80. È possibile specificare le porte nell'URL in questo modo: 'http: // yourserver: portnumber'. –
Il valore predefinito è 80 per HTTP 443 per HTTPS. È possibile specificare un diverso utilizzando: – Ofir
Non è possibile aprire due server Web nella stessa porta (il cui valore predefinito è 80), se si desidera creare due o più server Web, è necessario utilizzare porte diverse.
Se si utilizza un DNS, è possibile configurare facilmente il proprio server Web per rispondere con diversi siti Web a richieste diverse, che potrebbero essere utili se è necessario disporre di siti Web diversi per sottodomini o domini diversi.
HTTP/1.1 per la vittoria –
infatti, grandine HOST-HEADER! – Dal
Un server Web è collegato a una porta specifica. Normalmente, questa è la porta 80. Se la porta non è esplicitamente specificata, questa è la porta che un browser tenterà di colpire.
È possibile ottenere il vostro server alternativo per l'esecuzione su una porta diversa (8080 o 8081 sembrano essere alts popolari per i server web, ma la scelta è vostra).
Ciò impedirà il verificarsi del conflitto. Tutto quello che va alla porta 80 colpisce il tuo vecchio server. Tutto quello che sta per 8080 (o qualsiasi altra porta su cui decidi di avviare il tuo server) colpirà il tuo semplice server python.
di colpire il vostro altro server, utilizzare un URL del tipo: -
i server web non avrebbero voce in capitolo che servizi IT una richiesta di connessione (questo compito è ancora a livello di sistema operativo). Inoltre, senza opzioni socket speciali, il socket deve essere associato a una combinazione unica di interfaccia, indirizzo internet e porta.
Vorrei suggerire di dedicare un server a servire HTTPS (porta 443) richieste.
In questo modo è possibile evitare il conflitto di porte che altri hanno menzionato mentre non richiede agli utenti di digitare qualcosa di strano nei loro browser (numeri di porta arbitrari). È anche possibile che ciascun server reindirizzi il traffico all'altro (ad esempio il server http riceve una richiesta http per un nome host che conosce il server https, in modo che possa reindirizzare la richiesta a https con lo stesso nome host, trasferendo così la richiesta al server appropriato).
Server A:
http://localhost
Server B:
https://localhost
Se si vuole realmente eseguire server separati per testare il software del server vedere le altre risposte, ma ...
Sembra (perché sei uno sviluppatore, non un amministratore di sistema vero?) Si davvero voglio solo eseguire siti Python e PHP sullo stesso computer. Quindi, perdonami se sto leggendo la tua domanda, ma questa configurazione mi consente di eseguire entrambi i tipi di siti sullo stesso computer con la stessa porta (porta 80) in un server, Apache.
Faccio nuove voci nel mio/etc/hosts (o C: \ Windows \ System32 \ drivers \ etc \ hosts su Windows) e puntare a 127.0.0.1:
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
Poi in Apache aggiungo VirtualHosts per ogni sito:
<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>
Così, i siti PHP eseguiti in DocumentRoot
come fanno sempre. E i siti Python funzionano in WSGI. Ed entrambi corrono in Apache. Quindi per testare, aggiungo semplicemente ".local" in qualsiasi browser che sto usando per lavorare sulla mia copia locale.
+1, non risponde alla domanda ma comunque utile e pertinente. – AlexMA
Proprio quello di cui avevo bisogno! Perché mai qualcuno dovrebbe voler far digitare agli utenti un numero di porta? –
Nel caso in cui qualcuno abbia bisogno di due server web diversi. Ad esempio, un'app node.js e un'app php, entrambe pubbliche. Se questi due si trovano sullo stesso server, uno di questi deve ascoltare una porta diversa. – Akis
FWIW, Python dispone di un modulo server Web incorporato (SimpleHTTPServer). La sua porta predefinita è 8000. È possibile eseguirla nella riga di comando utilizzando il comando: python -m SimpleHTTPServer – ianalis