2010-02-23 26 views
15

Acabo de enterarme de que puedo escribir realmente simple web server usando Python. Ya tengo un servidor web Apache. Me gustaría probar el servidor web basado en Python en esta máquina. Pero me temo que puedo tener algún tipo de conflicto si lo intento. Me refiero a cómo dos servidores web "decidirán" quién necesita enviar una solicitud a un cliente.¿Puedo ejecutar dos servidores web en la misma computadora?

+0

FWIW, Python tiene un módulo de servidor web integrado (SimpleHTTPServer). Su puerto predeterminado es 8000. Puede ejecutarlo en la línea de comando usando el comando: python -m SimpleHTTPServer – ianalis

Respuesta

26

Haz que escuchen diferentes puertos y estarás bien.

El puerto web predeterminado es 80. Cuando abre algunas URL en el navegador sin especificar un puerto, 80 se usa de forma predeterminada.

Puede configurar el servidor web para escuchar a un puerto diferente, pero entonces también tendrá que especificar explícitamente en la url:

http://localhost:8080 

Al elegir un prestar atención puerto que este número de puerto en particular no es aún en uso por cualquier software que haya instalado y ejecutado en su caja. De lo contrario, como adivinó correctamente, habrá un conflicto.

P.S. Hace unos días, haciendo la reinstalación, no conseguí que IIS pudiera comenzar (aparentemente sin razón). Resultó que la nueva versión de Skype ocupaba este puerto predeterminado. Tuvo que eliminar su configuración "Usar el puerto 80 y 443 como alternativas para las conexiones entrantes".

+0

OK. ¿Hay un puerto predeterminado utilizado por los navegadores web? ¿Puedo especificar el puerto cuando intento abrir una página web en un servidor web específico? – Roman

+0

El puerto HTTP predeterminado es 80. Puede especificar puertos en la URL de la siguiente manera: 'http: // yourserver: portnumber'. –

+0

El valor predeterminado es 80 para HTTP 443 para HTTPS. Puede especificar uno diferente usando: – Ofir

1

No puede abrir dos servidores web en el mismo puerto (que por defecto es 80); si desea crear dos o más servidores web, debe usar puertos diferentes.

Si está utilizando un DNS, puede configurar fácilmente su servidor web para responder con diferentes sitios web a diferentes solicitudes, que podrían ser útiles si necesita tener diferentes sitios web para subdominios o dominios diferentes.

+1

HTTP/1.1 para win –

+0

de hecho, granizar HOST-HEADER! – Dal

7

Un servidor web está vinculado a un puerto específico. Normalmente, este es el puerto 80. Si el puerto no está explícitamente especificado, este es el puerto que un navegador intentará alcanzar.

Puede hacer que su servidor alternativo se ejecute en un puerto diferente (8080 o 8081 parecen ser populares para servidores web, pero la elección es suya).

Esto detendrá el conflicto. Todo lo que va al puerto 80 golpea tu antiguo servidor. Todo lo que vaya a 8080 (o el puerto en el que decida ejecutar su servidor) llegará a su servidor de python simple.

para que alcance su otro servidor, usar una URL como: -

http://localhost:8080/

1

Los servidores web no tendrían voz en servicios informáticos que una solicitud de conexión (esta tarea se encuentra todavía en el nivel del sistema operativo). Además, sin opciones de socket especiales, el socket debe estar vinculado a una combinación única de interfaz, dirección de Internet y puerto.

0

Le sugiero que dedique un servidor a atender las solicitudes de https (puerto 443).

De esta forma puede evitar el conflicto de puerto que otros han mencionado y al mismo tiempo no requerir que los usuarios escriban nada extraño en sus navegadores (números de puerto arbitrarios). Incluso puede hacer que cada servidor redirija el tráfico al otro (por ejemplo, el servidor http recibe una solicitud http de un nombre de host que conoce el servidor https, por lo que puede redirigir la solicitud a https con el mismo nombre de host, transfiriendo así la solicitud al servidor apropiado).

Servidor A:

http://localhost 

servidor B:

https://localhost 
8

Si realmente desea ejecutar servidores separados para poner a prueba el software de servidor de ver las otras respuestas, pero ...

Parece (porque eres un desarrollador, no un administrador de sistemas ¿verdad?) realmente solo quieres ejecutar sitios de Python y PHP en la misma computadora. Entonces, perdóneme si leo su pregunta, pero esta configuración me permite ejecutar ambos tipos de sitios en la misma computadora con el mismo puerto (puerto 80) en un servidor, Apache.

hago nuevas entradas en/etc/hosts (o C: \ Windows \ System32 \ drivers \ etc anfitriones \ en Windows) y el punto de 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 

Luego, en Apache añado VirtualHosts para cada sitio:

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

por lo tanto, los sitios PHP se ejecutan en el DocumentRoot como siempre lo hacen. Y los sitios de Python se ejecutan en WSGI. Y ambos corren en Apache. Luego, para probar, solo agrego ".local" en el navegador que estoy usando para trabajar en mi copia local.

+2

+1, no responde la pregunta pero útil y relevante de todos modos. – AlexMA

+3

¡Justo lo que necesitaba! ¿Por qué alguien querría que los usuarios escriban un número de puerto? –

+0

Por si acaso alguien necesita dos servidores web diferentes. Por ejemplo, una aplicación node.js y una aplicación php, ambas públicas. Si estos dos están en el mismo servidor, uno de ellos debe escuchar un puerto diferente. – Akis

Cuestiones relacionadas