文档表明 apache 的 DocumentRoot 是,/var/www
但我的测试表明它是/var/www/html
哪一个?
DocumentRoot :: /var/www
但我的测试表明它是 /var/www/html
例如
我以 root 身份登录,因此没有 sudo。我运行apt-get purge apache2
then apt-get install apache2
then apt-get autoremove
。
清除和安装可确保我拥有最新的 .conf 文件。如果在任何地方明确设置了 DocumentRoot,那么它将位于 .conf 文件中。
我已经编写了一个 index.html,它指示它是从哪个目录读取的
root@ubuntu:/# cat /var/www/index.html
in var/www
root@ubuntu:/# cat /var/www/html/index.html
in /var/www/html
root@ubuntu:/#
我从我的网络浏览器访问我的服务器或者运行 curl 它显示
root@ubuntu/# curl 127.0.0.1
in /var/www/html
因此,虽然文档说 DocumentRoot 的默认值是 /var/www,但这不是 /var/www。
所以我看了一下,也许它在某个地方被明确设置,所以我会删除它被明确设置的任何地方。
它提到了这两个文件。
root@ubuntu:/etc/apache2# grep -r 'DocumentRoot' .
./sites-available/000-default.conf: DocumentRoot /var/www/html
./sites-available/default-ssl.conf: DocumentRoot /var/www/html
我知道 apache2.conf 会加载这些文件,因为 apache2.conf 中有一些“include..”行,比如IncludeOptional sites-enabled/*.conf
因此我注释掉了这两个配置文件中的每一行。
grep 确认这两行已被注释掉。
root@ubuntu:/etc/apache2# grep -r 'DocumentRoot' .
./sites-available/000-default.conf:# DocumentRoot /var/www/html
./sites-available/default-ssl.conf:# DocumentRoot /var/www/html
我认为它在编辑文件时会自动重新启动 apache2,但以防万一,
root@ubuntu# systemctl restart apache2
root@ubuntu#
没有错误。
root@ubuntu# curl 127.0.0.1
in /var/www/html
(或者类似地使用网络浏览器进行 httping 并在 chrome 中执行 shift-f5 以确保它不会从缓存中加载/以便检查服务器)。它说/var/www/html
)
我想知道是否有一个编译选项提到它,因为我知道 apache2 -V 可以显示例如 .conf 文件的名称..但它没有提到任何 DocumentRoot。
root@ubuntu:/etc/apache2# apache2 -V
[Fri Jan 01 01:09:05.977646 2021] [core:warn] [pid 74438:tid 139927292398656] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 16 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot
Server version: Apache/2.4.41 (Ubuntu)
Server built: 2020-08-12T19:46:17
Server's Module Magic Number: 20120211:88
Server loaded: APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
作为另一项测试,我尝试了一个更简约的 apache2.conf 版本
#ServerRoot "/usr/httpd"
ServerRoot "/etc/apache2"
# LoadModule..........
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
# Port to Listen on
Listen *:80
# In a basic setup httpd can only serve files from its document root
#DocumentRoot "/usr/httpd/htdocs"
#DocumentRoot "/usr/apache2/"
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
重新启动服务器以防万一有必要。
curl 127.0.0.1 仍然显示/var/www/html