web-dev-qa-db-ja.com

Nginxを使用したMagento:管理セクションのさまざまな構成ルール

Nginxを使用してMagentoストアをセットアップしていますが、ストアは正常に機能しています。ただし、ここで、より高い_client_max_body_size_値(たとえば100m)を設定したいと思いますが、これはadminセクションのみです。

私はすでにオンラインで検索しましたが、これを機能させる方法がわかりません。このシナリオでは、おそらくロケーションブロックを誤解しているので、さらに助けていただけますか。

私は次のサーバーブロックを持っています:

_server {
    listen                              80;
    server_name                         {domain};
    root                                {root};

    location / {
        index                           index.html index.php;
        try_files                       $uri $uri/ @handler;
        expires                         max;
    }

    ## These locations should be protected
    location ^~ /app/                   { deny all; }
    location ^~ /includes/              { deny all; }
    location ^~ /lib/                   { deny all; }
    location ^~ /media/downloadable/    { deny all; }
    location ^~ /pkginfo/               { deny all; }
    location ^~ /report/config.xml      { deny all; }
    location ^~ /var/                   { deny all; }

    location  /. {
        return                          404;
    }

    location /api {
        rewrite     ^/api/rest          /api.php?type=rest last;
    }

    location @handler {
        rewrite     /                   /index.php;
    }

    location ~ .php/ {
        rewrite     ^(.*.php)/          $1 last;
    }

    location ~ .php$ {
        if (!-e $request_filename) {
            rewrite /                   /index.php last;
        }

        expires                         off;

        fastcgi_pass                    hhvm;

        proxy_read_timeout              300s;
        proxy_connect_timeout           300s;
        fastcgi_read_timeout            300s;

        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param   MAGE_RUN_CODE   $mage_code;
        fastcgi_param   MAGE_RUN_TYPE   $mage_type;

        include                         fastcgi_params;
    }
}
_

ここで、管理者が http://domain.com/index.php/admin_section/ にいるとしましょう。したがって、ロケーションブロック_client_max_body_size_内でより高い_location /index.php/admin_section/ { ... }_を適用する必要があります。しかし、そうすると、そのルールは最後の_location ~ .php$ { ... }_ブロックによって無視されます。

if ($request_uri ~ /admin_section/) { ... }ステートメント内でいくつかの構成ルールを調整できることは知っていますが、nginxはifステートメント内の_client_max_body_size_ディレクティブを受け入れません。

次に、_~ .php$_ロケーションブロックの前とその内部、および他のロケーションブロックの前にロケーションブロックを追加しようとしました。また、_~ .php$_ブロックの内容を_/index.php/admin_section/_ブロックにコピーして、_~ .php$_ブロックの前後に配置しようとしましたが、何も機能しないようです。

これを機能させるにはどうすればよいですか?

2
redelschaap

次のブロックが機能する可能性があります。 PHPロケーションブロック(管理URIの通常の最終宛先)を複製します。

location ^~ /index.php/admin_section/ {

    client_max_body_size            100m;

    expires                         off;
    fastcgi_pass                    hhvm;

    proxy_read_timeout              300s;
    proxy_connect_timeout           300s;
    fastcgi_read_timeout            300s;

    include                         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param   MAGE_RUN_CODE   $mage_code;
    fastcgi_param   MAGE_RUN_TYPE   $mage_type;
}

私はそれをテストすることはできませんが、うまくいけば、Magentoを壊す副作用はありません。

1
Richard Smith