web-dev-qa-db-ja.com

Nginx:stat()が失敗しました(13:権限が拒否されました)

私のubuntu 12.04マシンにインストールされているnginxで特定のディレクトリを追加している間、私はデフォルトの設定を使用しています。

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                root /username/test/static;
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
...

...
}

単純な静的nginxサーバーがそのディレクトリからファイルを提供するようにしたいだけです。しかし、私が見るerror.logをチェックする

2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", Host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html

私はすでにchown -R www-data:www-dataに対して/username/test/staticを実行しました。それらをchmod 755に設定しました。他に何を設定する必要があるのか​​わかりません。

85
user299709

Nginxはディレクトリ内で動作するため、nginxユーザからそのディレクトリにcdをアクセスできない場合は、ログ内のstatコマンドと同様に失敗します。 www-user/username/test/staticまでずっとcdできることを確認してください。 statが失敗するか成功するかを確認するには、次のコマンドを実行します。

Sudo -u www-data stat /username/test/static

あなたの場合はおそらく/usernameディレクトリがここの問題です。通常www-dataは他のユーザーのホームディレクトリに対するcdへのパーミッションを持っていません。

その場合の最善の解決策はusernameグループにwww-dataを追加することです。

gpasswd -a www-data username

usernameグループがパスに沿ってすべてのディレクトリを入力できることを確認します。

chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static

変更を有効にするために、nginxを再起動します。

nginx -s reload
156
Maciej Sz

私はちょうどCentOS 7箱で同じ問題を抱えていました。

私はselinuxをヒットしたようです。 selinuxを許可モード(setenforce permissive)にすることで、今のところ問題は解決しています。私は試してみて適切な修正を行います。

73

Nginxは、サイトのルートディレクトリに至るすべてのディレクトリに対して+ xアクセス権を持つ必要があります。

サイトのルートに至るパス内のすべてのディレクトリに+ xがあることを確認してください。たとえば、サイトのルートが/ home/username/siterootの場合

chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot
33
Sairam Krish

CentOS 7.0では、SELinuxに起因するこのAccess Deined問題を抱えていて、これらのステップは問題を解決しました:

yum install -y policycoreutils-devel
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

更新: digitaloceanの仮想Linuxサーバーを使っている間に学んだこと、あるいはそれらを呼ぶときのちょっとしたメモドロップレット SELinuxを使うにはかなりの量のRAMが必要です。たぶんそれはあなたが実行できず、manage SELinuxが2GB以下のRAMを持つドロップレットでできないようなものです。

30
Achilles

Security-Enhanced Linuxが稼働している可能性があるので、そのための規則を追加してください。許可が設定されていてユーザーが存在していても、許可エラー13がありました。

chcon -Rt httpd_sys_content_t /username/test/static

18
Artjom Kurapov

症状:

画像をWordPressメディアライブラリにアップロードできませんでした。

原因:

(CentOS)yum update

エラー:

2014/10/22 18:08:50 [crit] 23286#0: *5332 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied), client: 1.2.3.4, server: _, request: "POST /wp-admin/media-new.php HTTP/1.1", Host: "example.com", referrer: "http://example/wp-admin/media-new.php"

溶液:

chown -R www-data:www-data /var/lib/nginx

3
PJ Brunet

デフォルトでは、nginxをインストールしたときの静的データは/ var/www/htmlにあります。ですから、静的フォルダを/ var/html /にコピーして、

root /var/www/<your static folder>

ngix.conf(または/ etc/nginx/sites-available/default)にあります。

これは私にとってはUbuntuでうまくいきましたが、他のディストリビューションでもそれほど変わらないはずです。

それが役に立てば幸い。

2
Patrik Bego

nginx.confuserプロパティをwww-staticファイルの所有者に変更します。

#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user your_user_name;

# same other config
1
lonny

私の場合、ファイルを提供していたフォルダは、別のフォルダへのシンボリックリンクでした。

ln -sf /Origin /var/www/destination

パーミッション(ユーザーとグループ)が目的のフォルダー(シンボリックリンク)で正しい場合でも、NginxがOriginフォルダー全体の階層へのパーミッションを持っている必要があるので、私はまだエラーがありました。

私はこの問題に直面しました、私はそれをnginxユーザーに許可を与えて、このような何かをグループ化するためにそれを解決しました:

chown -R nginx:nginx /username/test/static
0
julian salas

私は同じ問題を抱えていました、私はCentos7でPlesk Onyx 17を使用しています。影響を受けたドメインのログの下のproxy_error_logでこのエラーを見ることができました。/var/www/vhosts /内のすべてのdirs /ファイルはそれぞれのユーザー(ドメイン所有者)によって所有されており、それらすべてがpsaclnグループに属していることがわかります。だから解決策は、このグループにもnginxを追加することだったので、彼は彼が必要とするものを見ることができます:

usermod -aG psacln nginx

そして、実際には、nginxを再起動し、Ctrl + F5でページをリロードしてください。

0

私は回避策を見つけました:私の場合は "/ etc/nginx/my-web-app"、nginx設定フォルダにフォルダを移動しました。そして、権限をrootユーザー "Sudo chown -R root:root" my-web-app "に変更しました。

0
Dheeraj