{"id":5751,"date":"2024-10-30T11:47:49","date_gmt":"2024-10-30T10:47:49","guid":{"rendered":"https:\/\/www.lrob.fr\/?p=5751"},"modified":"2025-06-13T11:11:53","modified_gmt":"2025-06-13T09:11:53","slug":"plesk-and-nginx-reverse-proxy-performance-impact","status":"publish","type":"post","link":"https:\/\/www.lrob.fr\/en\/blog\/sysadmin\/plesk-et-nginx-reverse-proxy-impact-sur-les-performances\/","title":{"rendered":"Plesk and NGINX Reverse Proxy: Impact on performance"},"content":{"rendered":"<p class=\"wp-block-paragraph\">By default, Plesk uses NGINX as a reverse proxy for Apache. But is this default configuration optimal? What is the impact on performance? To answer these questions as a<a href=\"https:\/\/www.lrob.fr\/en\/\">web host<\/a> using Plesk, I carried out load tests on a Hetzner VPS (8 AMD Epyc cores) to measure the impact of enabling NGINX as a reverse proxy on overall performance.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Contents<\/h2><nav><ul><li class=\"\"><a href=\"#contexte-et-configuration\">Context and configuration<\/a><ul><li class=\"\"><a href=\"#configurations-nginx\">NGINX configurations<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#resultats-des-tests-de-performance\">Performance test results<\/a><\/li><li class=\"\"><a href=\"#analyse-impact-de-nginx-sur-les-performances\">Analysis: Impact of NGINX on performance<\/a><\/li><li class=\"\"><a href=\"#quelques-avantages-d-nginx-avec-plesk\">Other considerations concerning NGINX and Plesk<\/a><\/li><li class=\"\"><a href=\"#conclusion\">Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"contexte-et-configuration\">Context and configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As part of this benchmark, I compared server performance with NGINX enabled and disabled. I also tested NGINX cache activation (and that changes everything!).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Load tests were carried out using ApacheBench (ab), sending 5000 requests locally with a concurrency of 200 simultaneous requests. This ensured that the test lasted long enough to limit the margin of error. It should be noted that the test site is very light and high-performing compared with the average, with only 50 to 80ms TTFB (response time).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here are the main configurations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server<\/strong> 8-core Hetzner VPS (AMD Epyc)<\/li>\n\n\n\n<li><strong>Web server<\/strong> Plesk 18.0.65 with Apache + NGINX as reverse proxy<\/li>\n\n\n\n<li><strong>Test site<\/strong> : LRob.fr a WordPress FSE website, Twenty Twenty-Four theme with Breeze cache<\/li>\n\n\n\n<li><strong>Test commands<\/strong> : <code>ab -n 5000 -c 200 https:\/\/www.lrob.fr\/<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"configurations-nginx\">NGINX configurations<\/h3>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-3a88641f wp-block-group-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a1561d583956&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a1561d583956\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"871\" height=\"974\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/Plesk-nginx-default-settings.png\" alt=\"\" class=\"wp-image-5752\" srcset=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/Plesk-nginx-default-settings.png 871w, https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/Plesk-nginx-default-settings-134x150.png 134w, https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/Plesk-nginx-default-settings-268x300.png 268w\" sizes=\"auto, (max-width: 871px) 100vw, 871px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Default NGINX configuration (Plesk 18.0.65)<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a1561d583c31&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a1561d583c31\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"1024\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/plesk-nginx-custom-settings-698x1024.png\" alt=\"\" class=\"wp-image-5753\" srcset=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/plesk-nginx-custom-settings-698x1024.png 698w, https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/plesk-nginx-custom-settings-102x150.png 102w, https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/plesk-nginx-custom-settings-205x300.png 205w, https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/plesk-nginx-custom-settings.png 791w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Custom NGINX configuration<\/figcaption><\/figure>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"resultats-des-tests-de-performance\">Performance test results<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Nginx<\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Total time for 5000 requests<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Requests per second<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Average time per request<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Transfer rate<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\">Performance<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Activated<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">9.400 s<\/td><td class=\"has-text-align-center\" data-align=\"center\">531.94<\/td><td class=\"has-text-align-center\" data-align=\"center\">375.984 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\">16 572.67 Kb\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>100%<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Off<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">7.045 s<\/td><td class=\"has-text-align-center\" data-align=\"center\">709.74<\/td><td class=\"has-text-align-center\" data-align=\"center\">281.794 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\">22 130.80 Kb\/s<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>133.42%<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Enabled (static cache)<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">5.734 s<\/td><td class=\"has-text-align-center\" data-align=\"center\">884.26<\/td><td class=\"has-text-align-center\" data-align=\"center\">226.177 ms<\/td><td class=\"has-text-align-center\" data-align=\"center\">27567.59<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>166.24%<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8c4bbfbd-3c37-4bda-a4b4-e7acadb6a377\" href=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/nginx-on-off-cache-test.txt\">Raw results: NGINX on off cache test<\/a><a href=\"https:\/\/www.lrob.fr\/wp-content\/uploads\/2024\/10\/nginx-on-off-cache-test.txt\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-8c4bbfbd-3c37-4bda-a4b4-e7acadb6a377\">Download<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analyse-impact-de-nginx-sur-les-performances\">Analysis: Impact of NGINX on performance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With the default configuration (NGINX enabled), the server operates correctly, but a CPU bottleneck was observed. Overall CPU utilization (all cores) did not exceed 85 % in the load test, with the NGINX process also bottlenecked around 85%.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without NGINX, Apache handles requests directly. The results show a +33% improvement in performance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But the surprise is when the NGINX cache is activated and manages static files directly. Performance gains of +66%! And that's not all: we've also seen a reduction in CPU core utilization to 30%, leaving plenty of CPU available for other essential uses such as PHP-FPM or MariaDB\/MySQL. NGINX, however, is limited to 99% CPU usage (i.e. one core): Perhaps it's possible to extend its use to several CPU cores and boost results even further. At the time of testing, I still had 5 to 6 CPU cores available, enough to potentially multiply this result by 2 or 3. This is worth investigating further.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quelques-avantages-d-nginx-avec-plesk\">Other considerations concerning NGINX and Plesk<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Plesk favors the use of NGINX with several advantages that may justify its activation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Enhanced certificate generation<\/strong> For example, Plesk allows you to generate a certificate for webmail only, when NGINX is in place.<\/li>\n\n\n\n<li><strong>Security<\/strong> Functions such as OCSP Stapling are available in 1 click, only with NGINX.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I may be missing other advantages. The disadvantage is, of course, that you then have two web applications, which slightly increase the complexity of the installation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Using NGINX as a reverse proxy under Plesk can be extremely powerful for static sites, or when combined with a good caching system (<a href=\"https:\/\/www.lrob.fr\/en\/blog\/internet\/wordpress\/comparison-of-the-8-popular-free-caching-plugins-for-wordpress-which-is-the-best\/\">see cache comparison for WordPress<\/a>). But according to my test, it is essential to modify the NGINX settings to obtain a performance gain rather than a reduction compared to Apache alone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What's more, results can vary greatly depending on your end-applications (your sites) and their caches. If necessary, use my test methodology to make your own measurements and comparisons. I'm interested in your feedback: share your results in the comments!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In any case, if you want the same high performance as a dedicated server, but at a shared price, consider LRob offers for <a href=\"https:\/\/www.lrob.fr\/en\/web-hosting\/\">host your website<\/a> or <a href=\"https:\/\/www.lrob.fr\/en\/web-hosting\/web-agency\/\">host your web agency or your many sites.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>Par d\u00e9faut, Plesk utilise NGINX en Reverse proxy d&rsquo;Apache. Mais cette configuration par d\u00e9faut est-elle optimale ? Quel est l&rsquo;impact sur les performances\u202f? Pour r\u00e9pondre \u00e0 ces questions en tant qu&rsquo;h\u00e9bergeur web utilisant Plesk, j\u2019ai effectu\u00e9 des tests de charge sur un VPS Hetzner (8 c\u0153urs AMD Epyc) pour mesurer l&rsquo;impact de l&rsquo;activation d\u2019NGINX comme [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5756,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,5],"tags":[],"class_list":["post-5751","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sysadmin","category-blog"],"_links":{"self":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/posts\/5751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/comments?post=5751"}],"version-history":[{"count":4,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/posts\/5751\/revisions"}],"predecessor-version":[{"id":7457,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/posts\/5751\/revisions\/7457"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/media\/5756"}],"wp:attachment":[{"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/media?parent=5751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/categories?post=5751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lrob.fr\/en\/wp-json\/wp\/v2\/tags?post=5751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}