Setting the status code

Hi,
I’m wondering how I can set a status code and still deliver a custom web
page? Specifically I want to use a status code of 403 Forbidden but
depending on the exact reason I want to display different custom error
pages for that case.
When I use the “return 403” directive I can no longer deliver content
and at most a single custom page can be returned which is defined by the
error_page directive.

Since I determine the reason for the denied access in lua a way to do it
there would also help. I already tried “nginx.status = 403” followed by
a “nginx.exec(’/reason1’)” but while the right page is display the
status code returned gets reset to 200.

Any ideas?

Regards,
Dennis

let your app handle and deliver error-pages

Posted at Nginx Forum:

On 06/08/13 04:02, Dennis J. wrote:

Since I determine the reason for the denied access in lua a way to do
it there would also help. I already tried “nginx.status = 403”
followed by a “nginx.exec(’/reason1’)” but while the right page is
display the status code returned gets reset to 200.

Hi
You can do it in lua… you need to do it in the header filter stage
I’m doing something similar but probably not exactly the same
Hopefully example helps (untested):

     set $status_code "";
     location /
     {
         access_by_lua '
             -- your lua script here etc...
             -- if (an error happened) then
                 ngx.var.status_code = "403"
                 ngx.exec("/error/403.html")
             -- end
             ';
     }

     location /error
     {
         root html/error;
         header_filter_by_lua '
             if ngx.var.status_code ~= "" then
                 ngx.status = ngx.var.status_code
             end
         ';
     }

On 06.08.2013 13:31, Richard K. wrote:

I’m doing something similar but probably not exactly the same
– end
';
}

That did the trick, thanks!

What I basically wound up doing is:

 location /error {
     root   /var/www/html;
     header_filter_by_lua '
         ngx.status = 503
     ';
 }

Kind of awkward to be forced to use Lua just for this. There should be a
"status_code " directive to make this possible without requiring
the Lua module.

Regards,
Dennis

On 06.08.2013 08:29, mex wrote:

let your app handle and deliver error-pages

See basically all I want to do is return a single static html file and
having to set up php/python/etc. just to serve this file seems like
overkill to me. This is pretty much the most simple case for a web
server to handle.

Regards,
Dennis