News for hackers. Stuff that matters.
Re:The Architecture of Open Source Applications: Nginx by oblio on Monday November 23, 2015 @05:47PM (#10617915)
The real question is: why didn't they use something like Lua for the config file format?

Web servers can have notoriously complex configs, up to the point where designing a mini-language might a worse idea than stripping down an embeddable language, such as Lua.

Lua, especially when sandboxed, seems like a fitting configuration language: http://stackoverflow.com/questions/1224708/how-can-i-create-...

Re:The Architecture of Open Source Applications: Nginx by deathanatos on Monday November 23, 2015 @10:34PM (#10618995)
It's not just that Lua makes a good config file format, it's that serving HTTP requests is a complicated enough business with enough edge cases and corner cases that it merits a turning complete language.

I actually have some special corner case API endpoints that nginx just simply can not handle in the manner I would prefer. Further, the regex based location syntax, and even the prefix based ones, are not really what you want; you want a "Path" object that's aware of what / in a URL means, and does the right thing if you do/don't add it to the URL. (And it's not as easy as "/foo/bar/baz/?")

Re:The Architecture of Open Source Applications: Nginx by SomeCallMeTim on Tuesday November 24, 2015 @02:04PM (#10622780)
In Nginx, you can use Lua for complex routing and responses, with the right extensions. [1]

[1] http://openresty.org/

Re:The Architecture of Open Source Applications: Nginx by deathanatos on Tuesday November 24, 2015 @09:35PM (#10625047)
And we do. We don't use openresty (at least at the moment), we use a custom-built nginx that includes — among other things — the lua module. It's a great boon, but something things are still hard or impossible[1], and we don't use it for every request, opting for the location syntax, and all its flaws, for most.

[1]. Conditionally streaming an upload to a backend (i.e., if auth fails, don't stream) is impossible; nginx will buffer the entire request body, either in memory or on disk, and there is no way to change this behavior.