Мы скоро запустим новый веб-сайт, скажем, example.com. Example.com защищен Cloudflare (бесплатно). Что означает ограничение в 100 Мб на загрузку. Однако мы должны иметь возможность загружать видео большего размера. Поэтому для достижения этого мы используем поддомен, на который мы размещаем видео (видео.
Установка представляет собой приложение Rails (@app) с обратным прокси-сервером Nginx перед ним.
Теперь мы хотим показать страницу с ошибкой, когда загрузка видео превышает 300 МБ. Эта страница с ошибкой размещается в / 413 приложением Rails. Но независимо от того, что я пытаюсь сделать, я не могу заставить NGINX перенаправить в / 413, когда достигнут предел в 300 МБ.
Я пробовал разные комбинации recursive_error_pages on;
и proxy_intercept_errors on;
в разных местах, но, похоже, я не могу понять это правильно. Он запускает 413, но не перенаправляет.
Моя конфигурация Nginx выглядит следующим образом:
upstream app {
# Path to Puma SOCK file, as defined previously
server unix://rails/www/sockets/puma.sock fail_timeout=0;
}
server {
listen 0.0.0.0:80;
server_name example.com localhost;
root /rails/www/public;
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 100M;
keepalive_timeout 10;
try_files $uri/index.html $uri @app;
recursive_error_pages on;
error_page 413 /413;
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
error_page 413 /413;
recursive_error_pages on;
}
sendfile on;
send_timeout 300s;
}
server {
listen 0.0.0.0:80;
server_name videos.example.com;
root /rails/www/public;
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 300M;
keepalive_timeout 600;
try_files $uri/index.html $uri;
recursive_error_pages on;
error_page 413 /413;
location /cms/vlogs {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
error_page 413 /413;
recursive_error_pages on;
}
location /vlogs {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
error_page 413 /413;
recursive_error_pages on;
}
location = /413 {
return 301 https://example.com/413
}
sendfile on;
send_timeout 600s;
}