【问题标题】:Nginx not redirecting server error to custom pageNginx 未将服务器错误重定向到自定义页面
【发布时间】:2020-11-27 06:43:52
【问题描述】:

我在 docker 中配置了 Nginx 以将错误 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;
    }
}

【问题讨论】:

    标签: docker nginx nginx-config


    【解决方案1】:

    您在 nginx 配置中缺少 proxy_intercept_errors 指令:
    确定是否应将代码大于或等于 300 的代理响应传递给客户端或被拦截并重定向到 nginx 进行处理error_page 指令。

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

    【讨论】:

      【解决方案2】:

      把你的配置文件改成这样:

      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 服务器。它应该可以工作。

      【讨论】:

        【解决方案3】:

        这只是一个关于 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

        这可以帮助您了解所有路由的工作原理

        【讨论】:

          猜你喜欢
          • 2012-10-27
          • 2015-08-01
          • 2018-04-18
          • 2017-10-27
          • 1970-01-01
          • 2013-02-27
          • 2019-03-19
          • 1970-01-01
          • 2014-07-23
          相关资源
          最近更新 更多