我在 Ubuntu 12.04 上,最近安装了一个 apache2 更新,从那时起,所有虚拟主机都没有指向正确的目录,现在指向默认的本地主机。此外,我在 apache2 重新启动时收到错误:
shafox@shafox:~$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message [ OK ].
我知道我没有设置服务器名不是localhost,但是为什么错误消息前面有一个AH00558标记?这是我的系统中可用的站点:
/etc/apache2/sites-available$ ls
000-default.conf default-ssl.conf localbox-local
000-default.conf.dpkg-new devbox-dev sites-si
以前是这样的:
/etc/apache2/sites-available$ ls
000-default default-ssl localbox-local devbox-dev sites-si
例如,其中一个虚拟主机文件如下所示:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localbox.local
DocumentRoot /home/shafox/Localbox
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/shafox/Localbox/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
我不想再次创建所有这些虚拟主机。我已按照本教程创建所有这些虚拟主机。
这是我的 /etc/hosts 文件:
127.0.0.1 localhost
127.0.1.1 shafox
127.0.1.1 devbox.dev
127.0.1.1 localbox.local
127.0.1.1 sites.si
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
来自 apache2 error.log 的错误日志 错误日志链接
答案1
从技术上来说,这不是“错误”……但它是一个警告。以前的 init.d 脚本只会将该警告放入日志中,并且在重新启动时不报告任何内容。该消息是准确的,因为 Apache 无法根据可用信息识别服务器的 fqdn。您可以简单地将其添加到 hosts 文件中的环回接口条目中,如下所示:
127.0.1.1 servername server.fully.qualified.name.tld
或指定服务器名称正如 apache.conf 中的警告所建议的指令:
ServerName www.example.com
此外,如果您决定使用 ubuntu,您确实应该使用 upstart 命令来控制 apache 等服务,而不是 init.d 脚本。像这样:
sudo restart apache2
答案2
在将 Drupal 多站点开发系统升级到 Apache 2.4 后,我遇到了同样的问题。mod_rewrite 根本不起作用。关键是虚拟主机文件中的指令:
<Directory /whatever-path/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
注意允许覆盖全部和要求所有已授予 这与 Apache 2.2 不同
希望这可以帮助。
答案3
我也遇到过这个问题,但用 Diogenes 的相同答案解决了。具体来说,语法被替换了。
从https://httpd.apache.org/docs/trunk/upgrading.html
在此示例中,所有请求都被拒绝。
2.2 配置:Order Deny,Allow Deny from All
2.4 配置:要求全部拒绝
在此示例中,所有请求都被允许。
2.2 配置:命令允许、拒绝允许所有
2.4 配置:要求所有授予
在以下示例中,example.org 域中的所有主机都被允许访问;所有其他主机都被拒绝访问。
2.2 配置:顺序拒绝,允许拒绝所有允许来自 example.org
2.4 配置:需要主机 example.org