{"id":5371,"date":"2023-02-15T13:26:30","date_gmt":"2023-02-15T07:56:30","guid":{"rendered":"https:\/\/trysiteprice.com\/blog\/?p=5371"},"modified":"2023-02-15T13:26:30","modified_gmt":"2023-02-15T07:56:30","slug":"nginx-custom-error-403-page-not-working-with-ip-deny-configuration","status":"publish","type":"post","link":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/","title":{"rendered":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration"},"content":{"rendered":"<p>If you are using the <code>deny<\/code> directive in your Nginx configuration to block access to certain IP addresses or ranges, you may find that your custom error page for HTTP 403 Forbidden errors is not being displayed for denied requests. This is because when a request is denied by the <code>deny<\/code> directive, Nginx returns a 403 response directly, without going through the standard request processing pipeline that would trigger the custom error page.<\/p>\n<p>To display a custom error page for denied requests, you can use the <code>error_page<\/code> directive in combination with a named location. Here is an example configuration:<\/p>\n<div class=\"bg-black mb-4 rounded-md\">\n<div class=\"flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans\"><\/div>\n<div class=\"p-4 overflow-y-auto\"><code class=\"!whitespace-pre hljs language-bash\">http {<br \/>\n  server {<br \/>\n    listen 80;<br \/>\n    server_name example.com;<\/p>\n<p>    <span class=\"hljs-comment\"># Custom error page for 403 Forbidden<\/span><br \/>\n    error_page 403 \/403.html;<br \/>\n    location = \/403.html {<br \/>\n      root \/var\/www\/html;<br \/>\n      internal;<br \/>\n    }<\/p>\n<p>    <span class=\"hljs-comment\"># Deny requests from specific IP addresses<\/span><br \/>\n    location \/ {<br \/>\n      deny 10.0.0.1;<br \/>\n      deny 10.0.0.2;<br \/>\n      <span class=\"hljs-comment\"># ... other deny rules ...<\/span><br \/>\n      try_files <span class=\"hljs-variable\">$uri<\/span> <span class=\"hljs-variable\">$uri<\/span>\/ \/index.html;<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><\/div>\n<\/div>\n<p>In this example, the <code>error_page<\/code> directive specifies a named location for the custom error page, which is located at <code>\/var\/www\/html\/403.html<\/code>. The <code>location<\/code> block for the named location uses the <code>root<\/code> directive to specify the directory where the error page is located, and the <code>internal<\/code> directive to ensure that the named location is not accessible directly from the web. This means that the only way to access the error page is through the <code>error_page<\/code> directive.<\/p>\n<p>The <code>location \/<\/code> block contains the <code>deny<\/code> directives to block requests from specific IP addresses, and the <code>try_files<\/code> directive to serve the main content of the website. When a request is denied by one of the <code>deny<\/code> rules, Nginx will return a 403 response, which will trigger the <code>error_page<\/code> directive to display the custom error page.<\/p>\n<p>With this configuration, requests from the denied IP addresses will be blocked and a custom error page will be displayed for 403 Forbidden errors.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you are using the deny directive in your Nginx configuration to block access to certain IP addresses or ranges, you may find that your custom error page for HTTP 403 Forbidden errors is not being displayed for denied requests. This is because when a request is denied by the deny directive, Nginx returns a &#8230; <a title=\"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration\" class=\"read-more\" href=\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\" aria-label=\"Read more about Nginx: Custom Error 403 Page Not Working with IP Deny Configuration\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5371","post","type-post","status-publish","format-standard","hentry","category-best-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice\" \/>\n<meta property=\"og:description\" content=\"If you are using the deny directive in your Nginx configuration to block access to certain IP addresses or ranges, you may find that your custom error page for HTTP 403 Forbidden errors is not being displayed for denied requests. This is because when a request is denied by the deny directive, Nginx returns a ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\" \/>\n<meta property=\"og:site_name\" content=\"TrySitePrice\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-15T07:56:30+00:00\" \/>\n<meta name=\"author\" content=\"Rahul Sahu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\"},\"author\":{\"name\":\"Rahul Sahu\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/358e04eeea4281deacad2f30c58e67f4\"},\"headline\":\"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration\",\"datePublished\":\"2023-02-15T07:56:30+00:00\",\"dateModified\":\"2023-02-15T07:56:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\"},\"wordCount\":244,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/#organization\"},\"articleSection\":[\"Best\/Tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\",\"url\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\",\"name\":\"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice\",\"isPartOf\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/#website\"},\"datePublished\":\"2023-02-15T07:56:30+00:00\",\"dateModified\":\"2023-02-15T07:56:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trysiteprice.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#website\",\"url\":\"https:\/\/trysiteprice.com\/blog\/\",\"name\":\"TrySitePrice\",\"description\":\"Free Website Value Calculator Tool\",\"publisher\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/trysiteprice.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#organization\",\"name\":\"TrySitePrice\",\"url\":\"https:\/\/trysiteprice.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/trysiteprice.com\/blog\/wp-content\/uploads\/2021\/12\/cropped-trysiteprice-logo.png\",\"contentUrl\":\"https:\/\/trysiteprice.com\/blog\/wp-content\/uploads\/2021\/12\/cropped-trysiteprice-logo.png\",\"width\":395,\"height\":268,\"caption\":\"TrySitePrice\"},\"image\":{\"@id\":\"https:\/\/trysiteprice.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/358e04eeea4281deacad2f30c58e67f4\",\"name\":\"Rahul Sahu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/51f0f95f7b95665f62baed2211572165?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/51f0f95f7b95665f62baed2211572165?s=96&d=mm&r=g\",\"caption\":\"Rahul Sahu\"},\"sameAs\":[\"https:\/\/trysiteprice.com\/blog\"],\"url\":\"https:\/\/trysiteprice.com\/blog\/author\/rsahu4242_trysiteprice\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/","og_locale":"en_US","og_type":"article","og_title":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice","og_description":"If you are using the deny directive in your Nginx configuration to block access to certain IP addresses or ranges, you may find that your custom error page for HTTP 403 Forbidden errors is not being displayed for denied requests. This is because when a request is denied by the deny directive, Nginx returns a ... Read more","og_url":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/","og_site_name":"TrySitePrice","article_published_time":"2023-02-15T07:56:30+00:00","author":"Rahul Sahu","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#article","isPartOf":{"@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/"},"author":{"name":"Rahul Sahu","@id":"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/358e04eeea4281deacad2f30c58e67f4"},"headline":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration","datePublished":"2023-02-15T07:56:30+00:00","dateModified":"2023-02-15T07:56:30+00:00","mainEntityOfPage":{"@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/"},"wordCount":244,"commentCount":0,"publisher":{"@id":"https:\/\/trysiteprice.com\/blog\/#organization"},"articleSection":["Best\/Tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/","url":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/","name":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration - TrySitePrice","isPartOf":{"@id":"https:\/\/trysiteprice.com\/blog\/#website"},"datePublished":"2023-02-15T07:56:30+00:00","dateModified":"2023-02-15T07:56:30+00:00","breadcrumb":{"@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/trysiteprice.com\/blog\/nginx-custom-error-403-page-not-working-with-ip-deny-configuration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trysiteprice.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Nginx: Custom Error 403 Page Not Working with IP Deny Configuration"}]},{"@type":"WebSite","@id":"https:\/\/trysiteprice.com\/blog\/#website","url":"https:\/\/trysiteprice.com\/blog\/","name":"TrySitePrice","description":"Free Website Value Calculator Tool","publisher":{"@id":"https:\/\/trysiteprice.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trysiteprice.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/trysiteprice.com\/blog\/#organization","name":"TrySitePrice","url":"https:\/\/trysiteprice.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trysiteprice.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/trysiteprice.com\/blog\/wp-content\/uploads\/2021\/12\/cropped-trysiteprice-logo.png","contentUrl":"https:\/\/trysiteprice.com\/blog\/wp-content\/uploads\/2021\/12\/cropped-trysiteprice-logo.png","width":395,"height":268,"caption":"TrySitePrice"},"image":{"@id":"https:\/\/trysiteprice.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/358e04eeea4281deacad2f30c58e67f4","name":"Rahul Sahu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trysiteprice.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/51f0f95f7b95665f62baed2211572165?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/51f0f95f7b95665f62baed2211572165?s=96&d=mm&r=g","caption":"Rahul Sahu"},"sameAs":["https:\/\/trysiteprice.com\/blog"],"url":"https:\/\/trysiteprice.com\/blog\/author\/rsahu4242_trysiteprice\/"}]}},"_links":{"self":[{"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/posts\/5371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/comments?post=5371"}],"version-history":[{"count":1,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/posts\/5371\/revisions"}],"predecessor-version":[{"id":5374,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/posts\/5371\/revisions\/5374"}],"wp:attachment":[{"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/media?parent=5371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/categories?post=5371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trysiteprice.com\/blog\/wp-json\/wp\/v2\/tags?post=5371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}