nginx returns html instead of json response

Kaushal Shriyan kaushalshriyan at gmail.com
Fri Nov 18 17:40:20 UTC 2022


On Fri, Nov 18, 2022 at 9:37 PM Francis Daly <francis at daoine.org> wrote:

> On Fri, Nov 18, 2022 at 07:07:41PM +0530, Kaushal Shriyan wrote:
> > On Thu, Nov 17, 2022 at 10:57 PM Francis Daly <francis at daoine.org>
> wrote:
>
> Hi there,
>
> > Please let me know if you need any additional information and I look
> > forward to hearing from you. Thanks in advance.
>
> When the request is for "/apis/unique_id", what file on the filesystem
> do you want nginx to ask drupal to use?
>
>
Thanks Francis for your email response.  Let me explain with two different
scenarios :-

*Scenario 1 *
500 errors occurred in any random page of the site for example -
https://mydrupalsite.com/randompath , in that case we want Nginx to provide
an HTML error page. And this is working as we have set up a custom HTML
page and configured Nginx 500 error to point to that HTML page. We don't
have any issue here

*Scenario 2 *
500 error occurred when the user tried to access the page -
https://mydrupalsite.com/apis or https://mydrupalsite.com/apis/unique_id .
Here we want a json response that Drupal is sending. Now we can't say what
specific file Nginx should use in this case to display the JSON response.
As when a user is trying to access these pages , in the backend , to serve
this request Drupal is processing N number of files, now among those files
in any file that 500 exceptions can occur. At code level we are just
handling that and sending JSON responses. Like below.
try{
                $node_new->save();
              }
              catch(\Exception $e) {
                $output = [
                  "type" => "/problems/API-saving-error",
                  "title" => $this->t("Issue occurred while saving the
API."),
                  "detail" => $this->t("There are some wrong inputs passed
to DB which caused this issue."),
                ];
                return new JsonResponse($output, 500);
              }

So here you can see that we handled and sent the JSON response , now we
can't tell Nginx which file we want to present , as the JSON response can
come from any file where 500 exceptions are handled. (edited)

And moreover the content of the JSON response also varies based on the
reason behind that 500 exception, as we try to give relevant messages to
the user , so if 500 errors occurred in any other php file the JSON
response content can be different.

So we want Nginx to display this JSON response whatever Drupal is sending
instead presenting the default HTML page which is configured for 500 error

So , it's not like that we need to tell Nginx what file of the filesystem
Nginx can use to display 500 error for https://mydrupalsite.com/apis or
https://mydrupalsite.com/apis/unique_id, rather we want Nginx to display
whatever Drupal is sending. And it can be easily achieved if we don't
configure 500 error pages at Nginx , in that case whatever Drupal is ending
that only will be displayed. Problem is that we have to keep that 500 error
page configuration at Nginx and at the same Nginx should not use that error
page for these two types of URLs- https://mydrupalsite.com/apis or
https://mydrupalsite.com/apis/unique_id

Please let me know if you need any additional information and I look
forward to hearing from you. Thanks in advance.

Best Regards,

Kaushal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20221118/d1b24adc/attachment.htm>


More information about the nginx mailing list