nginx returns html instead of json response

Kaushal Shriyan kaushalshriyan at
Mon Nov 14 14:54:15 UTC 2022

> On Fri, Nov 11, 2022 at 2:38 PM Francis Daly <francis at> wrote:
>> On Wed, Nov 09, 2022 at 11:45:20PM +0530, Kaushal Shriyan wrote:
>> Hi there,
>> > Checking in again if someone can help me with my earlier post to this
>> > mailing list?
>> The question in the post was, and is, a bit unclear to me.
>> You seem to be showing multiple different requests, so I'm not sure
>> exactly what you are asking.
>> Maybe it is also unclear to others? In that case,it may be useful if
>> you can simplify your example question?
>> > I have a follow up question, when the user invokes ->
>> > <*>  -> Nginx
>> Webserver
>> > -> Drupal 9 Core CMS -> PHP-FPM backend server.
>> >
>> > Nginx should present the below info on 500 ISE error conditions for
>> /apis
>> > and /apis/* The below message sends back the response to Nginx web
>> server
>> > to render it to the client browser instead of the /error-500.html file
>> > contents.
>> >
>> >                   "type" => "/problems/API-saving-error",
>> >                   "title" => $this->t("Issue occured while saving the
>> > API."),
>> >                   "detail" => $this->t("There are some wrong inputs
>> passed
>> > to DB which caused this issue."),
>> What one specific request do you want to make? (Maybe
>>, maybe*, maybe
>>, maybe something else?)
>> For that one specific request, what do you want nginx to do with
>> it? (Maybe make a http request to the Drupal system? Or a fastcgi request
>> to the Drupal system? Or handle it internally withint nginx?)
>> For the response from that request, what do you want nginx to do with
>> it? (Send it to the user as-is? Mangle / modify it somehow? If so --
>> how? Change the http response code or headers? Change the response body?)
>> I suspect that if you can describe what exactly you want nginx to do,
>> someone will have a better chance of sharing how to configure nginx to
>> do that thing.
>> > I have the below settings in nginx conf file
>> >
>> >              error_page 500 /error-500.html;
>> >              location = /error-500.html {
>> >              root
>> >
>> /var/www/html/gsmamarketplace/web/servererrorpages/error-pages-500-503/html;
>> >              }
>> For example: the above stanza says "if nginx is going to
>> send a http 500 response, it should send the contents of the file
>> /var/www/html/gsmamarketplace/web/servererrorpages/error-pages-500-503/html/error-500.html
>> as the response body", along with the http 500 response header.
>> If that is what you want nginx to do, the configuration is correct. If
>> it is not, it is not.
>> > I am trying to set the below location and try_files directive block in
>> > nginx.conf file
>> >      location /apis {
>> >             try_files $uri $uri/ /path/to/api/handler; (This part is not
>> > clear with me)
>> >             }
>> And I can see what this nginx config will do; but I do not know what you
>> want it to do. If you can give the full details for one example request,
>> then maybe it will become clear to me. (And maybe others will be able
>> to help too, if they are similarly confused.)
>> Thanks,
>>         f
>> --
>> Francis Daly        francis at
>> _______________________________________________
>> nginx mailing list -- nginx at
>> To unsubscribe send an email to nginx-leave at

We have a Drupal site and for this Drupal site we are showing customized
HTML pages if any 500 errors occurred in the site. This customized 500 html
error page is configured at Nginx server, so that whenever any 500 error
occurs on site, Nginx presents that HTML page.

Now , we don’t want that HTML error page for all the cases even if there
 500 errors occurred, instead we need a JSON response. For example and
for these two page hits, even if 500 error occurred we don’t want to show
the default HTML 500 error page which is configured at Nginx server level.
But Nginx should present the same HTML 500 error page for all other page
requests if 500 errors occurred while accessing those pages.

Question is can we do any configuration changes at Nginx , so that it will
not do anything even if 500 error occurred for that specific two types of
page request mentioned above while it will still consider other page
requests apart from these two for showing up the HTML error page as per the
configuration if 500 error occurred.

Problem that we are facing - We are handling the 500 error at code level in
Drupal end and we are sending JSON data, but that is not getting displayed
as Nginx taking the control of 500 error and it’s showing up the HTML error
page. We already verified that when we are removing that Nginx 500 error
page configuration, in that case we are getting JSON data that Drupal sent
for 500 errors.

So I think, if somehow we can pass the information to Nginx to not take any
action if 500 error occurred while hitting the or
 URLs then our job will done, because in that case whatever Drupal is
sending we will be able to see that if 500 error occurred. Please note that
for the URL  , uinque_id is a
parameter and it can be changed.

I have attached the nginx.conf file for your reference.

Please guide me. Thanks in advance. I look forward to hearing from you.

Best Regards,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nginxtest.conf
Type: application/octet-stream
Size: 3646 bytes
Desc: not available
URL: <>

More information about the nginx mailing list