1

Я хочу запустить сервер Python 3. * и PHP 7. *, работающий рядом друг с другом, используя следующее:

php.localhost
py.localhost

Мой /etc/httpd/conf/httpd.conf:

# Dynamic Shared Object (DSO) Support
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule php7_module modules/libphp7.so
AddHandler php7-script php
Include conf/extra/php7_module.conf
WSGIScriptAlias / /var/www/python/app.py

ServerName localhost

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Полный файл httpd.conf здесь.

Мой /etc/httpd/conf/extra/httpd-vhosts.conf:

<VirtualHost *:80>
    ServerAdmin yesididuse@google.com
    DocumentRoot "/var/www/php"
    ServerName php
    ServerAlias php.localhost
    ErrorLog "/var/log/httpd/php-error.log"
    CustomLog "/var/log/httpd/php-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin yesididuse@google.com
    DocumentRoot "/var/www/python"
    ServerName python
    ServerAlias py.localhost
    ErrorLog "/var/log/httpd/py-error.log"
    CustomLog "/var/log/httpd/py-access.log" common
</VirtualHost>

Мой /etc/hosts:

# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1       php.localhost
127.0.0.1       py.localhost

И мое имя хоста - L702X .

Я в недоумении, я искал поисковые системы, следуя инструкциям, и здесь, похоже, ничего не имеет смысла, например, как можно перейти к 127.0.0.1 по двум разным адресам?

Если мне не хватает файлов конфигурации, прокомментируйте и я добавлю. Любая помощь приветствуется.

2 ответа2

2

как можно по маршруту к 127.0.0.1 перейти на 2 разных адреса

Нет, файл hosts следует интерпретировать с другой стороны: два разных имени переводятся на один и тот же адрес 127.0.0.1 («если вы хотите связаться с py.localhost, свяжитесь с 127.0.0.1») - как два человека, которые делят телефонный номер.

Это никак не влияет на маршрутизацию IP-уровня; это все тот же 127.0.0.1, независимо от того, как он был получен, и пакеты к нему идут одинаково.

(То же самое очень часто делается в Интернете, когда сотни доменов DNS преобразуются в один и тот же IP-адрес веб-сервера.)

Единственная интересная часть заключается в том, как Apache различает HTTP-запросы, принадлежащие разным доменам - это уже повторялось на этом сайте, но короткий ответ заключается в том, что браузеры включают доменное имя в HTTP-запрос (добавляя заголовок Host: HTTP),

1

В дополнение к уже превосходному ответу @ grawity, вы должны помнить, что DNS (или в этом случае ваш файл hosts , который служит той же цели) только отображает имя на IP-адрес - но в этих именах нет никакого ограничения IP-адресов. сопоставления в ip. Пример @ grawity о том, что телефонный номер (IP) может быть доступен для разных людей (имена / программы), является хорошим примером.

Если бы существовало правило сопоставления, в котором один IP-адрес мог использоваться только один раз, вы не могли бы запускать несколько служб (даже разных видов) с одного и того же IP-адреса, что было бы серьезным техническим ограничением. Вам понадобятся отдельные IP-адреса (и, вероятно, серверы) для HTTP, DNS, электронной почты и т.д. И всех поддоменов (например, www.example.com является поддоменом example.com и для него потребуется отдельный IP-адрес от example.com) ,

Поскольку в этих сопоставлениях такого ограничения нет, программы обычно связываются с сервером на разных портах для разделения трафика. Обратите внимание, что порты не включены в записи DNS (или файл hosts ) - это зависит от отдельных частей программного обеспечения, чтобы решить, какие порты они должны использовать для связи. Если на один получено несколько запросов на разные имена (порт 80 или 443 для обычного веб-трафика), то сервер (который в вашем случае находится на 127.0.0.1) должен решить, что делать, например, если он получает запрос на php.localhost или py.localhost .

Именно здесь вступает в действие виртуальный хостинг на основе имен (технически индикация имени сервера [SNI] для HTTPS). Ваш файл виртуальных хостов содержит инструкции для Apache, в которых говорится:«Если мы получим запрос на это имя хоста, сделайте X». Если имя не совпадает, сервер обычно возвращает код состояния HTTP 404 (не найден). Если есть, запись виртуального хоста сообщает серверу, как действовать (обслуживать страницы из этого каталога и т.д.).


Обратите внимание, что ваша запись localhost в ServerName localhost в httpd.conf является хостом по умолчанию. Этот хост иногда обслуживается вместо возврата 404, если в вашем файле виртуальных хостов не найдено подходящего имени хоста.


Всё ещё ищете ответ? Посмотрите другие вопросы с метками .