'Custom Nginx error page don't work in production
I am trying of custom the Nginx error page.
1/ I created a html page test (this name 400.html)
2/ I created a custom-error-page.conf file in the /etc/nginx/snippets/ directory :
error_page 400 /400.html;
location = /400.html {
root /var/www/apps/site_name/error_pages;
internal;
}
3/ I include custom-error-page.conf in the Nginx configuration (sites-available):
upstream site_name {
ip_hash;
server 0.0.0.0:8000;
}
server {
if ($host = site_name.domain_name.fr) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name site_name.domain_name.fr;
server_tokens off;
include /etc/nginx/domain_name_conf.d/acme_challenge.conf;
set $error_pages_root /var/www/apps/site_name/error_pages;
client_max_body_size 512M;
include /etc/nginx/domain_name_conf.d/503.conf;
location ~ /.+ {
return 301 https://$server_name$request_uri;
}
}
server {
include /etc/nginx/snippets/custom-error-page.conf;
include /etc/nginx/domain_name_conf.d/ssl_generic.conf;
server_name site_name.domain_name.fr;
root /var/www/apps/sources/site_name;
set $error_pages_root /var/www/apps/site_name/error_pages;
ssl_client_certificate /etc/nginx/private/ca.pem;
ssl_verify_client optional;
if ($ssl_client_verify != SUCCESS) {
return 400;
}
ssl_certificate /etc/letsencrypt/live/site_name.domain_name.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site_name.domain_name.fr/privkey.pem;
access_log /var/log/nginx/site_name.domain_name.fr/access.log;
error_log /var/log/nginx/site_name.domain_name.fr/error.log;
client_max_body_size 512M;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/png;
include /etc/nginx/domain_name_conf.d/acme_challenge.conf;
include /etc/nginx/domain_name_conf.d/503.conf;
location ~ ^/(static|media)/ {
return 301 https://site_name.fr$request_uri;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl $scheme;
proxy_redirect off;
proxy_set_header X-Scheme $scheme;
if (!-f $request_filename){
proxy_pass http://site_name;
break;
}
}
}
4/ Nginx -t return ok
5/ I restart the Nginx service - systemctl restart nginx.service
The 400 page is always the Nginx 400 page.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
