非常にシンプルなファイルサーバーシステムをセットアップしています。 nginxをインストールし、ルートディレクトリを/home
に設定して、ユーザーのホームディレクトリからファイルを提供できるようにします。
しかし、ブラウザでhttp://12.34.56.78/user1/testfile.bin
経由でファイルをダウンロードしようとすると、「403 Forbidden」と表示されます。ブラウザでhttp://12.34.56.78/
に接続すると、/home/
に入力したデフォルトのインデックスページが表示されます。
Nginxがユーザーディレクトリからファイルを提供するようにするにはどうすればよいですか?例えば.
/home/user1
/home/user2
さらに、ルートディレクトリを除外したい場合
/home
およびシステムファイル
.bash_history
.bash_profile
.bashrc
(たとえば、名前がドットで始まるすべてのファイル)
提供されているファイルから?
Nginxには、ユーザーのファイルを読み取る権限がありません。また、すべてのユーザーファイルをWeb上で公開することは非常に悪い考えです。
より良いアイデアは、ユーザーのホームディレクトリで 専用ディレクトリを提供する のみにすることです。
/<USER>
にアクセスするときに各ユーザーフォルダーのwww
フォルダーを提供するには、次の場所を使用します。
location ~ ^/(.+?)(/.*)?$ {
alias /home/$1/www$2;
index index.html index.htm;
autoindex on;
}
Nginxがこのディレクトリにアクセスすることも許可する必要があります。
$ chmod 0755 /home/$USER/www
多くの場合、403エラーは権限の問題が原因です。 Webディレクトリ内のファイルは誰でも読み取り可能である必要があり(chmod 644または664)、ディレクトリは誰でも読み取り可能で実行可能である必要があります(chmod 755または775)。
上記のすべての答えは有効な説明を与えます。これまで述べられていないのは、error 403
は、キャッシュの設定によっては、キャッシュが原因で、正しい権限を設定した後でも保持される場合があります。
これが当てはまらないことを確認するには、キャッシュをリセットします。
rm -r /path/to/nginx/cache/*
systemctl restart nginx