NGINX къстъм 404 ако липсва 404.html за домейна

uphero

Registered
Опитвам да накарам един NGINX сървър ако в директорията на домейна липсва 404.html да показва служебен такъв.
Всичко в нета ме води към тази конфигурация която обаче не работи.
NGINX:
server {
    listen 80;
    server_name your_domain.com;
   
    root /path/to/your/domain;

    # Custom error page configuration
    error_page 404 /404.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # Attempt to serve the domain's 404.html or fallback to the custom one
    location = /404.html {
        internal;
        try_files /404.html /var/www/files/static/404.html;
    }
}
 
Не те разбрах?
Като се добави домейн, реално се създава папка в него, като реално в нея има съответните индекс - дефолт, и там и такава страница 404. Или не е точно това, което търсиш. Не, че има логика да е летяща в нищото без прилежащ домейн.
 
Като се добави домейн, реално се създава папка в него, като реално в нея има съответните индекс - дефолт, и там и такава страница 404. Или не е точно това, което търсиш. Не, че има логика да е летяща в нищото без прилежащ домейн.
и като го изтриеш тоя файл да ти зареди дефолтния 404 е идеята а не грозния на сървъра.
 
Просто замени файла, не го трий. Каква е гаранцията, че и този файл няма да бъде изтрит?
 
Просто замени файла, не го трий. Каква е гаранцията, че и този файл няма да бъде изтрит?
Идеята е проста - има 404.хтмл в директорията - ползва се
няма ли такъв файл сървъра показва служебен от друго място
 
Пробвай във втория location да зададеш нов root. try_files принципно се опитва да намери файла като използва root. В твоя случай, при втория location най-вероятно се опитва да намери файла в следния път: /path/to/your/domain/var/www/files/static/404.html защото вероятно не знае, че /var е в root на ОС-а.
 
и като го изтриеш тоя файл да ти зареди дефолтния 404 е идеята а не грозния на сървъра.
Като го изтриеш на практика системата си генерира такъв. Или ако е статичен сайт в htaccess да се зададе да зарежда такъв.
 
Пробвай и нещо такова

NGINX:
server {
    listen 80;
    server_name your_domain.com;
 
    root /path/to/your/domain;

    # Custom error page configuration
    error_page 404 /404.html;

    recursive_error_pages on;
   
    #location /a {
    #   try_files $uri $uri/ =405;
    #}

    location = /404.html {
        log_not_found off;
        error_page 404 = @default;
    }

    # Attempt to serve the domain's 404.html or fallback to the custom one
    location @default {
        log_not_found on;
        root /var/www/files/static;
    }
  }

Не съм ползвал nginx и нямам и сървър да тествам. Тествам през един playground, но там нещата са различни и уж би трябвало да зареди файла от fallback директорията.

Изход от playground-а

Код:
nginx error logs:

 2024/04/11 16:35:16 [error] 10#10: *1 open() "/path/to/your/domain/get" failed (2: No such file or directory), client: 127.0.0.1, server: your_domain.com, request: "GET /get HTTP/1.1", host: "localhost"
2024/04/11 16:35:16 [error] 10#10: *1 open() "/path/to/your/domain/404.html" failed (2: No such file or directory), client: 127.0.0.1, server: your_domain.com, request: "GET /get HTTP/1.1", host: "localhost"
2024/04/11 16:35:16 [error] 10#10: *1 open() "/var/www/files/static/404.html" failed (2: No such file or directory), client: 127.0.0.1, server: your_domain.com, request: "GET /get HTTP/1.1", host: "localhost"

В случая при теб последната грешка трябва да сработи. На playground-а няма такъв файл за това връща пак грешка.
 
Последно редактирано:
Това изглежда работи също и няма рекурсивност:

NGINX:
server {
    listen 80;
    server_name your_domain.com;
  
    root /path/to/your/domain;

    # Custom error page configuration
    error_page 404 /404.html;

    #location /a {
    #   try_files $uri $uri/ =404;
    #}

    location = /404.html {
        internal;
        try_files /404.html @default;
    }

    # Attempt to serve the domain's 404.html or fallback to the custom one
    location @default {
        root /var/www/files/static;
    }
  }
 

Горе