誰かを助けたいだけです。はい、nginxを使用して静的ファイルを提供したいだけで、nginx.confにすべてが揃っています:
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
しかし、最後に、あなたは失敗しました。ブラウザから「403 forbidden」を取得しました...
----------------------------------------以下の回答:----------------------------------------
ソリューションは非常にシンプルです:
方法1: '/ root/downloads/boxes /'所有者としてユーザーとしてnginxを実行します
Innginx.conf:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
はい、最初の行の「#user noboy;」、「#」を削除し、「nobody "をLinux/OS Xのユーザー名に変更します。つまり、テストのために"root "に変更します。 nginxの再起動。
Attention、nginxをrootとして実行しない方が良いでしょう!ここでは、テストのためだけに、ハッカーにとって危険です。
詳細については、 nginx(engine X)– BUMの痛み![13:許可が拒否されました] を参照してください。
方法2: '/ root/downloads/boxes /'の所有者を 'www-data'または 'nobody'に変更する
InTerminal:
ps aux | grep nginx
実行中のnginxのユーザー名を取得します。 nginxのバージョンによって 'www-data'または 'nobody'で決定されます。次に、ターミナルでヒットします(たとえば 'www-data'を使用):
chown -R www-data:www-data /root/downloads/boxes/
------------------------------もう1つ重要なことは:- ----------------------------
これらの親ディレクトリ "/"、 "/ root"、 "/ root/downloads"execute(x)パーミッションを 'www-data'または 'nobody'に与える必要があります。つまり.
ls -al /root
chmod o+x /root
chmod o+x /root/downloads
詳細については、 「403 Forbidden」エラーの解決 および Nginx 403すべてのファイルで禁止 を参照してください。
ファイルを読み取るには、nginxパーミッションを付与する必要があります。つまり、nginxプロセスを実行するユーザーにファイルを読み取る許可を与える必要があります。
Nginxプロセスを実行するこのユーザーは、通常nginx.conf
の最上部のどこかにあるnginx configのuser
ディレクティブで構成可能です。
user www-data
http://wiki.nginx.org/CoreModule#user
user
に与える2番目の引数はグループですが、指定しない場合はユーザーと同じものを使用するため、この例ではユーザーとグループは両方ともwww-data
です。
これで、nginxで提供するファイルに適切な権限が付与されます。 Nginxには、ファイルを読み取る権限が必要です。グループにwww-data
読み取り許可を与えるには、次のようなファイルを許可します。
chown :www-data my-file.html
http://linux.die.net/man/1/chown
chown
を使用すると、ファイルのユーザーとグループの所有者を変更できます。このコマンドでは、グループのみを変更します。ユーザーも変更する場合は、chown www-data:www-data my-file.html
のようにコロンの前にユーザー名を指定します。ただし、nginxがファイルを読み取れるようにするには、グループのアクセス許可を正しく設定するだけで十分です。
Nginxは静的ファイルを直接処理しているため、適切なディレクトリにアクセスする必要があります。ホームディレクトリの実行許可を与える必要があります。
これを行う最も安全な方法は、Nginxユーザーを独自のユーザーグループに追加することです。その後、ホームディレクトリのグループ所有者に実行可能権限を追加し、Nginxがファイルを提供するための十分なアクセス権を付与します。
Sudo usermod -a -G your_user nginx
chmod 710/home/your_user
受け入れられた答え
Sudo chown -R :www-data static_folder
そのフォルダ内のすべてのファイルのグループ所有者を変更するため
非常に有用な回答を掘り下げた後、レシピとして許可に関連するすべてを収集することにしました。具体的には、最大限のセキュリティを備えた最も簡単なソリューション(=最小限の権限)。
admin
としてサイトを展開するとします。つまり、彼女はサイトdirとその中のすべてを所有します。 notこのユーザーとしてnginxを実行したい(許可が多すぎる)。 prodではなく、テストでも問題ありません。nginx
として実行します。つまり、configにはuser nginx
nginx
は同じ名前のグループnginx
にあります。nginx
に最小限の権限を付与したいと考えています。これは最も安全なナイーブオプションのようです。静的ファイルを提供するには、フォルダ階層で最低限必要なアクセス許可(グループのアクセス許可を参照)は次のようにする必要があります(コマンドnamei -l /home/admin/WebProject/site/static/hmenu.css
):
dr-xr-xr-xルートルート/
drwxr-xr-xルートルートホーム
drwxr-x --- admin nginx admin
drwx--x --- admin nginx WebProject
drwx--x --- admin nginxサイト
drwx--x --- admin nginx static
-rwxr ----- admin nginx hmenu.css
次に、この美しい写真を取得する方法は? DIRのグループ所有権を変更するには、最初にSudo chown :nginx /home/admin/WebProject/site/static
その後、コマンドを繰り返して、右から順にディレクトリを削除します。
DIRのアクセス許可を変更するには、Sudo chmod g+x /home/admin/WebProject/site/static
そして再びディレクトリを削除します。
/ static dir内のファイルのグループを変更します:Sudo chown -R :nginx /home/admin/WebProject/site/static
最後に、/ static dir内のファイルのアクセス許可を変更します:Sudo chmod g+r /home/admin/WebProject/site/static/*
(もちろん、専用のグループを作成してユーザー名を変更することもできますが、これにより重要でない詳細でナレーションが不明瞭になります。)
Nginxでユーザールートを設定するのは非常に危険です。すべてのファイル階層にアクセス許可を設定するのは面倒な場合があります(フォルダーのフルパスが10個を超えるサブフォルダーの下にあると想像してください)。
私がしたいことは、共有したいフォルダーを、/ usr/share/nginx/any_folder_nameの下で、nginxの設定済みユーザー(通常はwww-data)の権限でミラーリングすることです。 bindfsでできること。
あなたの場合、私はそうするでしょう:
Sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes
ユーザーwww-dataのすべての権限で/ root/downloads/boxesを/ usr/share/nginx/root_boxesにマウントします。今、あなたはあなたのロケーションブロック設定でそのパスを設定します
location /static {
autoindex on;
alias /usr/share/nginx/root_boxes/;
}
私にとってはSElinuxだったので、次を実行する必要がありました:(RHEL/Centos on AWS)
Sudo setsebool -P httpd_can_network_connect on
chcon -Rt httpd_sys_content_t /var/www/