PHP-FPMがアクセスを拒否する理由をいくつか説明しましたが、解決できません。
エラーログは次のように読み取ります。
2013/04/20 23:33:28 [crit] 15479#0: *6 open() "/var/lib/nginx/tmp/fastcgi
/2/00/0000000002" failed (13: Permission denied) while reading upstream, client:
99.999.999.999, server: example.net, request: "GET /wp-admin/ HTTP/1.1",
upstream: "fastcgi://unix:/tmp/php-fpm.sock:", Host: "example.net", referrer:
"http://example.net/"
私は少しですが失われました:
私のNginx構成には多くのファイルが含まれています。基本的な設定は次のとおりです。
user ec2-user ec2-user;
worker_processes 5;
error_log /opt/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /opt/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
client_max_body_size 13m;
index index.php index.html index.htm;
upstream php {
server unix:/tmp/php-fpm.sock;
}
include /etc/nginx/conf.d/*.conf;
include /mnt/web/nginx/conf.d/*.conf;
}
私の/etc/nginx/conf.d/は空です私の/mnt/web/nginx/conf.dには、「wordpress.conf」をすべて含む多くのWebサイト構成が含まれています。
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$Host$uri/ permanent;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php;
}
私の/opt/php/etc/php-fpm.conf:
include=/opt/php/etc/fpm.d/*.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-fpm.sock
user = ec2-user
group = ec2-user
pm = dynamic
pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.status_path = /fpm-status
ping.path = /fpm-ping
slowlog = log/$pool.log.slow
catch_workers_output = yes
更新:問題を見つけ、答えに入れます
/ var/lib/nginx/tmpをec2-user/ec2-userに設定しました(チェックするものすべて+777)
しかし...私も/ var/lib/nginxをec2-user/ec2-userに設定する必要がありました
...親のnginxフォルダーもchown/chgrpした後:これ以上エラーはありません。
数時間かかった...
これは一般的に起こります。 nginx.confのuser
設定が
user nginx;
他の何かに。この場合、
user ec2-user ec2-user;
Chmodのコメントによると、chmodコマンドは不要であり、セキュリティホールを開く可能性があります。
解決:
/ var/lib/nginxで現在のユーザーとグループの所有権を確認します。
$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug 5 00:05 /var/lib/nginx
これは、存在しない可能性のあるユーザーとグループnginx
がこのフォルダーを所有していることを示しています。これにより、ファイルのアップロードが防止されます。
この場合、フォルダーの所有権をnginx.confで定義されているユーザーに変更しますec2-user
(sudoは必要ない場合があります)。
$ Sudo chown -Rf ec2-user:ec2-user /var/lib/nginx
実際に変更されたことを確認します。
$ ls -ld /var/lib/nginx
drwx------ 3 ec2-user ec2-user 4096 Aug 5 00:05 /var/lib/nginx
権限拒否エラーはなくなります。 error.logを確認します(nginx.conf error_logの場所に基づく)。
$ Sudo nano /opt/nginx/error.log
それが機能しない場合は、nginxとphp-fpmをリロードする必要があるかもしれません。
$ Sudo service nginx reload
$ Sudo service php-fpm reload
他の解決策はどれもうまくいきませんでしたが、これはうまくいくことがわかりました:
$ apt-get install php-pear php5-dev
$ pecl install timezonedb
$ echo 'extension=timezonedb.so'> /etc/php5/mods-available/timezonedb.ini
$ ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/conf.d/30-timezonedb.ini
$ service php5-fpm restart
ファイルのアップロードに関しても同様の問題があります。 nginx 500エラー2015/07/05 03:50:36 [crit] 3656#0: *7 open() "/var/lib/nginx/tmp/client_body/0000000007" failed (13: Permission denied), client: 10.0.2.2, server: www.test.com, request: "POST /api/v1/users HTTP/1.1", Host: "test"
この問題は許可のみに関連しており、chmod -R 755 /var/lib/nginx
とうまくいきました!
権限で私の問題を解決しました。最も簡単で簡単な方法は、php-fpmまたはnginxをSudo(スーパーユーザー)として実行しないことでした。あなたがしなければならないでしょう:
chown yourUserName:yourUserName /var/log/nginx/error.log
chown yourUserName:yourUserName -R /var/www
Rootを使用しないことで、php-fpmのユーザーやグループ、またはリッスンしているユーザーやグループを変更する必要がなくなりました。現在のユーザー名になるので、nginx.conf 'user'もコメントアウトしてください。
/ var/lib/nginx/whateverの権限を編集する代わりに、nginxに/ tmp/nginxのような別のパスを使用するように指示するほうが理にかなっていますか?これで問題が解決しました:
# create the directory
mkdir /tmp/nginx
chown -R nginx.nginx /tmp/nginx (assumes nginx user is named nginx)
chmod -R 700 /tmp/nginx
/ tmp/nginx権限は700にする必要があります(所有者が/etc/nginx/nginx.conf 'user'ディレクティブで指定された同じユーザーである限り問題ありません)、または何らかの理由で必要な場合は770にする必要があります別のファイル所有者とnginxを使用して、グループ権限を介してI/Oを実行します。それを見たことはないが、誰が知っている。
Centos7で、/ etc/nginx/nginx.confを編集してnginxにクライアント本体にその新しいディレクトリを使用するように指示します
...
http {
...
client_body_temp_path /tmp/nginx 1 2;
...
}
そしてnginxを再起動します(再びcentos7)
systemctl restart nginx