{"id":5959,"date":"2026-11-02T23:03:34","date_gmt":"2026-11-02T23:03:34","guid":{"rendered":"https:\/\/zynoo.com\/blog\/?p=5959"},"modified":"2026-11-02T23:04:36","modified_gmt":"2026-11-02T23:04:36","slug":"nginx-rate-limiting","status":"publish","type":"post","link":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/","title":{"rendered":"How to Configure Nginx Rate Limiting on Ubuntu"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\" id=\"h-\"><strong>Nginx rate limiting<\/strong> is a built-in feature that controls how many HTTP requests a client can make within a given period. It can reduce abusive traffic targeting APIs, login pages, and resource-intensive applications without requiring additional software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this guide, you&#8217;ll configure Nginx request limits, test them safely, and enable protection on an Ubuntu server.<\/p>\n\n\n\n<h2 id=\"h-how-does-nginx-rate-limiting-work\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Does_Nginx_Rate_Limiting_Work\"><\/span>How Does Nginx Rate Limiting Work?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx uses the <code>limit_req<\/code> module to track incoming requests, commonly by client IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, you can configure an average limit of five requests per second while allowing short bursts of traffic. Requests exceeding the permitted burst can then be rejected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This helps prevent excessive requests from overwhelming your application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong> Rate limiting helps mitigate certain Layer 7 HTTP floods. It cannot stop large network-level DDoS attacks that saturate your connection.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting-1024x576.webp\" alt=\"how to configure Nginx Rate Limiting\" class=\"wp-image-5963\" srcset=\"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting-1024x576.webp 1024w, https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting-300x169.webp 300w, https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting-768x432.webp 768w, https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting-1536x864.webp 1536w, https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/how-to-configure-Nginx-Rate-Limiting.webp 1672w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"h-prerequisites\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span>Prerequisites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You&#8217;ll need an Ubuntu server with Nginx installed, SSH access with sudo privileges, and an existing website or application.<\/p>\n\n\n\n<div class=\"wp-block-group zynoo-related-reading has-border-color has-text-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"border-color:#c7d8ef;border-width:1px;border-radius:8px;border-left-color:#0069ff;border-left-width:3px;color:#24364f;background-color:#eaf2ff;margin-top:28px;margin-bottom:28px;padding-top:18px;padding-right:22px;padding-bottom:18px;padding-left:22px;font-size:16px;line-height:1.8\">\n<p class=\"wp-block-paragraph\">If you&#8217;re setting up Nginx for the first time, follow our <a href=\"https:\/\/zynoo.com\/blog\/nginx-reverse-proxy-ubuntu\/\">Nginx reverse proxy tutorial<\/a>.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Before making changes, back up your existing website configuration.<\/p>\n\n\n\n<h2 id=\"h-step-1-define-a-rate-limiting-zone\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_1_Define_a_Rate-Limiting_Zone\"><\/span>Step 1: Define a Rate-Limiting Zone<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Connect to your server through SSH.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On a standard Ubuntu Nginx installation, create a new configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/nginx\/conf.d\/rate-limit.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>limit_req_zone $binary_remote_addr zone=perip:10m rate=5r\/s;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This configuration uses the client&#8217;s IP address to track requests, allocates 10 MB for tracking data, and sets an average limit of five requests per second per IP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>limit_req_zone<\/code> directive must be placed inside Nginx&#8217;s <code>http<\/code> context. The standard Ubuntu configuration includes <code>conf.d<\/code> files there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Save the file.<\/p>\n\n\n\n<h2 id=\"h-step-2-enable-rate-limiting-for-your-website\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_2_Enable_Rate_Limiting_for_Your_Website\"><\/span>Step 2: Enable Rate Limiting for Your Website<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open your existing Nginx website configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/nginx\/sites-available\/app.example.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace the filename with your actual configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For an HTTP application running on port 3000, a protected API endpoint could look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location \/api\/ {\n    limit_req zone=perip burst=10 nodelay;\n    limit_req_status 429;\n    limit_req_dry_run on;\n\n    proxy_pass http:\/\/127.0.0.1:3000;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s what the important directives do:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>limit_req<\/code>: Applies the previously defined limit.<\/li>\n\n\n\n<li><code>burst=10<\/code>: Allows a short burst of excess requests.<\/li>\n\n\n\n<li><code>nodelay<\/code>: Processes permitted burst requests immediately.<\/li>\n\n\n\n<li><code>limit_req_status 429<\/code>: Returns HTTP 429 when requests are rejected.<\/li>\n\n\n\n<li><code>limit_req_dry_run on<\/code>: Records excessive requests without blocking them.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong> Add these rate-limiting directives to your existing matching <code>location<\/code> block. Don&#8217;t create duplicate locations or replace your existing backend configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The values shown are examples. Choose limits based on your application&#8217;s normal request patterns.<\/p>\n\n\n\n<h2 id=\"h-step-3-validate-your-nginx-configuration\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_3_Validate_Your_Nginx_Configuration\"><\/span>Step 3: Validate Your Nginx Configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check the configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nginx -t<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the test succeeds, reload Nginx:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If an error appears, correct it before reloading.<\/p>\n\n\n\n<h2 id=\"h-step-4-test-the-rate-limit\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_4_Test_the_Rate_Limit\"><\/span>Step 4: Test the Rate Limit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because dry-run mode is enabled, requests won&#8217;t be rejected yet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Monitor the Nginx error log:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -f \/var\/log\/nginx\/error.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">From another terminal, send a small test burst to an endpoint you control:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in $(seq 1 15); do\n  curl -s -o \/dev\/null -w \"%{http_code}\\n\" \\\n  https:&#47;&#47;app.example.com\/api\/health\ndone<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace the URL with a working endpoint on your own test or staging application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If requests exceed the limit, Nginx should record messages containing <code>limiting requests, dry run<\/code> in its error log.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your application should continue returning its normal responses because enforcement isn&#8217;t enabled.<\/p>\n\n\n\n<h2 id=\"h-step-5-enable-rate-limiting\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_5_Enable_Rate_Limiting\"><\/span>Step 5: Enable Rate Limiting<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once you&#8217;ve reviewed the results and confirmed your limits are appropriate, remove this directive from the protected location:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>limit_req_dry_run on;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Validate and reload Nginx again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Excessive requests can now receive <strong>HTTP 429 Too Many Requests<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repeat a controlled test and check the response codes. The exact results depend on request timing and your configured limits.<\/p>\n\n\n\n<h3 id=\"h-how-to-undo-the-changes\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_to_Undo_the_Changes\"><\/span>How to Undo the Changes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If legitimate users are affected, restore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>limit_req_dry_run on;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Validate and reload Nginx. This returns the configuration to monitoring mode without rejecting requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can then adjust the limits based on real traffic.<\/p>\n\n\n\n<h2 id=\"h-important-nginx-behind-cloudflare-or-another-cdn\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Important_Nginx_Behind_Cloudflare_or_Another_CDN\"><\/span>Important: Nginx Behind Cloudflare or Another CDN<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When Nginx sits behind a reverse proxy, the client IP visible to Nginx may belong to the proxy rather than the original visitor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Applying per-IP limits without correcting this can group unrelated users together.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configure trusted client-IP handling using Nginx&#8217;s Real IP module and your proxy provider&#8217;s documented IP ranges before enforcing per-client limits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Never trust arbitrary visitor-supplied IP headers.<\/p>\n\n\n\n<h2 id=\"h-does-nginx-rate-limiting-replace-ddos-protection\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Does_Nginx_Rate_Limiting_Replace_DDoS_Protection\"><\/span>Does Nginx Rate Limiting Replace DDoS Protection?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No. Nginx can limit excessive HTTP requests reaching your application, but it cannot filter traffic that has already saturated your server&#8217;s upstream network connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For broader protection, combine application-level controls with hosting-level mitigation.<\/p>\n\n\n\n<div class=\"wp-block-group zynoo-related-reading has-border-color has-text-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"border-color:#c7d8ef;border-width:1px;border-radius:8px;border-left-color:#0069ff;border-left-width:3px;color:#24364f;background-color:#eaf2ff;margin-top:28px;margin-bottom:28px;padding-top:18px;padding-right:22px;padding-bottom:18px;padding-left:22px;font-size:16px;line-height:1.8\">\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/zynoo.com\/blog\/ddos-protection\/\">DDoS protection guide<\/a> explains how network-level and application-level defenses complement each other.<\/p>\n<\/div>\n\n\n\n<h2 id=\"h-frequently-asked-questions\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Frequently_Asked_Questions\"><\/span>Frequently Asked Questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1793660043387\"><strong class=\"schema-faq-question\">Is Nginx rate limiting free?<\/strong> <p class=\"schema-faq-answer\">Yes. Nginx Open Source includes the limit_req module.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1793660061241\"><strong class=\"schema-faq-question\">Can Nginx rate limiting block legitimate visitors?<\/strong> <p class=\"schema-faq-answer\">Yes. Overly strict settings can reject legitimate requests, especially when several users share one IP address. Test in dry-run mode before enabling enforcement.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1793660073589\"><strong class=\"schema-faq-question\">Does Nginx rate limiting work for APIs?<\/strong> <p class=\"schema-faq-answer\">Yes. It&#8217;s particularly useful for controlling excessive requests to API endpoints and other resource-intensive application routes.<\/p> <\/div> <\/div>\n\n\n\n<h2 id=\"h-conclusion\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx provides built-in rate limiting that can help reduce abusive <a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP\">HTTP<\/a> traffic without requiring additional software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configure the request limit, test it in dry-run mode, and enable enforcement only after reviewing the results.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For comprehensive server protection, use rate limiting alongside appropriate upstream DDoS mitigation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nginx rate limiting is a built-in feature that controls how many HTTP requests a client can make within a given period. It can reduce abusive traffic targeting APIs, login pages, and resource-intensive applications without requiring additional software. In this guide, you&#8217;ll configure Nginx request limits, test them safely, and enable protection on an Ubuntu server. [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":5962,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[499],"tags":[],"class_list":["post-5959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Configure Nginx Rate Limiting on Ubuntu<\/title>\n<meta name=\"description\" content=\"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Configure Nginx Rate Limiting on Ubuntu\" \/>\n<meta property=\"og:description\" content=\"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/\" \/>\n<meta property=\"og:site_name\" content=\"ZYNOO Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-02T23:03:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-02T23:04:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Adam Weller\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adam Weller\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/\"},\"author\":{\"name\":\"Adam Weller\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#\\\/schema\\\/person\\\/dc0f08d1e3da74e3d4ae21a072525738\"},\"headline\":\"How to Configure Nginx Rate Limiting on Ubuntu\",\"datePublished\":\"2026-11-02T23:03:34+00:00\",\"dateModified\":\"2026-11-02T23:04:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/\"},\"wordCount\":792,\"publisher\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Nginx-Rate-Limiting.webp\",\"articleSection\":[\"Linux Tutorials\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"FAQPage\"],\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/\",\"name\":\"How to Configure Nginx Rate Limiting on Ubuntu\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Nginx-Rate-Limiting.webp\",\"datePublished\":\"2026-11-02T23:03:34+00:00\",\"dateModified\":\"2026-11-02T23:04:36+00:00\",\"description\":\"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#breadcrumb\"},\"mainEntity\":[{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660043387\"},{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660061241\"},{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660073589\"}],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#primaryimage\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Nginx-Rate-Limiting.webp\",\"contentUrl\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Nginx-Rate-Limiting.webp\",\"width\":1672,\"height\":941,\"caption\":\"Nginx Rate Limiting\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linux Tutorials\",\"item\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/category\\\/linux-tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Configure Nginx Rate Limiting on Ubuntu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/\",\"name\":\"Zynoo Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#organization\",\"name\":\"ZYNOO\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo.png\",\"width\":149,\"height\":31,\"caption\":\"ZYNOO\"},\"image\":{\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/#\\\/schema\\\/person\\\/dc0f08d1e3da74e3d4ae21a072525738\",\"name\":\"Adam Weller\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/adam-weller-v2-96x96.jpg\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/adam-weller-v2-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/adam-weller-v2-96x96.jpg\",\"caption\":\"Adam Weller\"},\"description\":\"Adam Weller covers web hosting, Linux and online projects for the ZYNOO blog.\",\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/author\\\/adam-weller\\\/\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660043387\",\"position\":1,\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660043387\",\"name\":\"Is Nginx rate limiting free?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Nginx Open Source includes the limit_req module.\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660061241\",\"position\":2,\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660061241\",\"name\":\"Can Nginx rate limiting block legitimate visitors?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Overly strict settings can reject legitimate requests, especially when several users share one IP address. Test in dry-run mode before enabling enforcement.\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660073589\",\"position\":3,\"url\":\"https:\\\/\\\/zynoo.com\\\/blog\\\/nginx-rate-limiting\\\/#faq-question-1793660073589\",\"name\":\"Does Nginx rate limiting work for APIs?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. It's particularly useful for controlling excessive requests to API endpoints and other resource-intensive application routes.\",\"inLanguage\":\"en-US\"},\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Configure Nginx Rate Limiting on Ubuntu","description":"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.","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:\/\/zynoo.com\/blog\/nginx-rate-limiting\/","og_locale":"en_US","og_type":"article","og_title":"How to Configure Nginx Rate Limiting on Ubuntu","og_description":"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.","og_url":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/","og_site_name":"ZYNOO Blog","article_published_time":"2026-11-02T23:03:34+00:00","article_modified_time":"2026-11-02T23:04:36+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp","type":"image\/webp"}],"author":"Adam Weller","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Adam Weller","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#article","isPartOf":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/"},"author":{"name":"Adam Weller","@id":"https:\/\/zynoo.com\/blog\/#\/schema\/person\/dc0f08d1e3da74e3d4ae21a072525738"},"headline":"How to Configure Nginx Rate Limiting on Ubuntu","datePublished":"2026-11-02T23:03:34+00:00","dateModified":"2026-11-02T23:04:36+00:00","mainEntityOfPage":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/"},"wordCount":792,"publisher":{"@id":"https:\/\/zynoo.com\/blog\/#organization"},"image":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#primaryimage"},"thumbnailUrl":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp","articleSection":["Linux Tutorials"],"inLanguage":"en-US"},{"@type":["WebPage","FAQPage"],"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/","url":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/","name":"How to Configure Nginx Rate Limiting on Ubuntu","isPartOf":{"@id":"https:\/\/zynoo.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#primaryimage"},"image":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#primaryimage"},"thumbnailUrl":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp","datePublished":"2026-11-02T23:03:34+00:00","dateModified":"2026-11-02T23:04:36+00:00","description":"Configure Nginx rate limiting on Ubuntu, test them safely in dry-run mode, and protect your website or API from excessive requests.","breadcrumb":{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#breadcrumb"},"mainEntity":[{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660043387"},{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660061241"},{"@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660073589"}],"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#primaryimage","url":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp","contentUrl":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/Nginx-Rate-Limiting.webp","width":1672,"height":941,"caption":"Nginx Rate Limiting"},{"@type":"BreadcrumbList","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zynoo.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Linux Tutorials","item":"https:\/\/zynoo.com\/blog\/category\/linux-tutorials\/"},{"@type":"ListItem","position":3,"name":"How to Configure Nginx Rate Limiting on Ubuntu"}]},{"@type":"WebSite","@id":"https:\/\/zynoo.com\/blog\/#website","url":"https:\/\/zynoo.com\/blog\/","name":"Zynoo Blog","description":"","publisher":{"@id":"https:\/\/zynoo.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zynoo.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zynoo.com\/blog\/#organization","name":"ZYNOO","url":"https:\/\/zynoo.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zynoo.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2025\/08\/logo.png","contentUrl":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2025\/08\/logo.png","width":149,"height":31,"caption":"ZYNOO"},"image":{"@id":"https:\/\/zynoo.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zynoo.com\/blog\/#\/schema\/person\/dc0f08d1e3da74e3d4ae21a072525738","name":"Adam Weller","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/adam-weller-v2-96x96.jpg","url":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/adam-weller-v2-96x96.jpg","contentUrl":"https:\/\/zynoo.com\/blog\/wp-content\/uploads\/2026\/11\/adam-weller-v2-96x96.jpg","caption":"Adam Weller"},"description":"Adam Weller covers web hosting, Linux and online projects for the ZYNOO blog.","url":"https:\/\/zynoo.com\/blog\/author\/adam-weller\/"},{"@type":"Question","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660043387","position":1,"url":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660043387","name":"Is Nginx rate limiting free?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Yes. Nginx Open Source includes the limit_req module.","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660061241","position":2,"url":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660061241","name":"Can Nginx rate limiting block legitimate visitors?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Yes. Overly strict settings can reject legitimate requests, especially when several users share one IP address. Test in dry-run mode before enabling enforcement.","inLanguage":"en-US"},"inLanguage":"en-US"},{"@type":"Question","@id":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660073589","position":3,"url":"https:\/\/zynoo.com\/blog\/nginx-rate-limiting\/#faq-question-1793660073589","name":"Does Nginx rate limiting work for APIs?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Yes. It's particularly useful for controlling excessive requests to API endpoints and other resource-intensive application routes.","inLanguage":"en-US"},"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/posts\/5959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/comments?post=5959"}],"version-history":[{"count":2,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/posts\/5959\/revisions"}],"predecessor-version":[{"id":5964,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/posts\/5959\/revisions\/5964"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/media\/5962"}],"wp:attachment":[{"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/media?parent=5959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/categories?post=5959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zynoo.com\/blog\/wp-json\/wp\/v2\/tags?post=5959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}