Я пытаюсь разместить свой веб-сайт на одном сервере под управлением centos7.1. Я могу подключиться к виртуальному хосту через порт 80
но когда я меняю порт second-site
к 8080
это указывает на first-site
. Однако для URL http://62.210.xx.xx:8080/
он работает правильно, указывая на second-site
.
Я делаю так:
httpd.conf
Listen 80
Listen 8080
also tried
Listen 0.0.0.0:80
Listen 0.0.0.0:8080
but same
commented out for apache 2.4
#NameVirtualHost 62.210.xx.xx:80
#NameVirtualHost 62.210.xx.xx:8080
ServerAdmin root@localhost
#first-site.com
<VirtualHost 62.210.xx.xx:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
#second-site.com
<VirtualHost 62.210.xx.xx:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
netstat -tulpn | grep httpd
tcp6 0 0 :::80 :::* LISTEN 25253/httpd
tcp6 0 0 :::8080 :::* LISTEN 25253/httpd
/etc/host/
62.210.xx.xx www.first-site.com first-site.com www.second-site.com second-site.com
/usr/sbin/httpd -t
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf/httpd.conf:46
Syntax OK
Обновить
apachectl -S
AH00558: httpd: Could not reliably determine the server's fully qualified domain name,
using 62.210.xx.xx. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
62.210.xx.xx:8080 m.second-site.com (/etc/httpd/conf/httpd.conf:427)
62.210.xx.xx:80 is a NameVirtualHost
default server first-site.com (/etc/httpd/conf/httpd.conf:363)
port 80 namevhost first-site.com (/etc/httpd/conf/httpd.conf:363)
alias www.first-site.com
port 80 namevhost image.first-site.com (/etc/httpd/conf/httpd.conf:3 77)
port 80 namevhost m.first-site.com (/etc/httpd/conf/httpd.conf:389)
port 80 namevhost second-site.com (/etc/httpd/conf/httpd.conf:401)
alias www.second-site.com
port 80 namevhost image.second-site.com (/etc/httpd/conf/httpd.conf:415)
port 80 namevhost third-site.com (/etc/httpd/conf/httpd.conf:439)
alias www.third-site.com
port 80 namevhost image.third-site.com (/etc/httpd/conf/httpd.conf:453)
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/etc/httpd/logs/error_log"
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex fcgid-pipe: using_defaults
Mutex authdigest-opaque: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex authdigest-client: using_defaults
Mutex fcgid-proctbl: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="xxxxxxx" id=1000
Group: name="root" id=0
Вам нужно решить, используете ли вы виртуальные хосты на основе имен или на основе IP / портов. В настоящее время вы их перепутали.
Если вы собираетесь размещать серверы на их собственных портах, вам не следует определять NameVirtualHost
для этих портов. Когда вы определяете это для хоста и порта, на которые поступает запрос, apache выбирает конфигурацию virtalhost для использования на основе servername
и serveraliases
.
Я не понимаю, будет ли Apache готов выбрать виртуальный хост на основе имени домена, когда этот блок виртуального хоста определяется с использованием другого IP-адреса / порта. То, что вы описываете, похоже, может быть тем, что происходит.
В твоем /etc/hosts
указанный вами файл first-site.com
и second-site.com
. Ни один из них не является определенным виртуальным хостом, поскольку для тех, которые вы используете www.
префикс. Если вы используете виртуальные хосты на основе имен, вы, вероятно, хотите добавить ServerAlias
директивы к вашим блокам виртуального хоста. Между тем, в вашем первом абзаце используется бесполезное сокращение для сайтов, на которые вы ссылаетесь - вам лучше изменить это, чтобы ссылаться на точные URL-адреса, с которыми у вас возникли проблемы.
Попробуйте сделать Listen
заявление соответствует вашему VirtualHost
.
Если вы хотите привязаться только к общедоступному IP 62.210.xx.xx, используйте его везде.
Listen 62.210.xx.xx:80
Listen 62.210.xx.xx:8080
<VirtualHost 62.210.xx.xx:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
<VirtualHost 62.210.xx.xx:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
--или--
Если вы хотите выполнить привязку ко всем интерфейсам на этом сервере, используйте подстановочные знаки.
Listen 80
Listen 8080
<VirtualHost *:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
<VirtualHost *:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
По сути, Listen
Оператор сообщает apache привязаться к этому IP / порту. При указании 0.0.0.0:80 будет прослушиваться только IPv4-адрес. Указание только номера порта приведет к привязке ко всем интерфейсам на порту 80.
Точно так же, когда приходят пакеты SYN, инструкция VirtualHost пытается сопоставить их на основе Listen
заявления.
То, что вы испытываете, является поведением по умолчанию согласно документации Apache.
Любой запрос на адрес, отличный от 172.20.30.50, будет обслуживаться с главного сервера. Запрос на 172.20.30.50 с неизвестным именем хоста или без заголовка Host: будет обслуживаться с www.example.com.
Таким образом, чтобы иметь возможность достичь second-site.com виртуальный хост, вы должны сделать это через http://second-site.com:8080/ .
Убедитесь, что вы включили эти доменные имена в свой локальный hosts
файл (например, /etc/hosts
, C:\Windows\System32\drivers\etc\hosts
и т. д.), если вы еще не настроили DNS. Если это не вариант, вы также можете настроить динамическое имя хоста с помощью DynDNS или другого поставщика и использовать его для своего ServerName / ServerAlias.
Как уже указывал Иниго Флорес, это поведение apache по умолчанию.
Если ввести в браузере second-site.com, он всегда будет подключаться к порту 80. Если вы хотите получить доступ к другому порту, вам необходимо указать его в URL-адресе, например second-site.com:8080
Если вы хотите получить доступ к своему сайту, например, second-site.com, нет смысла использовать разные порты.
62.210.xx.xx - это IP-адрес вашего сервера или IP-адрес NAT перед вашим сервером? У вас должен быть реальный IP-адрес сервера на VirtualHost и тот, по которому отправляется запрос, если у вас много IP-адресов на сервере.