我在 Ubuntu 18.04 下运行 Apache 2.4
我遇到了这个问题,我在浏览器栏上输入的所有地址都会被重定向到一我已经配置了两个网站(在这种情况下,每当我输入应该重定向到的地址时other-site
,我只会显示下面的网站jekyll
。)
例如:
- 在浏览器上输入内容
jekyll
,正如预期的那样,显示了 jekyll 网站 other-site
在浏览器上打字还向我展示了 jekyll 网站,即使有另一个 VirtualHost 正在监听该名称
我有这些两个独立的站点配置为 VHost /etc/apache2/sites-available
(两者均已启用通过a2ensite
)
jekyll.conf
<VirtualHost *:80> DirectoryIndex index.html DocumentRoot /var/www/jekyll/_site LimitRequestFieldSize 48000 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/jekyll/_site> AllowOverride All Order allow,deny allow from all </Directory> <Directory /var/www/jekyll/_site/> Order allow,deny allow from all </Directory> ServerName jekyll ServerName http://jekyll ServerName http://localhost/jekyll ServerAdmin webmaster@localhost </VirtualHost>
其他站点配置文件
<VirtualHost *:80> DirectoryIndex index.html DocumentRoot /var/www/other-site/_site LimitRequestFieldSize 48000 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/other-site/_site> AllowOverride All Order allow,deny allow from all </Directory> <Directory /var/www/other-site/_site/> Order allow,deny allow from all </Directory> ServerName other-site ServerName http://other-site ServerName http://localhost/other-site ServerAdmin webmaster@localhost </VirtualHost>
我还添加了这些条目,/etc/hosts
以便本地主机重定向到每个站点:
127.0.0.1 localhost
127.0.0.1 localhost/jekyll
127.0.0.1 localhost/other-site
127.0.0.1 jekyll
127.0.0.1 other-site
127.0.1.1 felipe-Inspiron-7559
答案1
Apache 配置文件中的属性ServerName
不需要重复,因为每个后续行都会替换前面的行。
相反,你可以ServerName
像ServerAlias
这样使用:
ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local
请注意,这是不合逻辑的:
127.0.0.1 localhost/jekyll
127.0.0.1 localhost/other-site
这些不是域(或子域),而是 下的路径localhost
。因此,只会localhost
观察到 。这就是为什么我没有将其包含在 Apache 配置中(如上所述)。
因此,考虑到这一点,你可以三Apache 配置文件:
⇢000-jekyll.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local
DirectoryIndex index.html
DocumentRoot /var/www/jekyll/_site
LimitRequestFieldSize 48000
<Directory /var/www/jekyll/_site>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/jekyll-error.log
CustomLog ${APACHE_LOG_DIR}/jekyll-access.log combined
</VirtualHost>
⇢001-other.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName other-site
ServerAlias other-site.local *.other-site *.other-site.local
DirectoryIndex index.html
DocumentRoot /var/www/other-site/_site
LimitRequestFieldSize 48000
<Directory /var/www/other-site/_site>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/other-error.log
CustomLog ${APACHE_LOG_DIR}/other-access.log combined
</VirtualHost>
⇢999-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localhost
ServerAlias *.localhost * *.*
DirectoryIndex index.html
DocumentRoot /var/www
LimitRequestFieldSize 48000
<Directory /var/www>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/local-error.log
CustomLog ${APACHE_LOG_DIR}/local-access.log combined
</VirtualHost>
Apache 根据配置文件的顺序处理流量。因此,任何与 中指定的域匹配的域000-jekyll.conf
都将由该文件处理。如果未找到匹配项,则将001-other.conf
检查。如果未找到匹配项,则将999-default.conf
使用。请注意文件ServerAlias
中的999-default.conf
以及它如何依赖于开放通配符。这意味着它将被视为与定义的配置文件不匹配的流量的捕获器。
笔记:Apache 配置文件经过简化,消除了不相关的Directory
块,并让每个主机使用自己的错误日志。