ロケーションブロックごとのNginx client_max_body_size(php frontcontrollerパターンを使用)


8

この問題の解決策を探しています。その質問の設定が機能しない理由を理解していますが、私はそれを機能させることができる解決策を見つけようとします。

アイデアは、特定のURLでのみ大きなファイルのアップロードを許可することです。私はlocationこれにブロックを使用できますが、問題は次のとおりです:私はphpフロントコントローラーのパターンを持っています:

location ~ \.php {
    # ...
    fastcgi_pass unix:/tmp/php5-fpm.sock;
}

私の合計構成は次のようになります:

# ...

http {
    # ...

    client_max_body_size 512K;

    server {
        server_name example.com;
        root        /var/www/example.com/public;

        location / { 
            try_files $uri /index.php?$query_string;
        }

        location /admin/upload {
            client_max_body_size 256M;
        }

        location ~ \.php {
            # ...

            fastcgi_pass unix:/tmp/php5-fpm.sock;
        }
    }
}

私が理解しているように、1つのロケーションブロックのみが適用されます。したがって、デフォルトのリクエストサイズが512Kの場合、すべてのリクエストはフロントコントローラーのパターンで照合されるため、256Mは適用されません~ \.php

私はこの場合正しいのですか、そうである場合、訪問者がにアップロードするとき以外は何もアップロードできないように何を設定できますadmin/uploadか?

回答:


2

2つのphpの場所を定義しますか?

location ~ ^/admin/upload/.+\.php$
{
    client_max_body_size 256M;
    include /etc/nginx/conf.d/php-fpm.conf;
}   
location ~ \.php
{
    include /etc/nginx/conf.d/php-fpm.conf;
}

おそらく、かわいらしいことではありません...機能するはずです。


1

/admin/uploadパスが仮想の場合、次のように機能させることができます。

location / {
    try_files $uri /index.php?$args;
}

location /admin/upload {
    client_max_body_size 256M;

    include inc/php.conf;
    rewrite ^(.*)$ /index.php?$args break;
}

location ~ \.php$ {
    include inc/php.conf;
}

かわいらしくもありませんが、動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.