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

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

17
задан Roman 23 February 2010 в 16:10
поделиться

6 ответов

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

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

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

http://localhost:8080

При выборе порта обратите внимание, чтобы этот номер порта еще не использовался никакими программами, установленными и запущенными на вашем компьютере. Иначе, как вы правильно догадались, возникнет конфликт.

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

29
ответ дан 30 November 2019 в 10:46
поделиться

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

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

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

Чтобы подключиться к другому серверу, используйте такой URL-адрес: -

http: // localhost: 8080 /

8
ответ дан 30 November 2019 в 10:46
поделиться

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

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

1
ответ дан 30 November 2019 в 10:46
поделиться

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

1
ответ дан 30 November 2019 в 10:46
поделиться

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

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

Сервер A:

http://localhost

Сервер B:

https://localhost
1
ответ дан 30 November 2019 в 10:46
поделиться

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

Похоже (потому что вы разработчик, а не системный администратор, верно?) Вы действительно просто хотят запускать сайты 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 для каждого site:

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

9
ответ дан 30 November 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: