Прокси 404s в Kong API со статическим хостингом

У меня есть один экземпляр Kong, настроенный для обслуживания статического содержимого и API-интерфейсов из одного и того же экземпляра (с использованием Docker), я хочу иметь возможность маршрутизировать 404-и в статическом пути к пути API, определенному для настроенных конечных точек Kong, но переписать запрос.

Особенности заключаются в следующем:

  1. Я подаю статический контент в OpenResty, используя Kong, как описано здесь: https://getkong.org/docs/0.13.x/configuration/
  2. У меня есть маршрут, настроенный для API Kong в /api который проходит все маршруты, которые я установил.
  3. Я получаю доступ к статическому контенту с использованием поддомена с подстановочными символами, который заканчивается как. глядя в //
  4. У меня есть конечная точка, определенная как:

    curl -d "name = sample_auth" \ -d "uris = / api / sample_auth" \ -d "upstream_url = http://mockbin.org/request" \ -k $ KONG_API / apis /

То, что я хочу сделать, это перенаправить 404 в моем статическом контенте на /api путь, чтобы я мог размещать прокси приложения, которые размещают свой собственный контент, но не используют относительные пути.

Я пробовал пару вещей, которые еще не работали, такие как:

  • С помощью error_page 404 /api/$subdomain$uri; в моем статическом месте
    • И используя try_files $uri $uri/ =404;
  • так же try_files $uri $uri/ @toprox;
    • Где @toprox - это именованное местоположение, подобное приведенному ниже.
  • И одна попытка, которая потерпела неудачу, использовала try_files $uri $uri/ api/$subdomain$uri;
    • (это просто не перенаправило на /api путь, только что вернул 404)

При отладке этой проблемы я увидел, что когда /api конечная точка была достигнута после 404 (либо через именованное местоположение, либо через обработчик 404), URI, казалось, был переписан правильно в соответствии с конфигурацией, но все еще возвращается как 404 (см. оператор отладки в конфигурации ниже)

Неудачный запрос (получение $KONG_API/)*********** UPSTREAM URI: URI: /api/sample_auth

Успешный запрос (получение $KONG_API/api/sample_auth):*********** UPSTREAM URI: /request URI: /api/sample_auth

Мой конфиг nginx выглядит примерно так:

location @toprox {
    rewrite (.*)/* /api/$subdomain;
}

location / {
    root /usr/share/nginx/html/$subdomain;                                                                                                                                                                
    try_files $uri $uri/ @toprox;                                                                                                                                                                   
    expires off;                                                                                                                                                                                   
 }          
location /api {                                                                                                                                                                                         
    set $upstream_host               '';                                                                                                                                                                
    set $upstream_upgrade            '';                                                                                                                                                                
    set $upstream_connection         '';                                                                                                                                                                
    set $upstream_scheme             '';                                                                                                                                                                
    set $upstream_uri                '';                                                                                                                                                                
    set $upstream_x_forwarded_for    '';                                                                                                                                                                
    set $upstream_x_forwarded_proto  '';                                                                                                                                                                
    set $upstream_x_forwarded_host   '';                                                                                                                                                                
    set $upstream_x_forwarded_port   '';                                                                                                                                                                
    proxy_intercept_errors on;                                                                                                                                                                          

    rewrite_by_lua_block {                                                                                                                                                                              
        kong.rewrite()                                                                                                                                                                                  
    }                                                                                                                                                                                                   

    access_by_lua_block {                                                                                                                                                                               
        kong.access()                                                                                                                                                                                   
    }                                                                                                                                                                                                   

    proxy_http_version 1.1;                                                                                                                                                                             
    proxy_set_header   Host              $upstream_host;                                                                                                                                                
    proxy_set_header   Upgrade           $upstream_upgrade;                                                                                                                                             
    proxy_set_header   Connection        $upstream_connection;
    proxy_set_header   X-Forwarded-For   $upstream_x_forwarded_for;                                                                                                                                     
    proxy_set_header   X-Forwarded-Proto $upstream_x_forwarded_proto;                                                                                                                                   
    proxy_set_header   X-Forwarded-Host  $upstream_x_forwarded_host;                                                                                                                                    
    proxy_set_header   X-Forwarded-Port  $upstream_x_forwarded_port;                                                                                                                                    
    proxy_set_header   X-Real-IP         $remote_addr;                                                                                                                                                  
    proxy_pass_header  Server;                                                                                                                                                                          
    proxy_pass_header  Date;                                                                                                                                                                            
    proxy_ssl_name     $upstream_host;                                                                                                                                                                  
    proxy_pass         $upstream_scheme://kong_upstream$upstream_uri;                                                                                                                                   

    proxy_hide_header Access-Control-Allow-Origin;                                                                                                                                                      
    proxy_hide_header Access-Control-Allow-Methods;                                                                                                                                                     
    proxy_hide_header Access-Control-Allow-Credentials;                                                                                                                                                 
    proxy_hide_header Access-Control-Allow-Headers;                                                                                                                                                     

    header_filter_by_lua_block {                                                                                                                                                                        
        kong.header_filter()                                                                                                                                                                            
    }                                                                                                                                                                                                   

    body_filter_by_lua_block {                                                                                                                                                                          
        kong.body_filter()                                                                                                                                                                              
    }                                                                                                                                                                                                   

    log_by_lua_block {                                                                                                                                                                                  
        kong.log()
        ngx.log(ngx.DEBUG, "*********** UPSTREAM URI: " .. ngx.var.upstream_uri .. " URI: " .. ngx.var.uri);                                                                                                        
    }                                                                                                                                                                                                   
}                                                                                                                                                                                                       

location = /kong_error_handler {                                                                                                                                                                        
    internal;                                                                                                                                                                                           
    content_by_lua_block {                                                                                                                                                                              
        kong.handle_error()                                                                                                                                                                             
    }                                                                                                                                                                                                   
}                                       

0 ответов

Другие вопросы по тегам