

Scripting Nginx with Lua (2012) - chx
http://www.londonlua.org/scripting_nginx_with_lua/slides.html

======
terhechte
I tend to always use OpenResty for a certain set of tasks these days. Notably,
when it is mostly about lightweight data processing. I.e. an API that reads
from a DB, transforms some fields and returns json, or a simple proxy server
that slightly modifies the data (or just returns it). Or, performing simple
calculations based on a few inputs.

All this usually just requires a few lines of code and due to the nature of
OpenResty, it scales really well and is very lightweight in terms of CPU
consumption and memory.

I haven't really used it for anything bigger yet, mostly because then I'd
rather prefer Django or Clojure (depending on the tasks) as they have much
more functionality / packages for web development.

Particularly the nonblocking IO for db/file/networking operations (out of the
box) is neat. Another interesting aspect is that, once you've set up the
system, development feels a lot like PHP development, where every lua file can
be one page and changing the file results in a direct change on the frontend
(if you turn the lua code cache off).

On the other hand, there're some pitfalls, the project is young, it still
lacks packages for many, many things (notably, if you want to do crypto, you
have to FFI right into the C library, for now. There's a new sha/hmac module,
but it's not part of the current OpenResty distribution yet). Also, sometimes
it is difficult to find solutions to problems, as it is not widely used as
Django or Rails. If you're interested in using it, take some time to read up
on LuaJIT as there're several important optimization techniques to really get
the best out of it (see below).

All in all, for smaller projects, I love the stack as it is simple,
lightweight, and easy to install.

Here're some useful links:

Lua(Jit) Profiler:
[https://github.com/jgrahamc/lulip/](https://github.com/jgrahamc/lulip/)

IDE With Debugger for OpenResty (Pretty cool, you can debug while your browser
requests): [http://notebook.kulchenko.com/zerobrane/debugging-
openresty-...](http://notebook.kulchenko.com/zerobrane/debugging-openresty-
nginx-lua-scripts-with-zerobrane-studio)

LuaJIT Performance Guide: [http://wiki.luajit.org/Numerical-Computing-
Performance-Guide](http://wiki.luajit.org/Numerical-Computing-Performance-
Guide)

Lua Performance Guide:
[http://www.lua.org/gems/sample.pdf](http://www.lua.org/gems/sample.pdf)

~~~
girvo
The whole debug while requesting a page sounds great, that's a feature I adore
from Xdebug.

------
jgrahamc
If you are interested in working on or with OpenResty then CloudFlare is
hiring people in London and San Francisco. We employ agentzh and he works on
OpenResty at CloudFlare. We use it _extensively_ throughout the CloudFlare
stack.

And also we really, really need more people with experience of OpenResty,
NGINX, Lua and LuaJIT.

[https://www.cloudflare.com/join-our-team](https://www.cloudflare.com/join-
our-team)

~~~
GrinningFool
One of the concerns I have about openresty is that so much of it relies on
agentzh. He does amazing work at an insane rate - a rate that I'm a bit
concerned (as someone who uses openresty & luajit extensively) can't be
sustained in the long term, and is in serious jeopardy if he gets a better
offer.

~~~
meowface
Yeah, the pace at which he pumps out code is absolutely incredible.

However, I imagine he wouldn't want to work for another company unless they
also allowed him to spend a lot of time on the project.

------
zeitg3ist
If you'd like to go a bit higher level without sacrificing performance, I
suggest Lapis, a Lua/Moonscript framework built on top of OpenResty:
[http://leafo.net/lapis/](http://leafo.net/lapis/)

(not the author, just a fan!)

~~~
jeangenie
Thanks for sharing. Lapis looks really cool. For anyone curious about
performance see ChikkaChiChi's comment[1].

[1]
[https://news.ycombinator.com/item?id=8021069](https://news.ycombinator.com/item?id=8021069)

~~~
zeitg3ist
Looking at this table, I should've said "without sacrificing _too much_
performance". Impressive results, though!

------
sciurus
At Lonely Planet we've had a good experience using OpenResty directly behind
our CDN. We use it to perform rewrites, route requests to the appropriate
applications, manage splits for a/b testing, block malicious traffic, gather
metrics, and more!

We touch on our use of it a little bit towards the end of
[http://velocityconf.com/velocityeu2012/public/schedule/detai...](http://velocityconf.com/velocityeu2012/public/schedule/detail/26634).
The last slide is still true- we're hiring! Ruby (remote possible),
javascript, devops, and more. See
[http://www.lonelyplanet.com/jobs/](http://www.lonelyplanet.com/jobs/)

------
fasteo
I already posted this some time ago, but let me insist on this one:

Openresty (nginx+lua) is probably one of the most underrated technologies we
have available nowadays. In my experience, every webapp can offload a ton of
work(1) to openresty. The lua code is usually simpler and a lot faster that
the equivalent code in the app.

(1) think caching, auth/acl, security filters, stats, logging

------
domrdy
We've recently switched from a file based URL rewrite system to
nginx/lua/redis. Before we'd literally include() the rewrites into our
configuration files which made -s reload a pain. All in all the implementation
was relatively painless, decreased our server reponse time quite a bit and
scales way better than our previous naive approach.

------
rahimnathwani
If, like me, you didn't understand the difference between tengine and
OpenResty, see here:

[https://github.com/openresty/ngx_openresty/issues/54](https://github.com/openresty/ngx_openresty/issues/54)

------
anonfunction
We've just done this at our API focused startup and been really impressed with
the performance. OpenResty makes interfacing the server with your business
logic and external services a breeze. Nginx and Lua/LuaJIT have been battle
tested for years and they are extremely fast and reliable.

Open Source on GitHub: [https://github.com/Mashape/mashape-
agent](https://github.com/Mashape/mashape-agent)

------
justincormack
The video for the talk is here
[https://skillsmatter.com/skillscasts/3362-scripting-nginx-
wi...](https://skillsmatter.com/skillscasts/3362-scripting-nginx-with-lua)

------
ChikkaChiChi
OpenResty caught my attention in the most recent TechEmpower Benchmarks. It
definitely deserves your attention if you need something that can handle
concurrent requests at a large scale:

[http://www.techempower.com/benchmarks/#section=data-r9](http://www.techempower.com/benchmarks/#section=data-r9)

------
brianmtully
A great project built on top of openresty:
[http://coronium.io/](http://coronium.io/)

------
maheart
Off topic, but does anyone know what software was used to make/generate the
slides webpage?

~~~
justincormack
It is Shower [http://shwr.me/](http://shwr.me/)

~~~
netghost
Shower is really great. It also defines sensible print styles which work well
for "print to pdf".

~~~
justincormack
Yes, I discovered that when I needed to produce a pdf for a talk that was
potentially offline, worked really well.

