{"slug": "apache-http-server", "name": "Apache HTTP Server", "category": "other", "category_name": "Other software", "description": "", "recommenders": 5, "commenters": 29, "warners": 7, "score": 2.584, "rising": 1.02, "first": "2025-11-15", "latest": "2026-10-29", "why": "Apache was more than adequate for what I was doing, I had no issues with it in the past, and the setup was dead simple.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 6, "neutral": 16, "compare": 3, "warn": 7}, "spark": [0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1], "listed": true, "loved": [], "caveat": "", "short_quote": "Apache was more than adequate for what I was doing, I had no issues with it in the past, and the setup was dead simple.", "kind": "", "icon": true, "domain": "apache.org", "github_repo": null, "official_url": "https://httpd.apache.org", "pricing": "", "aliases": ["Apache HTTP Server", "Apache", "Apache httpd"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 801137344, "item_id": 50071084, "url": "https://news.ycombinator.com/item?id=50071084", "by": "networked", "date": "2026-10-13", "stance": "recommend", "quote": "You can set up a server easily with Apache", "excerpt": "Absolutely. Windows, macOS, and major FLOSS desktop environments support it. Nemo (Cinnamon) and Dolphin (KDE) open WebDAV URLs as directories. Total Commander for Android has a WebDAV plugin. You can set up a server easily with Apache, including an FTP-style inbox. Here is my config: https://github.com/dbohdan/apache-2.4-webdav. I don't recommend nginx for WebDAV. My main HTTP server, Caddy, has gained WebDAV suppor", "context": "", "use_case": "WebDAV server", "switched_from": "", "story": "IRCv3"}, {"id": 795389712, "item_id": 49711857, "url": "https://news.ycombinator.com/item?id=49711857", "by": "Suzuran", "date": "2026-09-15", "stance": "recommend", "quote": "When Apache became available we switched to it out of spite.", "excerpt": "Netscape died because we all hated it. Back when Apache didn't exist yet, we were forced to run Netscape's server. (Even if Apache did exist, we didn't have the $20K per-seat license fee for DEC's C compiler so we wouldn't have been able to compile it anyway). Netscape's license terms were such that we had to open our books to them. They would read through all of our transactions and decide how much we would have to ", "context": "", "use_case": "web server", "switched_from": "Netscape", "story": "LG says we're fake news [video]"}, {"id": 775136896, "item_id": 48446056, "url": "https://news.ycombinator.com/item?id=48446056", "by": "al_borland", "date": "2026-06-08", "stance": "recommend", "quote": "The current setup has been running for 10 years now with minimal maintenance.", "excerpt": "That\u2019s not really an issue for me. I use this setup for small internal stuff. It might have 300 users at most, and they aren\u2019t making constant requests. I run it on a small VM and only run into issues when someone dumps in so much data that PHP runs out of memory, which isn\u2019t an Apache issue. And that memory issue doesn\u2019t take down the site or server, it\u2019s just the one request that dies. That used to happen maybe 5 t", "context": "runs small internal tool for ~300 users", "use_case": "internal PHP tool web server", "switched_from": "", "story": "Learn PHP in 2026 (Yes, Really)"}, {"id": 775094320, "item_id": 48443395, "url": "https://news.ycombinator.com/item?id=48443395", "by": "al_borland", "date": "2026-06-08", "stance": "recommend", "quote": "Apache was more than adequate for what I was doing, I had no issues with it in the past, and the setup was dead simple.", "excerpt": "I generally just use Apache. A classic LAMP setup, if a DB is needed for anything. If no DB is needed, I guess it\u2019s just LAP This is pretty quick and painless to setup. SLES had a single command for it back when I used it, if I remember correctly. I currently have a simple Ansible playbook for it on RHEL. It\u2019s certainly much more straightforward than deploying Flask to production, especially if just using the default", "context": "", "use_case": "web server for PHP", "switched_from": "", "story": "Learn PHP in 2026 (Yes, Really)"}, {"id": 761668936, "item_id": 47604308, "url": "https://news.ycombinator.com/item?id=47604308", "by": "KronisLV", "date": "2026-04-01", "stance": "recommend", "quote": "just an Apache install, the config for which I can automatically append new shortened links to", "excerpt": "Some changes within pre-existing codebases (oh hey, we need feature or mechanism X). An entirely new internal system with LLM code review, DB migration tracking, time tracking, standups and Teams integration. A new system that trains neural nets to recognize crops based on Sentinel-2 satellite data (the neural net works okay, mowing and ploughing is harder with a mostly heuristic approach since I don't really have la", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Baton \u2013 A desktop app for developing with AI agents"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 801579744, "item_id": 50098734, "url": "https://news.ycombinator.com/item?id=50098734", "by": "Izkata", "date": "2026-10-15", "stance": "warn", "quote": "but also loses the original response body.", "excerpt": "It really shouldn't be, this error page should be familiar looking: https://i.sstatic.net/FRlUG.png It comes from ap_send_error_response(), near the bottom starting at https://github.com/apache/httpd/blob/b2dc966be4178ded1499d5d04cec7b6817d8b970/modules/http/http_protocol.c#L1358 Scrolling up from there a bit you can see some of the handling for ErrorDocument, which is configurable ( https://httpd.apache.org/docs/cur", "context": "", "use_case": "Web server", "switched_from": "", "story": "The gap in shared understanding of LLM capability is widening"}, {"id": 801130336, "item_id": 50070646, "url": "https://news.ycombinator.com/item?id=50070646", "by": "Izkata", "date": "2026-10-13", "stance": "warn", "quote": "It was so weird and I couldn't find it in the documentation", "excerpt": "Sorry, httpd. It was so weird and I couldn't find it in the documentation (and a different server we used on dev didn't do it, which was how the bug made it live) that I pulled down the official source code and found where it was happening so I could explain it to my team. I'm pretty sure it was all 5xx but can't remember for certain. This was back in 2019, with a much older project, and I'm pretty sure that part of ", "context": "", "use_case": "web server", "switched_from": "", "story": "The gap in shared understanding of LLM capability is widening"}, {"id": 784532420, "item_id": 49033276, "url": "https://news.ycombinator.com/item?id=49033276", "by": "austin-cheney", "date": "2026-07-24", "stance": "warn", "quote": "Apache and NGINX busted pissed me off when creating simple ultra fast proxies, especially around web sockets", "excerpt": "My hobby is self-hosting. * I have a dedicated server at the house where I run nearly a dozen services via docker compose. * I wrote my own audio app for playing my self hosted mp3s because everything I found on the App Store was shit. I wanted something like Winamp: a simple media player followed by a playlist of thousands of items that works equally on desktop and iPhone. https://github.com/prettydiff/mp3-master-li", "context": "self-hosting hobbyist", "use_case": "web proxies", "switched_from": "", "story": "Ask HN: Share Your Eccentric Hobby"}, {"id": 773539104, "item_id": 48346194, "url": "https://news.ycombinator.com/item?id=48346194", "by": "hideout_berlin", "date": "2026-05-31", "stance": "warn", "quote": "my linux apache crashed when some one posted it here", "excerpt": "i had that too once i used dyndns address my linux apache crashed when some one posted it here", "context": "", "use_case": "home web hosting", "switched_from": "", "story": "Dav2d"}]}], "who": [{"by": "al_borland", "context": "runs small internal tool for ~300 users", "url": "https://news.ycombinator.com/item?id=48446056", "date": "2026-06-08"}, {"by": "Bender", "context": "runs personal hobby nodes", "url": "https://news.ycombinator.com/item?id=47161329", "date": "2026-02-25"}, {"by": "heikkilevanto", "context": "retired", "url": "https://news.ycombinator.com/item?id=46268477", "date": "2025-12-14"}], "tags": [], "use_cases": ["web server", "webdav server", "web hosting", "web proxies", "internal php tool web server", "web server for php"], "compared": [{"slug": "nginx", "name": "nginx", "co": 15, "switched_from": 0, "switched_to": 2}, {"slug": "haproxy", "name": "HAProxy", "co": 2, "switched_from": 0, "switched_to": 1}, {"slug": "docker-compose", "name": "Docker Compose", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "sqlite", "name": "SQLite", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "ansible", "name": "Ansible", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=50047422", "title": "The gap in shared understanding of LLM capability is widening", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=48397765", "title": "Learn PHP in 2026 (Yes, Really)", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48076173", "title": "I Will Not Add Query Strings to Your URLs", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50286987", "title": "Chained PHP2Shell exploit roots 25 servers, including US Government servers", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=50224916", "title": "Show HN: Steal My Bitcoin", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=50041540", "title": "IRCv3", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 2, "warn": 1}, "2025-12": {"neutral": 4, "compare": 1}, "2026-01": {"recommend": 1, "neutral": 1, "warn": 1}, "2026-02": {"recommend": 1, "neutral": 1}, "2026-03": {}, "2026-04": {"recommend": 1, "neutral": 1, "warn": 1}, "2026-05": {"warn": 2, "neutral": 2, "compare": 1}, "2026-06": {"recommend": 1, "compare": 1, "neutral": 1}, "2026-07": {"warn": 1}, "2026-08": {"neutral": 1}, "2026-09": {"recommend": 1}, "2026-10": {"neutral": 3, "warn": 1, "recommend": 1}}, "quotes": [{"id": 804658497, "item_id": 50291156, "url": "https://news.ycombinator.com/item?id=50291156", "by": "bell-cot", "date": "2026-10-29", "stance": "neutral", "quote": "Then similar for your web server (Apache, nginx, whatever).", "excerpt": "I'd suggest reading https://github.com/php/php-src/blob/master/php.ini-production, then doing a web search for \"editing php.ini for maximum security\". Maybe compare with https://github.com/php/php-src/blob/master/php.ini-development, too. Then similar for your web server (Apache, nginx, whatever). EDIT: About your \"would've seemed adequate before this\" - I dug up a copy of a PHP v5.2 php.ini file (2-ish decades ago).", "context": "", "use_case": "", "switched_from": "", "story": "Chained PHP2Shell exploit roots 25 servers, including US Government servers"}, {"id": 803678801, "item_id": 50229925, "url": "https://news.ycombinator.com/item?id=50229925", "by": "LiveOverflow", "date": "2026-10-25", "stance": "neutral", "quote": "Official WordPress docs mentions Apache before nginx", "excerpt": "I don't know this. When I installed my WordPress blog with DigitalOcean template in 2023, it was Apache + mod_php. Official WordPress docs mentions Apache before nginx: https://developer.wordpress.org/advanced-administration/server/ Official php install instructions for Linux uses Apache + mod_php: https://www.php.net/manual/en/install.unix.debian.php", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Steal My Bitcoin"}, {"id": 801579744, "item_id": 50098734, "url": "https://news.ycombinator.com/item?id=50098734", "by": "Izkata", "date": "2026-10-15", "stance": "warn", "quote": "but also loses the original response body.", "excerpt": "It really shouldn't be, this error page should be familiar looking: https://i.sstatic.net/FRlUG.png It comes from ap_send_error_response(), near the bottom starting at https://github.com/apache/httpd/blob/b2dc966be4178ded1499d5d04cec7b6817d8b970/modules/http/http_protocol.c#L1358 Scrolling up from there a bit you can see some of the handling for ErrorDocument, which is configurable ( https://httpd.apache.org/docs/cur", "context": "", "use_case": "Web server", "switched_from": "", "story": "The gap in shared understanding of LLM capability is widening"}, {"id": 801137344, "item_id": 50071084, "url": "https://news.ycombinator.com/item?id=50071084", "by": "networked", "date": "2026-10-13", "stance": "recommend", "quote": "You can set up a server easily with Apache", "excerpt": "Absolutely. Windows, macOS, and major FLOSS desktop environments support it. Nemo (Cinnamon) and Dolphin (KDE) open WebDAV URLs as directories. Total Commander for Android has a WebDAV plugin. You can set up a server easily with Apache, including an FTP-style inbox. Here is my config: https://github.com/dbohdan/apache-2.4-webdav. I don't recommend nginx for WebDAV. My main HTTP server, Caddy, has gained WebDAV suppor", "context": "", "use_case": "WebDAV server", "switched_from": "", "story": "IRCv3"}, {"id": 801130336, "item_id": 50070646, "url": "https://news.ycombinator.com/item?id=50070646", "by": "Izkata", "date": "2026-10-13", "stance": "warn", "quote": "It was so weird and I couldn't find it in the documentation", "excerpt": "Sorry, httpd. It was so weird and I couldn't find it in the documentation (and a different server we used on dev didn't do it, which was how the bug made it live) that I pulled down the official source code and found where it was happening so I could explain it to my team. I'm pretty sure it was all 5xx but can't remember for certain. This was back in 2019, with a much older project, and I'm pretty sure that part of ", "context": "", "use_case": "web server", "switched_from": "", "story": "The gap in shared understanding of LLM capability is widening"}, {"id": 800826865, "item_id": 50051679, "url": "https://news.ycombinator.com/item?id=50051679", "by": "chrismorgan", "date": "2026-10-12", "stance": "neutral", "quote": "For Apache HTTP Server (what people mean by \u201cApache\u201d in such a context), what you describe is thoroughly unbelievable.", "excerpt": "Do you mean Apache APISIX, https://github.com/apache/apisix/issues/13501? That sounds like a simple bug which existed for a short time and has been fixed. For Apache HTTP Server (what people mean by \u201cApache\u201d in such a context), what you describe is thoroughly unbelievable.", "context": "", "use_case": "", "switched_from": "", "story": "The gap in shared understanding of LLM capability is widening"}, {"id": 795389712, "item_id": 49711857, "url": "https://news.ycombinator.com/item?id=49711857", "by": "Suzuran", "date": "2026-09-15", "stance": "recommend", "quote": "When Apache became available we switched to it out of spite.", "excerpt": "Netscape died because we all hated it. Back when Apache didn't exist yet, we were forced to run Netscape's server. (Even if Apache did exist, we didn't have the $20K per-seat license fee for DEC's C compiler so we wouldn't have been able to compile it anyway). Netscape's license terms were such that we had to open our books to them. They would read through all of our transactions and decide how much we would have to ", "context": "", "use_case": "web server", "switched_from": "Netscape", "story": "LG says we're fake news [video]"}, {"id": 790372689, "item_id": 49398293, "url": "https://news.ycombinator.com/item?id=49398293", "by": "SyneRyder", "date": "2026-08-22", "stance": "neutral", "quote": "My stuff is all just Apache, PHP & SQLite", "excerpt": "So, I clearly need to write a blog post about this one day - there are so many answers and they won't all fit in an HN reply. So I'll give some higher level concepts that I found helpful. Not to dodge your questions, but it gives a way to think about things. * Do Things That Don't Scale. There's a Paul Graham essay on this, but the general idea I took is that a naive, brute force solution will get you quite a long wa", "context": "", "use_case": "Web hosting", "switched_from": "", "story": "The Size of the World Wide Web"}, {"id": 784532420, "item_id": 49033276, "url": "https://news.ycombinator.com/item?id=49033276", "by": "austin-cheney", "date": "2026-07-24", "stance": "warn", "quote": "Apache and NGINX busted pissed me off when creating simple ultra fast proxies, especially around web sockets", "excerpt": "My hobby is self-hosting. * I have a dedicated server at the house where I run nearly a dozen services via docker compose. * I wrote my own audio app for playing my self hosted mp3s because everything I found on the App Store was shit. I wanted something like Winamp: a simple media player followed by a playlist of thousands of items that works equally on desktop and iPhone. https://github.com/prettydiff/mp3-master-li", "context": "self-hosting hobbyist", "use_case": "web proxies", "switched_from": "", "story": "Ask HN: Share Your Eccentric Hobby"}, {"id": 776538400, "item_id": 48533650, "url": "https://news.ycombinator.com/item?id=48533650", "by": "patchtopic", "date": "2026-06-14", "stance": "neutral", "quote": "before and after apache logs showing much less crap in them from bots", "excerpt": "before and after apache logs showing much less crap in them from bots. Do you think the maintainers of https://lore.kernel.org/ would leave something in that didn't work? It isn't perfect but I have run it on a (much smaller) web site getting hammered by bots and logged \"before\" and \"after\" and the difference is measurable.", "context": "", "use_case": "", "switched_from": "", "story": "Linux 7.1"}, {"id": 775768753, "item_id": 48485547, "url": "https://news.ycombinator.com/item?id=48485547", "by": "fantasizr", "date": "2026-06-10", "stance": "compare", "quote": "", "excerpt": "it looks like it was built using the satire vibecoding components listed here yesterday https://vorpus.github.io/performativeUI/", "context": "", "use_case": "", "switched_from": "", "story": "Apache Burr: Build reliable AI agents and applications"}, {"id": 775136896, "item_id": 48446056, "url": "https://news.ycombinator.com/item?id=48446056", "by": "al_borland", "date": "2026-06-08", "stance": "recommend", "quote": "The current setup has been running for 10 years now with minimal maintenance.", "excerpt": "That\u2019s not really an issue for me. I use this setup for small internal stuff. It might have 300 users at most, and they aren\u2019t making constant requests. I run it on a small VM and only run into issues when someone dumps in so much data that PHP runs out of memory, which isn\u2019t an Apache issue. And that memory issue doesn\u2019t take down the site or server, it\u2019s just the one request that dies. That used to happen maybe 5 t", "context": "runs small internal tool for ~300 users", "use_case": "internal PHP tool web server", "switched_from": "", "story": "Learn PHP in 2026 (Yes, Really)"}, {"id": 775094320, "item_id": 48443395, "url": "https://news.ycombinator.com/item?id=48443395", "by": "al_borland", "date": "2026-06-08", "stance": "recommend", "quote": "Apache was more than adequate for what I was doing, I had no issues with it in the past, and the setup was dead simple.", "excerpt": "I generally just use Apache. A classic LAMP setup, if a DB is needed for anything. If no DB is needed, I guess it\u2019s just LAP This is pretty quick and painless to setup. SLES had a single command for it back when I used it, if I remember correctly. I currently have a simple Ansible playbook for it on RHEL. It\u2019s certainly much more straightforward than deploying Flask to production, especially if just using the default", "context": "", "use_case": "web server for PHP", "switched_from": "", "story": "Learn PHP in 2026 (Yes, Really)"}, {"id": 773539104, "item_id": 48346194, "url": "https://news.ycombinator.com/item?id=48346194", "by": "hideout_berlin", "date": "2026-05-31", "stance": "warn", "quote": "my linux apache crashed when some one posted it here", "excerpt": "i had that too once i used dyndns address my linux apache crashed when some one posted it here", "context": "", "use_case": "home web hosting", "switched_from": "", "story": "Dav2d"}, {"id": 770740224, "item_id": 48171264, "url": "https://news.ycombinator.com/item?id=48171264", "by": "toast0", "date": "2026-05-17", "stance": "neutral", "quote": "Might want to read the section on Lingering Close", "excerpt": "Might want to read the section on Lingering Close from here: https://httpd.apache.org/docs/2.4/misc/perf-tuning.html", "context": "", "use_case": "", "switched_from": "", "story": "The occasional ECONNRESET"}, {"id": 770299200, "item_id": 48143700, "url": "https://news.ycombinator.com/item?id=48143700", "by": "nocman", "date": "2026-05-14", "stance": "compare", "quote": "Apache still runs about 23-28% of websites", "excerpt": "\"old days of PHP and Apache\" ... Apache still runs about 23-28% of websites (with some measurements suggesting it is pretty close to equal with nginx). PHP is still in use by 70-80% of websites (numbers vary depending on where you look). You make it sound like both pieces of tech are irrelevant. Nothing could be further from the truth. some quick googled examples (like I said other sites' numbers vary, but you get th", "context": "", "use_case": "", "switched_from": "", "story": "New Nginx Exploit"}, {"id": 769471617, "item_id": 48091976, "url": "https://news.ycombinator.com/item?id=48091976", "by": "mb2100", "date": "2026-05-11", "stance": "neutral", "quote": "That's because Apache is basically what today's JS crowd would call a", "excerpt": "That's because Apache is basically what today's JS crowd would call a \"file-based router\", and then the app implements the actual routing in that index.php file. Just like early SPA stored the route in a hash. It's funny how history repeats itself. I've gone back and forth on file-based vs programmatic routing. But each has pros and cons, so in the end I implemented both in Mastro: https://mastrojs.github.io/docs/rou", "context": "", "use_case": "", "switched_from": "", "story": "I Will Not Add Query Strings to Your URLs"}, {"id": 769324064, "item_id": 48082754, "url": "https://news.ycombinator.com/item?id=48082754", "by": "jorams", "date": "2026-05-10", "stance": "warn", "quote": "This is because of a deeply annoying default in Apache", "excerpt": "This is because of a deeply annoying default in Apache, where for \"security reasons\" the underlying script doesn't get to see auth details that might already be handled by Apache. At some point they added the CGIPassAuth directive[1] but all kinds of other workarounds are floating around on the internet. [1]: https://httpd.apache.org/docs/2.4/en/mod/core.html#cgipassauth", "context": "", "use_case": "", "switched_from": "", "story": "I Will Not Add Query Strings to Your URLs"}, {"id": 767234785, "item_id": 47952174, "url": "https://news.ycombinator.com/item?id=47952174", "by": "shevy-java", "date": "2026-04-29", "stance": "warn", "quote": "I abandoned it when they suddenly changed the configuration format.", "excerpt": "What I dislike about nginx is ... the documentation. I find it virtually useless because of that. Sadly httpd went the way of \"let's make the configuration difficult\"; I abandoned it when they suddenly changed the configuration format. I could have adjusted, but I switched to lighttpd (and also, past that point I let ruby autogenerate any configuration format, so technically I could return to httpd, but I don't want ", "context": "", "use_case": "", "switched_from": "", "story": "FastCGI: 30 Years Old and Still the Better Protocol for Reverse Proxies"}, {"id": 764218480, "item_id": 47763655, "url": "https://news.ycombinator.com/item?id=47763655", "by": "seethishat", "date": "2026-04-14", "stance": "neutral", "quote": "setting the -Indexes option in the apache config", "excerpt": "I saw something very similar a few months ago. It was a web app vibe coded by a surgeon. It worked, but they did not have an index .html file in the root web directory and they would routinely zip up all of the source code which contained all the database connection strings, API credentials, AWS credentials, etc.) and place the backup in the root web directory. They would also dump the database to that folder (for ba", "context": "", "use_case": "Web server", "switched_from": "", "story": "An AI Vibe Coding Horror Story"}, {"id": 761668936, "item_id": 47604308, "url": "https://news.ycombinator.com/item?id=47604308", "by": "KronisLV", "date": "2026-04-01", "stance": "recommend", "quote": "just an Apache install, the config for which I can automatically append new shortened links to", "excerpt": "Some changes within pre-existing codebases (oh hey, we need feature or mechanism X). An entirely new internal system with LLM code review, DB migration tracking, time tracking, standups and Teams integration. A new system that trains neural nets to recognize crops based on Sentinel-2 satellite data (the neural net works okay, mowing and ploughing is harder with a mostly heuristic approach since I don't really have la", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Baton \u2013 A desktop app for developing with AI agents"}, {"id": 754581264, "item_id": 47161329, "url": "https://news.ycombinator.com/item?id=47161329", "by": "Bender", "date": "2026-02-25", "stance": "neutral", "quote": "I've gone through this exercise on my own personal hobby nodes long ago.", "excerpt": "I've gone through this exercise on my own personal hobby nodes long ago. In my case I was just on an under-powered node for the load but I made sure my rewrite rules were optimized in the virtualserver config vs .htaccess and that I closed all rules with a final L to cease processing rules when matches were found. I also jacked up all the worker/server limits as high as I could go for the memory in the node this was ", "context": "runs personal hobby nodes", "use_case": "web server tuning", "switched_from": "", "story": "Ask HN: Apache prefork under crawler load \u2013 main domains OK, subdomains fail"}, {"id": 750939553, "item_id": 46933722, "url": "https://news.ycombinator.com/item?id=46933722", "by": "KronisLV", "date": "2026-02-08", "stance": "recommend", "quote": "just having an Apache2 config with some scripts to append to it", "excerpt": "I kinda like the idea, decreasing the friction of doing things yourself to near 0. I recently migrated from my YOURLS install to just having an Apache2 config with some scripts to append to it: https://blog.kronis.dev/blog/sometimes-dropbox-is-just-ftp-building-a-link-shortener Sometimes you don't need \"serious\" bullshit like Spring Boot either but something more minimalist is more than enough. Though I think it can ", "context": "", "use_case": "Link shortener web server", "switched_from": "YOURLS", "story": "Software Engineering Is Back"}, {"id": 747775280, "item_id": 46735955, "url": "https://news.ycombinator.com/item?id=46735955", "by": "aspbee555", "date": "2026-01-23", "stance": "warn", "quote": "I never trusted .htaccess as it is by default dangerous", "excerpt": "this was the main reason I switched to nginx a long time ago, I never trusted .htaccess as it is by default dangerous. Sure you can lock it down more, but the default being dangerous concerned me. To be honest dotfiles are just potentially dangerous if exposed too, so in my nginx I always do location /.well-known { allow all; } location ~ /\\.[^/].*(?<!\\.well-known) { return 404; } (The well-known being allowed is for", "context": "", "use_case": "", "switched_from": "", "story": "Three RCEs in Ilias Learning Management System"}, {"id": 747659954, "item_id": 46728747, "url": "https://news.ycombinator.com/item?id=46728747", "by": "chasil", "date": "2026-01-22", "stance": "neutral", "quote": "have it connect to port 80 on my Apache webservers", "excerpt": "If you want an encrypted tunnel maintained by inetd or systemd socket activation, then stunnel is easier to use in this context than ssh. Edit: I put stunnel on port 443 and have it connect to port 80 on my Apache webservers, because I like one way of doing TLS. This guide has been useful for many years in cipher selection: https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/", "context": "", "use_case": "", "switched_from": "", "story": "Stunnel"}, {"id": 744007184, "item_id": 46500449, "url": "https://news.ycombinator.com/item?id=46500449", "by": "tasuki", "date": "2026-01-05", "stance": "recommend", "quote": "It works fine out of the box, for all my myriads of websites.", "excerpt": "> Sentence display width is something I pay attention to. For example sometimes I don't want 1 hanging word to have its own full line (a \"hanger\") because it looks messy. Other times I do want it because it helps break up a few paragraphs of similar length to make it easier to skim. Isn't your website responsive? If it is, for how many different resolutions do you check this? I think I obsess about details, but thank", "context": "", "use_case": "Web caching (mod_cache_disk)", "switched_from": "", "story": "Jeffgeerling.com has been Migrated to Hugo"}, {"id": 742532112, "item_id": 46408257, "url": "https://news.ycombinator.com/item?id=46408257", "by": "breve", "date": "2025-12-27", "stance": "neutral", "quote": "Apache and Nginx are both written in C.", "excerpt": "> Writing a web server in C++ is a way to get excellent performance. So why don't most people do it? Because they already wrote it in C. Apache and Nginx are both written in C. Together they run 57.7% of all web servers: https://w3techs.com/technologies/overview/web_server", "context": "", "use_case": "", "switched_from": "", "story": "Replacing JavaScript with Just HTML"}, {"id": 741923888, "item_id": 46370243, "url": "https://news.ycombinator.com/item?id=46370243", "by": "jarofgreen", "date": "2025-12-23", "stance": "neutral", "quote": "I took a Django app that's behind an Apache server", "excerpt": "Some of it is different, but the basics are still the same and still relevant. Just today I've been working with some of this. I took a Django app that's behind an Apache server and added cache-control and vary headers using Django view decorators, and added Header directives to some static files that Apache was serving. This had 2 effects: * Meant I could add mod_cache to the Apache server and have common pages cach", "context": "", "use_case": "Web server", "switched_from": "", "story": "HTTP Caching, a Refresher"}, {"id": 740885280, "item_id": 46305330, "url": "https://news.ycombinator.com/item?id=46305330", "by": "rzzzt", "date": "2025-12-17", "stance": "neutral", "quote": "the earliest httpd I could get my hands on is 1.3.0", "excerpt": "I have also dug around a bit to find out this one, and the earliest httpd I could get my hands on is 1.3.0 which is hosted on the Apache archive site: https://archive.apache.org/dist/httpd/ \"src/modules/standard/mod_include.c\" says: /* * http_include.c: Handles the server-parsed HTML documents * * Original by Rob McCool; substantial fixups by David Robinson; * incorporated into the Apache module framework by rst. * *", "context": "", "use_case": "", "switched_from": "", "story": "30 years of <br> tags"}, {"id": 740668785, "item_id": 46291799, "url": "https://news.ycombinator.com/item?id=46291799", "by": "kbolino", "date": "2025-12-16", "stance": "compare", "quote": "nginx could handle 10x the requests of Apache httpd on the same hardware", "excerpt": "I would suggest gaining a better understanding of the M:N threading model versus the N:N threading model. I do not know that I can do it justice here. Both Java and Rust flirted with green threads in their early days. Java abandoned them because the hardware wasn't ready yet, and Rust abandoned them because they require a heavyweight runtime that wasn't appropriate for many applications Rust was targeting. And yet, b", "context": "", "use_case": "", "switched_from": "", "story": "Full Unicode Search at 50\u00d7 ICU Speed with AVX\u2011512"}, {"id": 740295633, "item_id": 46268477, "url": "https://news.ycombinator.com/item?id=46268477", "by": "heikkilevanto", "date": "2025-12-14", "stance": "neutral", "quote": "perl-based cgis under Apache, running on my home server/workstation", "excerpt": "Slowly degoogling my life. Switched to FastMail a while ago, it works. Have written a simple shopping and todo list web app, and a minimal photo gallery. All very simple, mostly for one user only: Myself. Using these as excuses to learn about coding with LLMs. As I have retired a few years ago, I can afford the time, and work with no stress or deadlines. Also slowly improving my beer tracker system. All this as perl-", "context": "retired", "use_case": "hosting CGI apps", "switched_from": "", "story": "Ask HN: What Are You Working On? (December 2025)"}, {"id": 736948240, "item_id": 46059265, "url": "https://news.ycombinator.com/item?id=46059265", "by": "aleph_minus_one", "date": "2025-11-26", "stance": "warn", "quote": "Apache was prone to this", "excerpt": "> Can someone with some more experience explain why this happens? The most basic webserver, like a TCP socket served from a C program, serving some files etc. can take tens of thousands of requests per second, per core, on reasonably recent hardware. At that time, it was quite common to start a new thread or even fork a new process per request/connection. Apache was prone to this: > https://www.digitalocean.com/commu", "context": "", "use_case": "", "switched_from": "", "story": "Slashdot effect"}, {"id": 735775825, "item_id": 45985989, "url": "https://news.ycombinator.com/item?id=45985989", "by": "toast0", "date": "2025-11-19", "stance": "neutral", "quote": "Apache lists some issues [1] with sendfile and defaults to off as well", "excerpt": "IMHO, it might be worthwhile for NGINX to default to sendfile+kTLS enabled where appropriate. Maybe the potential for negative experience is too high. I know sendfile originally had some sharp edges, but I'm not sure how sharp it still is? You would need to use sendfile only for plain http or https with kTLS, and maybe that's too complex? Apache lists some issues [1] with sendfile and defaults to off as well; but I d", "context": "", "use_case": "", "switched_from": "", "story": "Static Web Hosting on the Intel N150"}, {"id": 735020321, "item_id": 45938770, "url": "https://news.ycombinator.com/item?id=45938770", "by": "Bender", "date": "2025-11-15", "stance": "neutral", "quote": "I use both NGinx and Apache depending on what I am deploying", "excerpt": "As I understand, the popular consensus today is that nginx+php-fpm performs faster than apache even with the mpm_event process management enabled? This was certainly true long ago in Apache HTTPD 2.2. They completely rewrite APR and as of the 2.4 branch it was on par with Nginx. Some use Apache for a tighter integration with some modules such as PHP resulting is a slightly better security stance with PHP. Nginx makes", "context": "sysadmin", "use_case": "web server", "switched_from": "", "story": "Why is Apache still popular even as Nginx has proven its mettle on performance?"}]}