1

私のウェブサイトでは、ユーザーは自分のファイルをアップロードして、そのファイルの短いURLを持つことができます。これまではApacheWebサーバーを使用していましたが、今はnginxに切り替えたいと思っています。

apacheでは、このスニペットを使用して、ファイルがアップロードされている一部のディレクトリのphpハンドラーを削除しました。

<Directory /var/www/unkown-user-data/uploads>
RemoveHandler .php .phtml .php3 .php5
RemoveType .php .phtml .php3 .php5
php_flag engine off
AddHandler default-handler .php
</Directory>

しかし今、nginxウェブサーバーでこれをどのように行うべきですか?

4

1 に答える 1

1

Nginx には removehandler ディレクティブがありません。サーバーのさまざまなタイプのリクエストにロケーション ブロックを追加します。

アップロードフォルダーには、そのフォルダーから要求されたときに実行したくない .php .phtml .php3 .php5 ファイルが含まれている可能性があると思います。これが私の提案です:

location ^~ /uploads/ {
  root /var/www/unkown-user-data;
  expires max;
}

注: "^~" は重要です (正規表現の "~" ブロックよりも優先度が高いことを意味します)。それ以外の場合は、次のような正規表現ロケーション ブロック

location ~ \.php$ {
  ...
}

最初に一致し、php スクリプトが誤って実行されます。nginx wiki での一致順序は次のとおりです。

1. Directives with the "=" prefix that match the query exactly (literal string). If found, searching stops.
2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
3. Regular expressions, in the order they are defined in the configuration file.
4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.
于 2013-03-17T23:44:30.503 に答える