Назад | Перейти на главную страницу

Virtualhost не работает на другом порту

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