例如example.com,我们即将推出一个新网站。 Example.com受Cloudflare(免费)保护。这意味着上传限制为100mb。但是,我们需要能够上传更大的视频。因此,为了实现这一目标,我们使用了一个将视频发布到的子域(视频。
该设置是一个Rails应用程序(@app),其前面有一个Nginx反向代理。
现在,当视频上传超过300MB时,我们要显示错误页面。该错误页面由Rails应用程序托管在/ 413上。但是,无论我怎么做,当达到300MB的限制时,似乎都无法让NGINX重定向到/ 413。
我在不同的地方尝试了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;
}