私の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
に設定しました。他に何を設定する必要があるのかわかりません。
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
私はちょうどCentOS 7箱で同じ問題を抱えていました。
私はselinuxをヒットしたようです。 selinuxを許可モード(setenforce permissive
)にすることで、今のところ問題は解決しています。私は試してみて適切な修正を行います。
Nginxは、サイトのルートディレクトリに至るすべてのディレクトリに対して+ xアクセス権を持つ必要があります。
サイトのルートに至るパス内のすべてのディレクトリに+ xがあることを確認してください。たとえば、サイトのルートが/ home/username/siterootの場合
chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot
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を持つドロップレットでできないようなものです。
Security-Enhanced Linuxが稼働している可能性があるので、そのための規則を追加してください。許可が設定されていてユーザーが存在していても、許可エラー13がありました。
chcon -Rt httpd_sys_content_t /username/test/static
症状:
画像を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
デフォルトでは、nginxをインストールしたときの静的データは/ var/www/htmlにあります。ですから、静的フォルダを/ var/html /にコピーして、
root /var/www/<your static folder>
ngix.conf(または/ etc/nginx/sites-available/default)にあります。
これは私にとってはUbuntuでうまくいきましたが、他のディストリビューションでもそれほど変わらないはずです。
それが役に立てば幸い。
nginx.conf
user
プロパティを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
私の場合、ファイルを提供していたフォルダは、別のフォルダへのシンボリックリンクでした。
ln -sf /Origin /var/www/destination
パーミッション(ユーザーとグループ)が目的のフォルダー(シンボリックリンク)で正しい場合でも、NginxがOriginフォルダー全体の階層へのパーミッションを持っている必要があるので、私はまだエラーがありました。
私はこの問題に直面しました、私はそれをnginxユーザーに許可を与えて、このような何かをグループ化するためにそれを解決しました:
chown -R nginx:nginx /username/test/static
私は同じ問題を抱えていました、私はCentos7でPlesk Onyx 17を使用しています。影響を受けたドメインのログの下のproxy_error_logでこのエラーを見ることができました。/var/www/vhosts /内のすべてのdirs /ファイルはそれぞれのユーザー(ドメイン所有者)によって所有されており、それらすべてがpsaclnグループに属していることがわかります。だから解決策は、このグループにもnginxを追加することだったので、彼は彼が必要とするものを見ることができます:
usermod -aG psacln nginx
そして、実際には、nginxを再起動し、Ctrl + F5でページをリロードしてください。
私は回避策を見つけました:私の場合は "/ etc/nginx/my-web-app"、nginx設定フォルダにフォルダを移動しました。そして、権限をrootユーザー "Sudo chown -R root:root" my-web-app "に変更しました。