この質問はよく聞かれますが、私が見た解決策はうまくいきませんでした。
仮想ホストが1つしか有効になっておらず、ドキュメントルートの下にないフォルダーへのアクセスを有効にしようとしています
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /movies /home/username/Videos/Movies
<Directory /home/username/Videos/Movies/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
次のように/etc/Apache2/envvars
を設定します
export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=public
/ home/username/Videos /とそのサブフォルダーがusername:public
によって所有されていることを確認し、パーミッションを777に設定し(775が機能しなかった後)、ユーザーwww-data
がグループに属していることを確認しましたpublic
。
さて、http://localhost/movies
を参照すると
[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path
しかし、/etc/Apache2/envvars
をusername
(自分のユーザー名)の下でApacheを実行するように設定すると、すべて正常に動作します。問題は許可に関連していますが、私の場合はどうなのかわかりません。特に、許可を777
に設定した場合。何か案は?
追伸Ubuntuバージョンは14.04、Apacheは2.4.7で、他の構成ファイルは編集していません。
ユーザーディレクトリでchmod +x
を実行し、Apacheを再起動します。 755パーミッションが機能するはずです。 644で問題が発生しました。
Selinuxが有効になっている場合があります。試してみる
getenforce
「強制」と表示されている場合は、試してください
setenforce 0
これで問題が解決するか試してください。
私は同じ問題に遭遇しましたが、何時間も試した後、解決策が問題を正確に解決することがわかりました:
https://wiki.Apache.org/httpd/13PermissionDenied
基本的に、Apacheサーバーは、提供するすべてのファイルの読み取り権限だけでなく、仮想ホストのパスにあるすべてのディレクトリの実行権限も必要とします。
ユーティリティnameiは、パスの各コンポーネントに沿って権限をリストすることにより、権限の問題を見つけるのに役立ちます。
namei --modes /usr/local/Apache2/htdocs/foo/bar.html
私の場合、私のパス内のディレクトリにはパーミッション700があり、問題が発生します。 701に変更した後、問題は解決しました。
4.10ではなく4.4カーネルを使用しているUbuntu 16.04ホストのdockerコンテナでApacheを実行しようとしたときに、この問題が発生していました。
ホストでこのコマンドを実行して再デプロイすると、大丈夫でした。
Sudo apt-get install --install-recommends linux-generic-hwe-16.04