Seus exemplos têm loop infinito.
Provavelmente, você quer algo assim:
error_page 404 @error404;
error_page 500 @error500;
error_page 503 @error503;
location @error404 {
root /path_to_static_root/;
try_files /$host/404.html /404.html =404;
}
location @error500 {
root /path_to_static_root/;
try_files /$host/500.html /500.html =500;
}
location @error503 {
root /path_to_static_root/;
try_files /$host/503.html /503.html =503;
}
.. e funcionará mais rápido do que com variáveis.
Atualização:
O wiki da comunidade não é documentação. Da documentação oficial:
$status
- response status (1.3.2, 1.2.2)
@ link