我正在使用 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_size
if 语句中的指令。
然后我尝试在位置块之前和内部以及任何其他位置块之前添加一个位置块~ .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 的副作用。