web-dev-qa-db-ja.com

Apache <Location>ディレクティブでmax_post_sizeとupload_max_filesizeを使用するにはどうすればよいですか?

私のユーザーは、PHP WebアプリケーションのCMSバックエンドに大きなファイル(50-100MB)をアップロードしたいと考えています。この仮想ホストでPHPのupload_max_filesizepost_max_sizeの設定をグローバルに調整できますが、サービス拒否攻撃が必要以上に簡単になるのではないかと心配しています。

理論的には、これら2つの設定はディレクトリごとに(仮想ホスト構成ファイルまたは.htaccessファイルを介して)調整でき、管理領域でより大きな値のみが必要です。残念ながら、このアプリケーションのWebルート(単一のエントリポイント)にはstart.phpしかなく、他のすべてのPHPファイルはそこから含まれています。これにより、ディレクトリごとの設定が不可能になるようです。 CMSで使用されているパスを<Location>と一致させようとしましたが、正しいパスを使用しても、php_valueディレクティブは効果がありません。

<LocationMatch ^/admin>
   php_value  upload_max_filesize  100MB
   php_value  post_max_size        100MB
</LocationMatch>

(mod_rewriteは、/admin/content/blaのようなパスを/start.php?_p=/admin/content/blaに変換するために使用されます。そのため、「start.php」ファイル名は上記の式に表示されません。)

これを機能させる方法はありますか?また、別の提案も受け付けています。たとえば、私たちの場合、IPベースのセットアップが可能かもしれません。

TIA。

1
Zilk

Apacheはこれを行うことができないようです。ただし、Apacheまたはphp-fpmの制限をグローバルに高く設定し、proxy_passまたはfastcgi_passでnginxを使用し、別々の場所でnginxclient_max_body_sizeディレクティブを使用してURLごとの制限を設定できます。

location / {
  client_max_body_size 1M;
  try_files NOT_EXISTS @proxy;
}
location = /upload.php {
  client_max_body_size 100M;
  try_files NOT_EXISTS @proxy;
}
location @proxy {
  proxy_pass http://localhost:9000/; #Apache listening on port 9000;
  # other proxy directives may be needed, e.g. to set Host headers
}
1
ColinM