Можно ли запустить два веб-сервера на одном компьютере?

Я только что узнал, что могу написать действительно простой веб-сервер использование Python. У меня уже есть веб-сервер Apache, я хотел бы попробовать веб-сервер на основе Python на этой машине. Но я боюсь, что могу получить какой-то конфликт, если я попытаюсь. Я имею в виду, как два веб-сервера будут "решать", кому нужен сервер запроса от клиента?

6 ответов


заставьте их слушать разные порты, и все будет в порядке.

веб-порт по умолчанию-80. При открытии url-адреса в браузере без указания порта по умолчанию используется 80.

вы можете настроить свой веб-сервер для прослушивания другого порта, но тогда вам также нужно будет явно указать его в url:

http://localhost:8080

при выборе порта обратите внимание, что этот конкретный номер порта не используется программное обеспечение, которое вы установили и бегу по твоей коробке. В противном случае, как вы правильно догадались, возникнет конфликт.

P.S. всего несколько дней назад, делая переустановку, я не смог запустить IIS (по-видимому, без причины). Оказалось, что новая версия Skype заняла этот порт по умолчанию! Пришлось удалить его параметр "использовать порт 80 и 443 в качестве альтернативы для входящих соединений".


веб-сервер привязан к определенному порту. Обычно это порт 80. Если порт не указан явно,это порт, который браузер будет пытаться ударить.

вы можете заставить ваш альтернативный сервер работать на другом порту (8080 или 8081, похоже, популярны для веб-серверов, но выбор за вами ).

Это остановит конфликт. Все, что идет на порт 80, попадает на ваш старый сервер. Все идет к 8080 (или любому порту, который вы решите запустить свой сервер) поразит ваш простой сервер python.

чтобы попасть на другой сервер, используйте URL-адрес: -

http://localhost:8080/


Если вы действительно хотите запустить отдельные серверы для тестирования серверного программного обеспечения, см. другие ответы, но...

Это звучит так (потому что вы разработчик, а не сисадмин, верно?) ты действительно просто хочу запустить сайты Python и PHP на одном компьютере. Итак, простите меня, если я читаю ваш вопрос, но эта настройка позволяет мне запускать оба типа сайтов на одном компьютере с одним портом (порт 80) на одном сервере Apache.

Я делаю новые записи в моем файле/etc / hosts (или C:\Windows\System32\drivers\etc\hosts в Windows) и укажите их на 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

затем в Apache добавляю 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/
    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 " в любом браузере, который я использую для работы с моей локальной копией.


вы не можете открыть два веб-сервера в одном порту (по умолчанию 80), если вы хотите сделать два или более веб-серверов, вы должны использовать разные порты.

Если вы используете DNS, Вы можете легко настроить свой веб-сервер для ответа с разными веб-сайтами на разные запросы, что может быть полезно, если вам нужно иметь разные веб-сайты для поддоменов или разных доменов.


веб-серверы не будут иметь права голоса в том, кто обслуживает запрос на подключение (эта задача все еще находится на уровне операционной системы). Кроме того, без специальных опций сокета сокет должен быть привязан к уникальному сочетанию интерфейса, интернет-адреса и порта.


Я бы предложил вам выделить один сервер для обслуживания запросов https (порт 443).

таким образом, вы можете избежать конфликта портов, о котором упоминали другие, а также не требовать от пользователей вводить что-либо странное в свои браузеры (произвольные номера портов). Вы даже можете перенаправить трафик каждого сервера на другой (например, http-сервер получает http-запрос для имени хоста, который он знает, что сервер https обрабатывает, поэтому он может перенаправить запрос на https с тем же именем хоста, таким образом, передача запроса на соответствующий сервер).

Сервер A:

http://localhost

Сервер B:

https://localhost