マルチパートフォームの送信を許可するように nginx 権限を設定するにはどうすればよいですか?

マルチパートフォームの送信を許可するように nginx 権限を設定するにはどうすればよいですか?

CentOS 7 で Puma (Rails アプリケーション用) と Nginx を使用しています。ファイルのアップロードの権限を設定する方法がわかりません。現在、ファイルをアップロードしようとすると (マルチパート フォームを送信)、nginx エラー ログに次のエラーが表示されます。

2018/02/28 16:35:48 [crit] 31241#0: *148 open() "/var/lib/nginx/tmp/client_body/0000000006" failed (13: Permission denied), client: 96.92.233.165, server: example.com, request: "POST /people HTTP/1.1", host: "example.com", referrer: "http://example.com/people/new"

私はすべてを「rails」ユーザーとして実行しようとしています。以下は私のnginxとpumaのプロセスです

[root@server /]# ps -elf | grep nginx
0 S root       944   920  0  80   0 -  2249 pipe_w 16:38 pts/1    00:00:00 grep --color=auto nginx
1 S root     31238     1  0  80   0 - 30712 rt_sig 15:06 ?        00:00:00 nginx: master process /usr/sbin/nginx
5 S rails    31239 31238  0  80   0 - 30843 ep_pol 15:06 ?        00:00:00 nginx: worker process
5 S rails    31240 31238  0  80   0 - 30843 ep_pol 15:06 ?        00:00:00 nginx: worker process
5 S rails    31241 31238  0  80   0 - 30843 ep_pol 15:06 ?        00:00:00 nginx: worker process
5 S rails    31242 31238  0  80   0 - 30843 ep_pol 15:06 ?        00:00:00 nginx: worker process
[root@server /]# ps -elf | grep puma
1 S rails      582     1  0  80   0 - 135430 poll_s 16:19 ?       00:00:00 puma 3.11.2 (tcp://0.0.0.0:3000,unix:///home/rails/scale_production/shared/sockets/puma.sock) [scale_production]
1 S rails      590   582  0  80   0 - 286725 futex_ 16:19 ?       00:00:02 puma: cluster worker 0: 582 [scale_production]
1 S rails      594   582  0  80   0 - 287282 futex_ 16:19 ?       00:00:03 puma: cluster worker 1: 582 [scale_production]
1 S rails      596   582  0  80   0 - 287255 futex_ 16:19 ?       00:00:02 puma: cluster worker 2: 582 [scale_production]
1 S rails      599   582  0  80   0 - 286939 futex_ 16:19 ?       00:00:02 puma: cluster worker 3: 582 [scale_production]
0 S root       946   920  0  80   0 -  2250 pipe_w 16:38 pts/1    00:00:00 grep --color=auto puma

以下は問題のあるディレクトリの権限です。これを機能させるには他に何を設定すればよいでしょうか?

[root@server /]# ls -al /var/lib/nginx
total 12
drwx------  3  755 rails 4096 Feb 24 14:33 .
drwxr-xr-x 23 root root  4096 Feb 24 14:33 ..
drwx------  7  755 rails 4096 Feb 24 15:06 tmp
[root@server /]# ls -al /var/lib/nginx/tmp/client_body
total 8
drwx------ 2 rails rails 4096 Feb 24 15:06 .
drwx------ 7   755 rails 4096 Feb 24 15:06 ..
[root@server /]# ls -al /var/lib/nginx/tmp
total 28
drwx------ 7   755 rails 4096 Feb 24 15:06 .
drwx------ 3   755 rails 4096 Feb 24 14:33 ..
drwx------ 2 rails rails 4096 Feb 24 15:06 client_body
drwx------ 2 rails rails 4096 Feb 24 15:06 fastcgi
drwx------ 2 rails rails 4096 Feb 24 15:06 proxy
drwx------ 2 rails rails 4096 Feb 24 15:06 scgi
drwx------ 2 rails rails 4096 Feb 24 15:06 uwsgi

答え1

nginx をユーザー名として実行していますrails(これは通常ではありません)。

しかし、ディレクトリの 1 つは/var/lib/nginx/tmp、存在しないユーザー 755 によって所有されています。

これが起こる一般的な理由は、 と入力chownするつもりだったのに誤って入力したためですchmod

このディレクトリの所有権を修正することで問題を解決できるはずです。

chown rails /var/lib/nginx/tmp

ところで、SELinuxも無効になっているようです。それを修正するできるだけ早く。

答え2

はユーザー 755 によって所有されていることがわかります。の代わりに/var/lib/nginx/tmp間違ったコマンドを使用した可能性があります。chownchmod

これを修正するには:

chmod 755 /var/lib/nginx/tmp
chown rails /var/lib/nginx/tmp

関連情報