Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
ngx_mruby - A Fast and Memory-Efficient Web Server Extension Mechanism Using Scripting Language mruby for nginx
C Nginx Ruby Shell
Failed to load latest commit information.
dependence Update ngx_devel_kit
docker Update mruby
example Add compatible hello world code between ngx_mruby and mod_mruby
mrbgems/ngx_mruby_mrblib Surppot compatibility of r.body method with mod_mruby
mruby @ 4fdf492 Update mruby
mruby_test @ d2433a7 Update mruby and create another mruby repository for test
src Bump up version 1.12.14
test Fix bug; mruby_set ignore "cache" option
.clang-format Apply clang-format
.gitignore Update gitignore
.gitmodules Update test script
.travis.yml Update nginx version
AUTHORS add me to AUTHORS
Dockerfile be able to add not only nginx.conf but also other included config fil…
LEGAL Add LEGAL file
MITL Update License information
Makefile.in Update test script
README.md Update README.md
TODO Update README
build.sh Fix expr return value is 0
build_config.rb Add mruby-{cache,mutex}
config Add dummy upstream module and control keepalive via mruby
configure Remove enable_mrbgems option, default enabled
configure.in Remove enable_mrbgems option, default enabled
nginx_version Update nginx version
test.sh Allocate memory for mruby object instead of the ptr of mruby object
wercker.yml Support wercker ci

README.md

Welcome to ngx_mruby Pages

Gitter Build Status wercker status

ngx_mruby mod_mruby performance

hello world simple benchmark, see details of blog entry.

Documents

What's ngx_mruby

ngx_mruby is A Fast and Memory-Efficient Web Server Extension Mechanism Using Scripting Language mruby for nginx.

# location /proxy {
#   mruby_set $backend "/path/to/proxy.rb";
#   proxy_pass   http://$backend;
# }

backends = [
  "test1",
  "test2",
  "test3",
]

r = Redis.new "192.168.12.251", 6379
r.get backends[rand(backends.length)]
  • see examples
  • Sample of Unified Ruby Code between Apache(mod_mruby) and nginx(ngx_mruby) for Web server extensions
  • You can implement some Web server software extensions by same Ruby code (as possible)
# Unified Ruby Code between Apache(mod_mruby) and nginx(ngx_mruby)
# for Web server extensions.
#
# Apache httpd.conf by mod_mruby
#
# <Location /mruby>
#     mrubyHandlerMiddle "/path/to/unified_hello.rb"
# </Location>
#
# nginx ngxin.conf by ngx_mruby
#
# location /mruby {
#     mruby_content_handler "/path/to/unified_hello.rb";
# }
#

Server = get_server_class

Server::rputs "Hello #{Server::module_name}/#{Server::module_version} world!"
# mod_mruby => "Hello mod_mruby/0.9.3 world!"
# ngx_mruby => "Hello ngx_mruby/0.0.1 world!"

Abstract

As the increase of large-scale and complex Web services, not only a development of Web applications but also an implementation of Web server extensions is required in many cases. The Web server extensions were mainly implemented in C language because of fast and memory-efficient behavior, but extension methods using scripting language are proposed with consideration of maintainability and productivity. However, if the existing methods primarily intended to enhance not the implementation of Web applications but the implementation of internal processing of the Web server, the problem remains in terms of speed, memory-efficiency and safety. Therefore, we propose a fast and memory-efficient Web server extension mechanism using scripting language. We design the architecture that a server process creates the region to save the state of the interpreter at the server process startup, and multiple scripts share the region in order to process fast when the script is called as internal processing from a Web server process. The server process frees the global variables table, the exception flag and the byte-code which cause the increase of memory usage mainly, in order to reduce the memory usage and extend safety by preventing interference between each scripts because of sharing the region. We implement the mechanism that can extend the internal processing of nginx easily by Ruby scripts using nginx and the embeddable scripting language mruby. It's called "ngx_mruby".

License

under the MIT License:

Something went wrong with that request. Please try again.