私のローカルDebianにApacheを設定しました。提示インストールしましたが、VirtualHostを操作できませんでした。アクセスがhttp://localhost
正しく機能して表示されます。効果がある!ページ。
ただし、アクセスしようとすると、http://test
403 Forbiddenエラーが表示されます。
このサーバーに/アクセスする権限がありません。
私の構成は非常に一般的に見えます。
<VirtualHost *:80>
DocumentRoot "/home/johndoe/web/test"
ServerName test
<Directory "/home/johndoe/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
答え1
はじめに:
これにはいくつかの理由があり、この質問はStack Exchangeで何度も要求されました。しかし、私が知っている限り、答えは(直接的に)この質問に対処したり、不正確または古い情報に基づいているわけではありません。
これらの(正しく許可された)回答の多くは、設定されたディレクトリDocumentRoot
と含まれるファイルとディレクトリの権限または所有権をwww-data
。
ただし、最新のDebianまたはUbuntuのローカルインストール(デフォルトのWeb開発目的など)について話している場合は、これ以上必要ありません。
ログを見てみましょう!
エラーページ自体には非常に一般的なメッセージのみが含まれているため、詳細についてはエラーログを確認する必要があります。
sudo tail -f /var/log/apache2/error.log
このtail
コマンドはファイルの最後の10行を出力します。この-f
オプションを使用すると、ログが大きくなるにつれて出力が更新されます。
ログは私たちに何を伝えますか?
client denied by server configuration: /home/johndoe/web/test
これは簡単です。説明どおりApache: サーバー構成によってクライアントが拒否されました。Require all granted
設定で構成を更新するだけです。それでは、次のようになります。
<VirtualHost *:80>
DocumentRoot "/home/johndoe/web/test"
ServerName test
<Directory "/home/johndoe/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
次のコマンドを使用してApacheを再起動することを忘れないでください。
sudo service apache2 restart
エラーが続く...
ただし、ログメッセージが変更されました。
Symbolic link not allowed or link target not accessible: /home/johndoe/web/test
この質問にはいくつかの原因がある可能性があるため、少し複雑です。実際の原因を見つけるには、シンボリックリンクを含むターゲットを使用せずに、代わりにターゲットを直接指すように構成を更新することをお勧めします。これは/home/johndoe/web
シンボリックリンクなので、/media/johndoe/crypt1/web
設定は次のようになります。
<VirtualHost *:80>
DocumentRoot "/media/johndoe/crypt1/web/test"
ServerName test
<Directory "/media/johndoe/crypt1/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
固定されていますか?
ログメッセージがより説明的なメッセージに変更された可能性があります。私の場合は、次のように表示されます。
access to / denied (filesystem path '/media/johndoe/crypt1') because search permissions are missing on a component of the path
ここに別のメッセージが表示され、すでに機能しているソリューションがある場合は、ここにコメントを残して適切な議論にリンクして、他の人が正しい情報を見つけることができるようにすることをお勧めします。
今?
メッセージが示すように、パスの1つ以上のコンポーネントを通過できないため、Apacheはパスに完全にアクセスできません。どのコンポーネントが問題を引き起こす可能性があるかを確認するには、次のようにします。
namei -m /media/johndoe/crypt1/web/test/
このnamei
コマンドはパスコンポーネントを分離して印刷し、オプションを使用してコマンドと-m
同じスタイルで各コンポーネントのモードビットを表示しますls -l
。
私にとって、出力は次のようになります。
f: /media/johndoe/crypt1/web/test/
drwxr-xr-x /
drwxr-xr-x media
drwxr-x--- johndoe
drwxr-xr-x crypt1
drwxr-xr-x web
drwxr-xr-x test
johndoe
ディレクトリがここで問題を引き起こしているようです。したがって、権限を変更する前にもう少しchmod
詳しく見てみましょう。
ls -ld /media/johndoe/
ls
オプションを含むコマンドは、-d
リスト形式でディレクトリ情報(内容ではありません)を印刷します-l
。
私には次のようになります。
drwxr-x---+ 3 root root 4096 May 28 00:00 /media/johndoe/
ご覧になって+
再度追加の表示があります。アクセス制御リスト参加する。
私は何も設定していないことを確認しながら、ついに正しい方向を指しました。前方十字靭帯私一人で。さらに、メディアマウントポイントも直接設定していないため。私はNautilusを使ってドライブを暗号化してマウントします。
これにより、トリックを実行できます。
したがって、Nautilusはマウントポイントを台無しにするのではなく、手動でマウントします。
1) すでにマウントされている場合は削除します。
sudo umount /media/johndoe/crypt1
2)すぐ下にマウントポイントを作成します/media
。
sudo mkdir /media/crypt1
3) デバイスマッピングを見つけ、UUID を探します。
ls -l /dev/mapper/
4) 次の手順で装置を取り付けます。
sudo mount /dev/mapper/luks-<UUID> /media/crypt1
5)これに応じて、Apache設定および/またはシンボリックリンクを更新します。たとえば、次のようになります。
ln -s /media/crypt1/web/ ~/web
メモ:
起動するたびにドライブを暗号化してマウントする必要があることに注意してください。 Stack Exchangeには多くの情報がありますが、以下をお勧めします。