Я пытаюсь настроить два поддомена с помощью apache 2.4, но мне кажется, что есть проблема, которую я не могу решить.
Вот файл конфигурации apache
<VirtualHost *:80>
ServerName www.subdomain1.myweb.com
ServerAlias subdomain1.myweb.com
DocumentRoot /srv/webapps/mywebapp
<Directory /srv/webapps/mywebapp>
AllowOverride all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.subdomain2.myweb.com
ServerAlias subdomain2.myweb.com
DocumentRoot /srv/webapps/mywebapp2
<Directory /srv/webapps/mywebapp2>
AllowOverride all
Options -MultiViews
Require all granted
</Directory>
Я попытался определить ServerName, но проблему не решил:
ServerName www.myweb.com
И попытался использовать IP-адрес сервера в VirtualHost, используя подстановочные знаки, используя домен в теге VirtualHost и т.д ... Все еще работало по желанию :(
Дело в том, что сервер apache subdomain1.myweb.com, но subdomain.myweb.com не надо. Единственный способ, которым я не могу обслуживать оба поддомена, это настройки последнего как:
<VirtualHost *:80>
ServerName www.myweb.com
ServerAlias myweb.com
DocumentRoot /srv/webapps/mywebapp2
<Directory /srv/webapps/mywebapp2>
AllowOverride all
Options -MultiViews
Require all granted
</Directory>
Таким образом, я могу обслуживать один поддомен, а другой - в корневом пути, но это не желаемое поведение.
Я предполагаю, что каким-то образом apache соответствует запросу с первым subdmain, не знаю почему.
Apache показывает это как отображение виртуальных серверов:
VirtualHost configuration:
*:80 is a NameVirtualHost
default server www.myweb.com
port 80 namevhost www.myweb.com
alias subdomain1.myweb.com
port 80 namevhost www.subdomain2.myweb.com
alias subdomain2.com
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/srv/http"
Main ErrorLog: "/var/log/httpd/error_log"
Mutex proxy: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex proxy-balancer-shm: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Заранее спасибо!
РЕДАКТИРОВАТЬ
httpd.conf в основном конфигурация по умолчанию, потому что у меня эта проблема возникла с первого момента, и я еще ничего не настраивал, кроме виртуальных хостов.
ServerRoot "/ etc / httpd"
Listen 80
<IfModule unixd_module>
User http
Group http
</IfModule>
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/srv/http"
<Directory "/srv/http">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "/var/log/httpd/error_log"
LogLevel warn
<Directory "/srv/http/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
# Multi-language error messages
Include conf/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
Include conf/extra/httpd-autoindex.conf
# Language settings
Include conf/extra/httpd-languages.conf
# User home directories
Include conf/extra/httpd-userdir.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# Various default settings
Include conf/extra/httpd-default.conf
#PHP
Include conf/extra/php5_module.conf
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
http-vhosts.conf совпадает с исходным вопросом
httpd-default.conf
#
# This configuration file reflects default settings for Apache HTTP Server.
#
# You may change these, but chances are that you may not need to.
#
#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 60
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5
#
# UseCanonicalName: Determines how Apache constructs self-referencing
# URLs and the SERVER_NAME and SERVER_PORT variables.
# When set "Off", Apache will use the Hostname and Port supplied
# by the client. When set "On", Apache will use the value of the
# ServerName directive.
#
UseCanonicalName Off
#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
# directive.
#
AccessFileName .htaccess
#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of: Full | OS | Minor | Minimal | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Full
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of: On | Off | EMail
#
ServerSignature Off
#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off
#
# Set a timeout for how long the client may take to send the request header
# and body.
# The default for the headers is header=20-40,MinRate=500, which means wait
# for the first byte of headers for 20 seconds. If some data arrives,
# increase the timeout corresponding to a data rate of 500 bytes/s, but not
# above 40 seconds.
# The default for the request body is body=20,MinRate=500, which is the same
# but has no upper limit for the timeout.
# To disable, set to header=0 body=0
#
<IfModule reqtimeout_module>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
Я пытался играть с http-default.conf изменение UseCanonicalName или Имя хоста чтобы дать им шанс, но пока ничего не работает ...
РЕШЕНИЕ
Наконец, похоже, что это была проблема конфигурации DNS, а не конфигурация виртуального хоста.
Использование в этом случае доменов Google, просто добавление пользовательской записи ресурса для каждого поддомена и указание на IP-адрес, который будет обрабатывать запрос (в моем случае тот же сервер, который будет обрабатывать запрос с виртуальными хостами, как показывает OP) , заставил это работать.
Спасибо вам всем!
Я заметил, что в вашем субдомене 2 вы не включили домен. Не уверен, что это только в конфиге здесь или в вашем. Выполняли ли вы перезагрузку службы httpd (или перезагрузку службы apache2 в зависимости от ОС). Ваш DNS указывает на ваш IP-адрес с использованием этих доменных имен?
TL; DR удалить www
www уже является поддоменом example.com.
так что вы, безусловно, можете определить домены 3-го или 4-го уровня из своего исходного домена. Но вы, скорее всего, не хотите, чтобы что-то .www.yourdomain.com было вашим субдоменом.
Вам, вероятно, понадобится subdomain.yourdomain.com, поэтому просто удалите wwww.
Еще не тестировал вашу конфигурацию, поэтому не знаю, как обстоят дела с остальными.