Назад | Перейти на главную страницу

Magento с nginx: разные правила конфигурации для раздела администратора

Я настраиваю магазин Magento с помощью nginx, и он отлично работает. Однако сейчас я бы хотел установить более высокую client_max_body_size значение (скажем 100м), но только для админки.

Я уже искал в Интернете, но не могу понять, как заставить это работать. Я, вероятно, неправильно понимаю блоки локации в этом сценарии, так что, возможно, вы можете мне помочь.

У меня есть следующий блок сервера:

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 не примет client_max_body_size директива внутри оператора if.

Затем я попытался добавить блок местоположения до и внутри ~ .php$ блок местоположения и перед любым другим блоком местоположения. Я также пытался скопировать содержимое ~ .php$ блокировать /index.php/admin_section/ заблокировать и поставить до и после ~ .php$ блокировать, но вроде ничего не работает.

Как мне заставить это работать?

Следующий блок может работать. Он реплицирует блок местоположения 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 нет побочных эффектов.