Nginx ошибка сервера не перенаправляется на пользовательскую страницу - PullRequest
1 голос
/ 07 августа 2020

Я настроил Nginx в docker для перенаправления ошибки 500 на настраиваемую страницу (500. php), но эта ошибка не перенаправляется на мою настраиваемую страницу. Не могли бы вы помочь?

Ниже приведены мои конфигурации в .docker / conf / nginx

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name localhost;

    root /var/www/html/;


    location / {
        error_page 500 = /500.php;
    }
}

Ответы [ 3 ]

4 голосов
/ 11 августа 2020

Вам не хватает директивы proxy_intercept_errors в конфигурации nginx: Определяет, должны ли проксированные ответы с кодами больше или равными 300 передаваться клиенту или перехватываться и перенаправляться на nginx для обработки с помощью директивы error_page .

server {
    [...]
    proxy_intercept_errors on;
    error_page 500 = http://example.org;

    location / {
        proxy_pass http://example.org;
    }
    [...]
}
1 голос
/ 18 августа 2020

Это лишь приблизительное представление о конфигурации ngnix

server {    
    listen 80;  
    server_name host.docker.internal;   

    # By default land on localhost:80 to root so in root we copied UI build to the ngnix html dir.
    # have a look to docker-compose uiapp service.
    location / {    
            root   /usr/share/nginx/html;   
            index  index.html index.htm;    
    }   

   # after location add filter, from which every endpoint starts with or comes in endpoint 
   # so that ngnix can capture the URL and reroute it.
   # like /backend/getUserInfo/<UserId> 
   # In above example /backend is that filter which will be captured by Ngnix and reroute the flow.
    location /backend { 
        proxy_set_header X-Forwarded-Host $host;    
        proxy_set_header X-Forwarded-Server $host;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_pass http://<ContainerName>:<PortNumber>; 
        # In our case Container name is as we setup in docker-compose `beservice` and port 8080
        proxy_pass http://beservice:8080;   
    }   
}

Это может помочь вам написать свой собственный.

Для получения более подробной информации вы можете ознакомиться с этим проектом

https://github.com/dupinder/NgnixDockerizedDevEnv

Это может помочь вам понять, как работает вся эта маршрутизация

1 голос
/ 18 августа 2020

Измените свой файл конфигурации на этот:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name localhost;

    root /var/www/html/;

    error_page 500 502 503 504 /error_50x.html;
    location = /error_50x.html {
            root /usr/share/nginx/html;
            internal;
    }

}

Пожалуйста, поместите error_50x. html в путь / usr / share / nginx / html. Перезагрузите сервер nginx. Должно сработать.

...