当我试图通过浏览器访问localhost时,我得到这个错误。
AH01630: client denied by server configuration
我检查了我的网站文件夹权限使用:
sudo chmod 777 -R *
这是我的配置文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/user-name/www/myproject
<Directory />
Options FollowSymLinks
AllowOverride all
Allow from all
</Directory>
<Location />
Allow from all
Order Deny,Allow
</Location>
<Directory /home/user-name/www/myproject/>
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 all
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 all
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
这花了我一些摆弄,让这个工作在我自己的FreeBSD服务器运行..
FreeBSD 13
Apache 2.4
Python 3.8
LetsEncrypt
. .但最终我想出了一个可行的VirtualHost:
<VirtualHost *:443>
ServerName mysite.mydomain.com
DocumentRoot "/usr/local/www/apache24/data/mysite
WSGIDaemonProcess mysite python-path=/usr/local/www/apache24/data/mysite/venv/lib/python3.8/site-packages/
WSGIProcessGroup mysite
WSGIScriptAlias / /usr/local/www/apache24/data/mysite/core/wsgi.py
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem"
<FilesMatch "\.(cgi|shtml|phtml|php|py)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/usr/local/www/apache24/data/mysite/log/py-ssl.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
CustomLog "/usr/local/www/apache24/data/mysite/log/py-access.log" combined
ErrorLog "/usr/local/www/apache24/data/mysite/log/py-error.log"
<Directory "/usr/local/www/apache24/data/mysite">
AllowOverride All
Options +ExecCGI
Require all granted
Allow from all
</Directory
</VirtualHost>
如果你像我一样尝试了上面所有的答案,但都没有帮助,记得检查你的apache2.conf是否有像IncludeOptional conf-enabled/*.conf这样的行,然后检查该文件夹中的每个.conf文件。
我的有一个security.conf文件,其中包括这部分(需要删除/修改,以不阻止我需要运行的.php文件):
<FilesMatch "^(wp-config\.php|php\.ini|php5\.ini|install\.php|php\.info|readme\.md|README\.md|readme\.html|bb-config\.php|\.htaccess|\.htpasswd|readme\.txt|timthumb\.php|error_log|error\.log|PHP_errors\.log|\.sv$
Require all denied
</FilesMatch>
我不知道这个文件来自哪里,除非在某个时候我掉进了一个兔子洞,试图保护我的apache配置,找到这个conf,添加它,然后完全忘记了它。
确保包括任何特定于用户的配置!
如果这一页上的其他答案都不适合你,下面是我在几个小时的挣扎后遇到的。
我使用了特定于用户的配置,在/private/etc/apache2/extra/httpd-userdir.conf中将Sites指定为我的UserDir。但是,我被禁止访问端点http://localhost/~jwork/。
我可以在/var/log/apache2/error_log中看到对/Users/jwork/Sites/的访问被阻止。但是,我被允许通过http://localhost/访问DocumentRoot。这表明我没有权限查看~jwork用户。但据我所知,ps aux | egrep '(apache|httpd)'和lsof -i:80, apache是为jwork用户运行的,所以很明显没有使用我的用户配置编写一些东西。
给定一个名为jwork的用户,下面是我的配置文件:
二等兵/ etc / apache2 \用户/ jwork上。
<Directory "/Users/jwork/Sites/">
Require all granted
</Directory>
这个配置完全有效。然而,我发现我的用户配置没有被包括在内:
/私人/ etc /输入/多/ httpd-userdir.conf
## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/apache2/users/*.conf
注意,这是userdir conf文件的默认路径,但正如您将在下面看到的,它是在httpd.conf中可配置的。确保下列行已启用:
/ / etc / apache2 /私人httpd.conf
Include /private/etc/apache2/extra/httpd-userdir.conf
# ...
LoadModule userdir_module libexec/apache2/mod_userdir.so
我在新服务器上设置虚拟主机时遇到了这个问题,并且站点托管在标准的/var/www/html路径之外。您需要考虑两件主要的事情(例如,假设您正在/opt/my-site中设置一个站点)
在默认的2.4安装中,会显式地拒绝访问根文件系统,然后只允许访问/var/www/html。所以你需要给web服务器从新目录读取的权限,就像这样:
<Directory /opt/mysite>
Require all granted
</Directory>
完成此操作后,请确保虚拟主机的DocumentRoot位于上面授予访问权限的路径下的某个位置。
<VirtualHost *:80>
ServerName neatwebsite.com
DocumentRoot /opt/my-site/html
</VirtualHost>
当我遇到这个问题时,我已经设置好了所有的VirtualHosts,但忘记允许从目录结构中读取(所以我错过了指令)。您需要考虑这两个指令,以及它们如何协同工作。