Ищу решение для Эта проблема. Я понимаю причину, по которой настройка в этом вопросе не работает, но я пытаюсь найти решение, в котором я могу заставить ее работать.
Идея состоит в том, чтобы разрешить загрузку больших файлов только по определенным 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;
}
}
}
Как я понимаю, будет применена только одна блокировка локации. Поэтому, если у меня размер запроса по умолчанию 512 КБ, 256 МБ никогда не будут применяться, поскольку все запросы сопоставляются с шаблоном фронтального контроллера. ~ \.php
.
Прав ли я в этом случае, и если да, то что можно настроить так, чтобы посетители не могли загружать что-либо, кроме случаев, когда они загружают в admin/upload
?
Если /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;
}
Тоже не самый красивый, но работает.
Определить два местоположения 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;
}
Может быть, не самый красивый ... Хотя должен быть функциональным ..