Hi, Checking in again if someone can help me with my earlier post to this mailing list?
I have a follow up question, when the user invokes -> http://mydomain.com/apis <http://mydomain.com/api/v1/*> -> 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."), 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; } error_page 503 /error-503.html; location = /error-503.html { root /var/www/html/gsmamarketplace/web/servererrorpages/error-pages-500-503/html; } 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) } to send back the below response to the client browser instead of rendering 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."), Please guide me. Thanks in advance. I look forward to hearing from you. Best Regards, Kaushal On Tue, Nov 8, 2022 at 1:25 PM Kaushal Shriyan <kaushalshri...@gmail.com> wrote: > > > On Tue, Nov 8, 2022 at 11:20 AM Maxim Dounin <mdou...@mdounin.ru> wrote: > >> Hello! >> >> On Mon, Nov 07, 2022 at 08:59:51PM +0530, Kaushal Shriyan wrote: >> >> > I am running the nginx version: nginx/1.22 as a reverse proxy server on >> > CentOS Linux release 7.9.2009 (Core). Is there a way to return json >> > response when i hit http://mydomain.com/api/v1/* instead of the html >> > response. >> > >> > location /api/v1/* { >> > internal; >> > add_header 'Content-Type' 'application/json charset=UTF-8'; >> > >> > error_page 502 '{"error": {"status_code": 502,"status": "Bad >> > Gateway"}}'; >> > } >> > >> > But whenever I try to send a request to /api/v1/users via curl I get the >> > HTML source code in response instead of JSON response. >> > >> > Please guide me. Thanks in advance. I look forward to hearing from you. >> >> First of all, the "/api/v1/*" does not look like a valid prefix. >> Note that "*" is not special in prefix locations, so you need just >> "/api/v1/" to match relevant requests. See >> http://nginx.org/r/location for details. >> >> Further, trying to overwrite the Content-Type returned with the >> add_header directive will fail, as nginx will still send the >> Content-Type as set by the "types" and "default_type" directive. >> See http://nginx.org/r/types for details. To set charset you can >> use the "charset" directive, see http://nginx.org/r/charset. >> >> Additionally, the "error_page" directive does not accept strings. >> If you want to return a string directly from nginx in case of an error, >> you can use error_page with an internal URI, and then use the >> "return" directive to return the text. See >> http://nginx.org/r/error_page and http://nginx.org/r/return for >> details. >> >> And, as already pointed out in another response, the "internal" >> directive implies that the location won't be accessible from the >> outside, so you have to remove it. See >> http://nginx.org/r/internal for details. >> >> Further, your location does not contain actual proxying - so you >> probably want to add some, or all matched requests will be >> considered requests to static files. >> >> Summing the above, valid configuration will look like: >> >> location /api/v1/ { >> error_page 502 /error502; >> proxy_pass ... >> } >> >> location = /error502 { >> default_type text/json; >> charset UTF-8; >> charset_types text/json; >> return 200 '{"error": {"status_code": 502,"status": "Bad Gateway"}}'; >> } >> >> It might be a good idea to start with reading some introductory >> articles at http://nginx.org/en/docs/, notably: >> >> Beginner’s Guide >> http://nginx.org/en/docs/beginners_guide.html >> >> and >> >> How nginx processes a request >> http://nginx.org/en/docs/http/request_processing.html >> >> Hope this helps. >> >> -- >> Maxim Dounin >> http://mdounin.ru/ >> _______________________________________________ >> nginx mailing list -- nginx@nginx.org >> To unsubscribe send an email to nginx-le...@nginx.org > > > Thanks Maxim for a detailed explanation and I am currently reading the > documentation. > I have a follow up question, when the user invokes -> > http://mydomain.com/apis <http://mydomain.com/api/v1/*> -> 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."), > > 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; > } > > error_page 503 /error-503.html; > location = /error-503.html { > root > /var/www/html/gsmamarketplace/web/servererrorpages/error-pages-500-503/html; > } > > 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) > } > > to send back the below response to the client browser instead of rendering > 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."), > > Please guide me. Thanks in advance. I look forward to hearing from you. > > Best Regards, > > Kaushal >
nginxtest.conf
Description: Binary data
_______________________________________________ nginx mailing list -- nginx@nginx.org To unsubscribe send an email to nginx-le...@nginx.org