web-dev-qa-db-ja.com

サブディレクトリからファイルを提供するようにnginxを設定する

非常にシンプルなファイルサーバーシステムをセットアップしています。 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(たとえば、名前がドットで始まるすべてのファイル)

提供されているファイルから?

6

Nginxには、ユーザーのファイルを読み取る権限がありません。また、すべてのユーザーファイルをWeb上で公開することは非常に悪い考えです。

より良いアイデアは、ユーザーのホームディレクトリで 専用ディレクトリを提供する のみにすることです。

/<USER>にアクセスするときに各ユーザーフォルダーのwwwフォルダーを提供するには、次の場所を使用します。

location ~ ^/(.+?)(/.*)?$ {
  alias /home/$1/www$2;
  index  index.html index.htm;
  autoindex on;
}

Nginxがこのディレクトリにアクセスすることも許可する必要があります。

$ chmod 0755 /home/$USER/www
14
Spack

多くの場合、403エラーは権限の問題が原因です。 Webディレクトリ内のファイルは誰でも読み取り可能である必要があり(chmod 644または664)、ディレクトリは誰でも読み取り可能で実行可能である必要があります(chmod 755または775)。

4
darnold0714

上記のすべての答えは有効な説明を与えます。これまで述べられていないのは、error 403は、キャッシュの設定によっては、キャッシュが原因で、正しい権限を設定した後でも保持される場合があります。

これが当てはまらないことを確認するには、キャッシュをリセットします。

rm -r /path/to/nginx/cache/*
systemctl restart nginx
1
deeenes