Ziko
Ziko

Reputation: 971

nginx: How to define 404 error page based on environment variable

I'm using os.getenv() to retrieve environment variables to be used by the lua block

for example

    set_by_lua_block $csp_header {
      local frameSrc = "frame-src 'self' '*.mywebsite.com'" .. (os.getenv("EXTRA_FRAME_SRC") or "")
}

Things are working as expected when my application is deployed.

However, I want to conditionally read different 404 page based on also the environment variable. In other words, I want to choose different error_page 404 location based on os.getenv('condition').

Something like if (os.getenv(var) return /error-pages/404.html, else return error-pages/404-2.html)

server {
  error_page   404    /error-pages/404.html
}

Could someone explain how can this be done using lua?

Upvotes: 0

Views: 107

Answers (1)

Danila Vershinin
Danila Vershinin

Reputation: 9895

You can define a special error handler location that will route a request to the approriate error page:


    location /error-handler {
        content_by_lua_block {
            local var_value = os.getenv('YOUR_ENV_VAR')
            if var_value == 'some_condition' then
                ngx.exec('/error-pages/404.html')
            else
                ngx.exec('/error-pages/404-2.html')
            end
        }
    }

    error_page 404 /error-handler;
}

Upvotes: 1

Related Questions