Я создал проект в моем домашнем каталоге. Затем я создал виртуальный хост в новом файле httpd conf (я назвал его z-httpd.conf), который я создал в /etc/httpd/conf.d. Проблема в том, что я не могу получить доступ к названному виртуальному хосту, который я создал. Когда я перехожу к myservice.localhost, который я также добавил в / etc / hosts, я получаю ошибку 403. Файл z-httpd.conf выглядит следующим образом:
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
#
# Relax access to content within /var/www.
#
<Directory "/home/johndoe/src">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/home/johndoe/src/webservice">
#
Options Indexes FollowSymLinks
AllowOverride None
#
Require all granted
</Directory>
#Add a virtual host
NameVirtualHost *:80
<VirtualHost *:80>
ServerName myservice.localhost
DocumentRoot /home/johndoe/src/webservice/public
ServerPath /home/johndoe/src/webservice/public
SetEnv APPLICATION_ENV "development"
<Directory /home/johndoe/src/webservice/public>
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Я заверил, что z-httpd.conf включен в основной файл конфигурации Apache, и у меня также есть файл index.php в моем DocumentRoot. Также пробовал setenforce 0
. Тоже не сработало.
conf) я создал в /etc/httpd/conf.d. Проблема в том, что я не могу получить доступ к названному виртуальному хосту, который я создал. Когда я перехожу к myservice.localhost, который я также добавил в / etc / hosts, я получаю ошибку 403. Файл z-httpd.conf выглядит следующим образом:
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
#
# Relax access to content within /var/www.
#
<Directory "/home/johndoe/src">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/home/johndoe/src/webservice">
#
Options Indexes FollowSymLinks
AllowOverride None
#
Require all granted
</Directory>
#Add a virtual host
NameVirtualHost *:80
<VirtualHost *:80>
ServerName myservice.localhost
DocumentRoot /home/johndoe/src/webservice/public
ServerPath /home/johndoe/src/webservice/public
SetEnv APPLICATION_ENV "development"
<Directory /home/johndoe/src/webservice/public>
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Я заверил, что z-httpd.conf включен в основной файл конфигурации Apache, и у меня также есть файл index.php в моем DocumentRoot. Также пробовал setenforce 0
. Тоже не сработало.
conf) я создал в /etc/httpd/conf.d. Проблема в том, что я не могу получить доступ к названному виртуальному хосту, который я создал. Когда я перехожу к myservice.localhost, который я также добавил в / etc / hosts, я получаю ошибку 403. Файл z-httpd.conf выглядит следующим образом:
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
#
# Relax access to content within /var/www.
#
<Directory "/home/johndoe/src">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/home/johndoe/src/webservice">
#
Options Indexes FollowSymLinks
AllowOverride None
#
Require all granted
</Directory>
#Add a virtual host
NameVirtualHost *:80
<VirtualHost *:80>
ServerName myservice.localhost
DocumentRoot /home/johndoe/src/webservice/public
ServerPath /home/johndoe/src/webservice/public
SetEnv APPLICATION_ENV "development"
<Directory /home/johndoe/src/webservice/public>
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Я заверил, что z-httpd.conf включен в основной файл conf Apache, и у меня также есть файл index.php в моем DocumentRoot. Также пробовал setenforce 0
. Тоже не сработало.
Вывод ls -lZa
в DocumentRoot выглядит следующим образом:
drwxr-xr-x. 6 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 16 12:31 .
drwxr-xr-x. 7 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 17 10:23 ..
drwxr-xr-x. 2 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 16 12:31 css
drwxr-xr-x. 2 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 16 12:31 fonts
-rwxr-xr-x. 1 johndoe johndoe unconfined_u:object_r:user_home_t:s0 748 Apr 16 12:31 .htaccess
drwxr-xr-x. 2 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 16 12:31 img
-rwxr-xr-x. 1 johndoe johndoe unconfined_u:object_r:user_home_t:s0 1255 Apr 16 12:31 index.php
drwxr-xr-x. 2 johndoe johndoe unconfined_u:object_r:user_home_t:s0 4096 Apr 16 12:31 js
-rwxr-xr-x. 1 johndoe johndoe unconfined_u:object_r:user_home_t:s0 1032 Apr 16 12:31 web.config
В ответ на один из комментариев я добавляю вывод httpd error_log:
[Tue Apr 17 13:02:45.838159 2018] [core:error] [pid 9883:tid 140703779542784] (13)Permission denied: [client ::1:43674] AH00035: access to / denied (filesystem path '/home/johndoe/src') because search permissions are missing on a component of the path
[Tue Apr 17 13:06:11.389019 2018] [mpm_event:notice] [pid 9879:tid 140704428511232] AH00492: caught SIGWINCH, shutting down gracefully
[Tue Apr 17 13:06:12.498547 2018] [core:notice] [pid 10363:tid 140006580465664] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Tue Apr 17 13:06:12.499134 2018] [suexec:notice] [pid 10363:tid 140006580465664] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
[Tue Apr 17 13:06:12.515517 2018] [lbmethod_heartbeat:notice] [pid 10363:tid 140006580465664] AH02282: No slotmem from mod_heartmonitor
[Tue Apr 17 13:06:12.519962 2018] [mpm_event:notice] [pid 10363:tid 140006580465664] AH00489: Apache/2.4.29 (Fedora) OpenSSL/1.1.0g-fips mod_perl/2.0.10 Perl/v5.26.1 configured -- resuming normal operations
[Tue Apr 17 13:06:12.519991 2018] [core:notice] [pid 10363:tid 140006580465664] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Tue Apr 17 13:29:23.288313 2018] [core:error] [pid 10368:tid 140005758412544] (13)Permission denied: [client ::1:44974] AH00035: access to / denied (filesystem path '/home/johndoe/src') because search permissions are missing on a component of the path
[Tue Apr 17 13:29:29.223311 2018] [core:error] [pid 10368:tid 140005783590656] (13)Permission denied: [client 127.0.0.1:44392] AH00035: access to / denied (filesystem path '/home/johndoe/src') because search permissions are missing on a component of the path
И содержимое .htaccess (находится в public
):
RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting or installed the project in a subdirectory,
# the base path will be prepended to allow proper resolution of
# the index.php file; it will work in non-aliased environments
# as well, providing a safe, one-size fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]
Дополнительная информация:
Версия сервера: Apache / 2.4.29 (Fedora)
kernel-release: 4.15.4-300.fc27.x86_64
Эта ошибка касается разрешений Unix, и это то, что вам нужно проверить. В некоторых случаях это также может быть вызвано SELinux.
В частности, это означает, что Apache не смог выполнить поиск в каталоге где-то над запрошенным файлом, поэтому вам необходимо проверить разрешения на всем пути.
К счастью, в Linux есть Инструмент для этого называется namei
. Запустите namei -l / home / johndoe / src
, и затем вы сможете проверить и исправить разрешения для любого каталога, в котором возникла проблема.
Готов поспорить, это будет выглядеть примерно так:
[johndoe@localhost src]$ namei -l /home/johndoe/src
f: /home/johndoe/src
dr-xr-xr-x root root /
drwxr-xr-x root root home
drwx------ johndoe johndoe johndoe
drwxr-xr-x johndoe johndoe src
Теперь проблема очевидно: каталог / home / johndoe
не имеет разрешений на поиск никому, кроме владельца. Вы, очевидно, исправите это с помощью chmod + x /home/johndoe[1138361 sizes.[1275 sizes). Вам также необходимо проверить логическое значение SELinux
httpd_read_user_content
. Без этого логического значения веб-сервер не сможет получить доступ ни к чему в домашних каталогах пользователей.
[root@localhost ~]$ semanage boolean -l | grep httpd_read_user_content
httpd_read_user_content (off , off) Allow httpd to read user content
Если он выключен, как в этом примере, включите его.
[root@localhost ~]$ setsebool -P httpd_read_user_content on
Это связано с тем, что вам явно запрещен доступ Apache к каталогу '/', что не является необходимым
AH00035: access to / denied (filesystem path '/home/johndoe/src') because search permissions are missing on a component of the path
Удалите это
<Directory />
AllowOverride none
Require all denied
</Directory>
Я также хотел бы спросить, почему вы добавили виртуальный хост, а не просто добавили это к конфигурации по умолчанию - поскольку вы слушаете все IP-адреса порта по умолчанию *: 80
, а также почему вы обслуживаете файлы из своего домашнего каталога. - Apache не владеет этим каталогом / var / www / - вам необходимо будет изменить владельца и, возможно, группу, а также установить правильные разрешения.
chown -R apache:apache /home/johndoe/src
&
chmod -R 755 /home/johndoe/src