The question on our Facebook page it was: "What makes iGuRu.gr fast?" There were several answers: the cloud, the CDN, the server location. Yes, they may be, but they are not enough.
iGuRu.gr uses cloud hosting on a fairly powerful VPS (AMD EPYC 7702, 64GB DDR4 RAM (ECC) with 10 dedicated cores) but we could also have something smaller. But what plays an important role in the performance of the site is the setup.
Apache can cause performance problems when the number of concurrent users grows above a certain point – perhaps hundreds of concurrent users users. O Apache διαθέτει σημαντικούς πόρους σε κάθε σύνδεση, και έτσι τείνει να εξαντλείται η διαθέσιμη μνήμη. Ο Apache μπορεί να ρυθμιστεί ώστε να περιορίζει τις συνδέσεις για να αποφεύγεται η εξάντληση της μνήμης, αλλά αυτό σημαίνει ότι όταν ξεπεραστεί το όριο, τα νέα αιτήματα σύνδεσης θα πρέπει να περιμένουν.
Additionally, Apache loads another copy of the mod_php module into memory for each connection, even if it only serves static files (images, CSS, JavaScript, etc.). This consumes even more resources for each connection and further limits server performance.
So to avoid all of the above, we replaced (for years) Apache with NGINX. NGINX manages many thousands of simultaneous connections with a fixed memory footprint, so we do not need to limit the number of simultaneous connections.
Το NGINX (προφέρεται engine X) διαχειρίζεται καλύτερα τα στατικά αρχεία, με ενσωματωμένα, και εύκολα ρυθμιζόμενα στοιχεία ελέγχου προσωρινής αποθήκευσης. Το φορτίο στον web server μειώνεται και ο website it can serve much more traffic much faster.
You can (if you want Apache security) place an NGINX server "in front" of Apache as the reverse server. The NGINX server will receive the requests, serve the static files and send the PHP requests to Apache, to process them.
For dynamically generated pages like those using WordPress, NGINX settings are easy.
Add permalink support to NGINX. This eliminates the dependency on the .htaccess file, which is specific to Apache.
Add support for temporary storage with some caching tool like FastCGI and of course applying all security precautions for WordPress security in NGINX.
Adding caching to WordPress and combining WordPress with NGINX do wonders. But they do not reach….
In addition to the above we use Cloudflare for DNS and caching. The caching from this service is so powerful that if it is not cleared automatically after each new post you will not see the post on the page.
Then we can talk about the CDN, ie the storage and serving of all static files (images, css, js) from another storage server and not from the web server running SQL and PHP.