nginx: la direttiva error_page viene ignorata in silenzio

Sto cercando di restituire una pagina di errore personalizzata 400 per le richieste non HTTPS in nginx. Sono nuovo a nginx, ma ho letto molte pagine di esempi su pagine di errore personalizzate e niente sembra funzionare per me. I miei config:

server { listen 80; error_page 400 /400.html; location = /400.html { root /var/www/html; } return 400; } 

Il return sta funzionando, perché se cambio il codice (ad esempio a 401 o 500) ottengo la giusta pagina di errore di default di nginx. So che il file esiste, perché se estrai il rientro , servirò direttamente la mia pagina 400.html senza alcun problema. Ma niente che ho provato ha provocato la mia pagina personalizzata che viene visualizzata quando restituisco il codice di errore.

  • Nginx + PHP-FPM produce 502 gateway difettoso invece di errore irreversibile?
  • Nginx - quando il tunnel url reindirizza senza numero di port
  • Ruotare manualmente un file di registro
  • nginx - serve un singolo file in un block di posizione senza modificare il path
  • Come impostare un proxy inverso usando nginx?
  • Nginx "ssl_stapling" ignorato, nessun OCSP responder URL nel certificato
  • Che cosa mi manca?

    Aggiornamento: Altre varianti che ho cercato senza alcun risultato:

     server { listen 80; error_page 400 /400.html; location = /400.html { root /var/www/html; } return 400; } server { listen 80; root /var/www/html; error_page 400 /400.html; location = /400.html { allow all; } return 400; } server { listen 80; root /var/www/html; error_page 400 /400.html; return 400; } 

  • Apache: richiesta insicura inviata per proteggere la port ... desidera redirect
  • Distriggerszione della risposta agli errori del server IIS 7.5 per i codici di stato HTTP 5xx e 4xx
  • Qual è la differenza tra le "pagine di errore NET" e le "pagine di errore" in IIS7?
  • Cattura errori verso il basso verso l'alto (502) e visualizzare la pagina di errore personalizzata
  • nginx non servirà una pagina di errore in una sottodirectory della radice del documento
  • Apache: come impostare la pagina di errore personalizzata 401 e salvare il comportmento originale
  • One Solution collect form web for “nginx: la direttiva error_page viene ignorata in silenzio”

    Ho trovato questa domanda su Stackoverflow che realizza quello che stavo cercando.

    Suppongo per qualunque motivo anche se un return funziona all'interno di un block di server , non rispetta alcuna direttiva di error_page . Questo potrebbe essere un bug o un comportmento intenzionale che non capisco. La soluzione è quella di mettere il return all'interno di un block di posizione :

     server { listen 80; root /var/www/html; error_page 400 /400.html; location = /400.html { internal; } location / { return 400; } } 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.