Можно ли запустить два веб-сервера на одном компьютере?
Я только узнал, что могу написать действительно простой веб-сервер, используя Python. У меня уже есть веб-сервер Apache, я бы хотел попробовать веб-сервер на Python на этом компьютере. Но я боюсь, что смогу получить какой-то конфликт, если попробую. Я имею в виду, как два веб-сервера "решат", кому необходимо отправить запрос от клиента?
Ответы
Ответ 1
Заставьте их слушать разные порты, и все будет в порядке.
Веб-порт по умолчанию - 80. Когда вы открываете некоторый URL-адрес в браузере без указания порта, по умолчанию используется 80.
Вы можете настроить свой веб-сервер для прослушивания другого порта, но тогда вам также нужно будет указать его явно в URL-адресе:
http://localhost:8080
При выборе порта обратите внимание, что данный номер порта еще не используется никаким программным обеспечением, которое вы установили и используете на своем поле. В противном случае, как вы правильно догадались, возникнет конфликт.
P.S. Всего несколько дней назад, переустановка я получил IIS не в состоянии начать (казалось бы, без причины). Оказалось, что новая версия Skype заняла этот порт по умолчанию! Чтобы удалить его настройку, используйте "Использовать порт 80 и 443 в качестве альтернативы входящим соединениям".
Ответ 2
Если вы действительно хотите запускать отдельные серверы для тестирования программного обеспечения сервера, см. другие ответы, но...
Звучит так (потому что вы разработчик, а не системный администратор)? Вы действительно просто хотите запустить 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/$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" в любом браузере, который я использую для работы с моей локальной копией.
Ответ 3
Веб-сервер привязан к определенному порту. Обычно это порт 80. Если порт явно не указан, это порт, который браузер попытается ударить.
Вы можете заставить свой альтернативный сервер работать на другом порту (8080 или 8081, похоже, популярны для веб-серверов, но выбор за вами).
Это остановит конфликт. Все, что происходит до порта 80, попадает на ваш старый сервер. Все, что происходит до 8080 (или любого другого порта, на котором вы решили запустить свой сервер) попадет на ваш простой сервер python.
Чтобы попасть на другой сервер, используйте URL-адрес, например: -
http://localhost:8080/
Ответ 4
Вы не можете открыть два веб-сервера в одном и том же порту (по умолчанию 80), если вы хотите создать два или более веб-серверов, вам нужно использовать разные порты.
Если вы используете DNS, вы можете легко настроить веб-сервер для ответа на различные веб-сайты на разные запросы, что может быть полезно, если вам нужно иметь разные веб-сайты для поддоменов или разных доменов.
Ответ 5
Веб-серверы не могли бы сказать, кто обслуживает запрос на соединение (эта задача все еще находится на уровне операционной системы). Кроме того, без специальных опций сокета, сокет должен быть привязан к уникальной комбинации интерфейса, интернет-адреса и порта.
Ответ 6
Я предлагаю вам выделить один сервер для обслуживания запросов https (порт 443).
Таким образом, вы можете избежать конфликта портов, о котором говорили другие, а также не требовать, чтобы пользователи вводили что-то странное в свои браузеры (произвольные номера портов). Вы даже можете перенаправить трафик на другой сервер (например, http-сервер получает HTTP-запрос имени хоста, который знает сервер https-сервера, поэтому он может перенаправлять запрос на https с тем же именем хоста, тем самым перенося запрос на соответствующий сервер).
Сервер A:
http://localhost
Сервер B:
https://localhost