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