Existem dois problemas com o que você está tentando fazer:
- o bloco
if
não está se comportando como você gostaria - é improvável que qualquer resposta 404 seja originada no bloco
location /
Este documento explica por que o bloco if
só deve ser usado em situações muito específicas.
A ação final do bloco location /
é chamar o local nomeado @redirect_store
. Se alguma resposta 404 for gerada, é provável que ela ocorra após o processamento ter deixado o bloco location /
. Portanto, qualquer diretiva error_page
declarada apenas dentro do escopo do bloco location /
será ignorada (independentemente dos problemas do bloco if
mencionados acima).
A linha final do documento error_page
afirma que:
If uri processing leads to an error, the status code of the last occurred error is returned to the client.
O que significa que a sua declaração if
de proteção é desnecessária de qualquer maneira.
Tente isso:
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html;
location / {
try_files $uri $uri/ @redirect_store;
}