Nginx:proxy_store_accessオプションが機能しないようです

Nginx:proxy_store_accessオプションが機能しないようです

Railsアプリ用のnginxを介してファイルのアップロードを処理するためにProxy_passを使用しており、ファイル権限を除いてうまく機能します。現在の構成ブロックは次のとおりです。

location ~ ^my_filename_regex$ {

  limit_except POST { deny all; }
  client_body_temp_path      /path/to/app/tmp;
  client_body_in_file_only   on;
  client_body_buffer_size    128K;
  client_max_body_size       1000M;

  # try_files $uri @slow-rails;
  proxy_pass                 http://elrs;
  proxy_pass_request_headers on;
  proxy_set_header           X-FILE $request_body_file; 
  proxy_set_body             off;
  proxy_redirect             off;

  # might not need?
  proxy_read_timeout         3m;
} 

elrsは私が定義したアップストリームで、私のローカルRailsサーバー(127.0.0.1:3000)だけを指します。

ファイルが通過し、tmpの場所に保存されます。ここでrequest.headers['X-FILE']以下の内容を読んでいます。

問題は、ファイルが他のユーザー(nginxが実行されているwww-data)が所有しており、読み取るグループがないため、sudo chmodRailsアプリケーションで操作しないとファイルをインポートできないことです。それは非常に脆弱で信頼できないことが判明しました。

-rw------- 1 www-data www-data 1430753 Feb 23 13:36 /path/to/app/tmp/0057375433

このページに基づいて: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass このオプションを追加しました

      proxy_store_access user:rw group:rw all:r;

私の考えでは、 に設定することが-rw-rw-r--私の目的に適していると思います。ただし、nginxを再起動して再試行した後もパスします-rw-------。つまり、新しいオプションが機能しないようです。

誰が私が間違っているのか、問題をどのように診断できるのかを知ることができますか? Nginxバージョン1.9.7を使用しています。

実際、ngx_http_proxy_moduleがインストールされているかどうか100%確信できません。それ以外の場合、Proxy_passエントリは完全に失敗すると思われますが、おそらくそうではない可能性があります。このモジュールがあるかどうかをテストする方法は?

ありがとう、マックス

編集:また、別のフォルダを使用して一時ファイルを作成しようとしたときにngnixもフォルダの所有権を持っていることを確認しました。つまり、ファイルのアップロードを実行する前に、フォルダは所有していmax:maxますwww-data:max。関連している。

ベストアンサー1

これを行う唯一の方法は、src/os/unix/ngx_files.c(または必要な権限)でファイル生成マスクを編集して変更した後にnginxを再コンパイルすることです。ngx_open_tempfile06000660

この値のため、nginx initスクリプトでumaskを変更することは役に立ちません0600

プロキシモジュールなどの利用可能な構成設定はuser:ありません。group:other:client_body_temp_path

この関数ngx_open_tempfileが読み取った変数accessでさえ、次のモジュールのように呼び出す以外のものに設定することができます0600ngx_conf_set_access_slot

src/http/modules/ngx_http_uwsgi_module.c
171:      ngx_conf_set_access_slot,

src/http/modules/ngx_http_dav_module.c
102:      ngx_conf_set_access_slot,

src/http/modules/ngx_http_scgi_module.c
111:      ngx_conf_set_access_slot,

src/http/modules/ngx_http_fastcgi_module.c
254:      ngx_conf_set_access_slot,

src/http/modules/ngx_http_proxy_module.c
291:      ngx_conf_set_access_slot,

nginxコアの一部であるクライアントコードでは機能しません。したがって、再コンパイルする必要があります。

アプリケーションが属するグループのディレクトリを更新することに加えて、nginxが書き込むファイルがそのグループの所有になる0600ように、そのディレクトリにgid()を設定する必要があります。0660chgrp your_app_server_groupclient_body_temp_pathchmod g+s your_app_server_group

おすすめ記事