Magento 与 nginx:管理部分的不同配置规则

Magento 与 nginx:管理部分的不同配置规则

我正在使用 nginx 设置 Magento 商店,商店运行良好。但是,现在我想设置一个更高的client_max_body_size值(比如说 100m),但仅限于管理部分。

我已经在网上搜索过了,但还是不知道该如何操作。我可能误解了这种情况下的位置块,所以也许你能进一步帮助我。

我有以下服务器块:

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_sizeif 语句中的指令。

然后我尝试在位置块之前和内部以及任何其他位置块之前添加一个位置块~ .php$。我还尝试将块的内容复制~ .php$/index.php/admin_section/块中并将其放在~ .php$块之前和之后,但似乎没有任何效果。

我怎样才能让它工作?

答案1

以下代码块可能有效。它复制 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 的副作用。

相关内容