安装ngx_mruby于nginx
这篇文章是 mod_mruby ngx_mruby Advent Calendar 2014 第11天的文章。
我是@takeswim。我在福冈的游戏公司从事与网络相关的各种开发工作。
@matsumotoryさん已经提出了关于在nginx上安装ngx_mruby的帖子请求,同时我也正好在进行nginx+ngx_mruby的安装工作,我将这一系列的操作总结了一下。
我想要解释一下有关将ngx_mruby集成到nginx1.7.8(当前最新版)的步骤。
环境是从Google Cloud Platform中创建的。
-
- OSはCentOS6.6
-
- http接続許可
- それ以外はデフォルト
我已经准备好了。
我一开始就写一个结束的结论,通过使用build.sh进行安装非常简单方便,强烈推荐。这种方法我会在帖子的最后解释。
另外,将模块集成到nginx中,更确切地说应该是”创建带有ngx_mruby的nginx”,而不是”将ngx_mruby集成到nginx中”,请原谅标题和实际操作有所偏差。
准备编辑
如何在nginx中集成模块?
如果要添加模块到nginx,需要重新make nginx。
使用nginx的configure命令的–add-module选项,可以进行以下的附加配置。
$ ./configure --add-module=[モジュールの存在するpath]
如何将ngx_mruby嵌入到nginx中?
因此,要将ngx_mruby集成到nginx中,
- nginx側configureの–add-moduleでngx_mrubyの設定を加えnginxをmakeする
嵌入ngx_mruby的方法还有其他选择。
-
- ngx_mruby側のmakeでngx_mrubyつきnginxを作る
- ngx_mruby側のbuild.shでngx_mrubyつきnginxを作る
有一种方法,这次我们打算分别试一试。
准备开发环境
由于开始的环境非常干净,所以首先安装git和gcc…
$ sudo yum install git gcc -y
编译安装nginx
不好意思地对Nginx主服务器说一声抱歉,虽然无需再次解释,但为了以防万一…
code:sh
$ cd ~
$ wget http://nginx.org/download/nginx-1.7.8.tar.gz
$ tar zxvf ./nginx-1.7.8.tar.gz
$ cd nginx-1.7.8
$ ./configure --prefix=/usr/local/nginx/
$ make
$ sudo make install
在使用过程中需要使用PCRE和zlib,在途中通过yum进行了适当的安装。
$ sudo yum install pcre-devel zlib-devel -y
完成安装后,我们先启动并确认一下。
$ sudo /usr/local/nginx/sbin/nginx
在浏览器等客户端输入http://localhost/,确认是否显示出安装Nginx后的默认页面。
ngx_mruby内置编辑
编译ngx_mruby
准备ngx_mruby。
$ cd ~
$ git clone git://github.com/matsumoto-r/ngx_mruby.git
$ cd ngx_mruby/
$ git submodule init
$ git submodule update
由于ngx_mruby与mruby相关联作为子模块,因此需要进行子模块的相应处理。在此之后进行configure和make操作。
$ ./configure --with-ngx-src-root=/home/takeswim/nginx-1.7.8
使用–with-ngx-src-root选项设置nginx源代码路径。如果没有设置,将会出现错误。
$ make build_mruby
$ make generate_gems_config
ngx_mruby的编译过程需要使用rake。
由于旧版本的rake(至少可以通过yum安装的ruby1.8.7)会导致编译失败,因此最终我选择了手动源代码安装最新版本的ruby。
$ cd ~
$ wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz
$ tar zxvf ruby-2.1.5.tar.gz
$ cd ruby-2.1.5
$ ./configure & make & sudo make install
在进行make过程中,我进行了以下安装。
-
- bison
-
- mrubyのビルドツールに必要。
-
- $ sudo yum install bison -y
-
- openssl
-
- mruby-digestに必要。
-
- $ sudo yum install openssl-devel -y
-
- redis
-
- hiredis
- mruby-redisに必要。今回の環境ではredis・hiredisともソースインストールしました。
$ cd ~
$ wget http://download.redis.io/releases/redis-2.8.18.tar.gz
$ tar zxvf redis-2.8.18.tar.gz
$ cd redis-2.8.18
$ make & sudo make install
$ cd ~
$ git clone https://github.com/redis/hiredis.git
$ cd hiredis
$ make & sudo make install
顺便提一下,在这个环境中,无法识别hiredis的共享库。请通过在/etc/ld.so.conf.d/hiredis.conf中添加库路径(/usr/local/lib/) 并执行$ sudo ldconfig命令来解决。
按照这样的感觉逐步安装库文件,直到ngx_mruby的make完成。
用 add-module 命令将 ngx_mruby 的配置添加到 nginx,并进行 make 编译。
在ngx_mruby准备就绪后,将ngx_mruby集成到nginx中。
如果您已经按照之前的步骤完成了nginx的编译,并且正在运行nginx,那么我认为您已经在手头拥有了nginx的源代码。
切换到nginx源代码路径,并使用configure的–add-module选项将ngx_mruby集成设置添加进去。
当然,还可以进行其他的nginx选项配置。
$ cd ~/nginx-1.7.8
$ make clean
$ ./configure --add-module=/home/takeswim/ngx_mruby --add-module=/home/takeswim/ngx_mruby/dependence/ngx_devel_kit --prefix=/usr/local/nginx/
$ make
用这个,ngx_mruby被集成到nginx中了。
通过运行$ sudo make install来进行安装。
为了确保ngx_mruby正常运行,将配置信息添加到nginx.conf中进行测试。
在server指令中添加以下内容以配置location /hello。
:
:
location / {
root html;
index index.html index.htm;
}
location /hello {
mruby_content_handler_code '
Server = Nginx
Server.echo "WORLD"
';
}
:
:
手动启动后,在浏览器中访问http://localhost/hello。返回了”WORLD”。太好了!
使用ngx_mruby的make命令来编译带有ngx_mruby的nginx。
之前在nginx上进行了make操作,但也可以完全依赖ngx_mruby自身来完成。
如果没有现有的nginx,这种方法很方便。
在使用git clone获取ngx_mruby之后,执行submodule update的步骤与之前相同。
在配置时,使用–with-ngx-config-opt选项设置nginx的configure选项,然后进行make操作。
$ ./configure --with-ngx-src-root=/home/takeswim/nginx-1.7.8 --with-ngx-config-opt="--prefix=/usr/local/nginx/"
$ make
通过此方法,在ngx_mruby的make中执行nginx的make操作,最终完成一个已经嵌入ngx_mruby的nginx版本。
使用”$ sudo make install”命令安装nginx。
使用ngx_mruby的build.sh脚本来构建搭载ngx_mruby的nginx。
去年的12月好像已经过去一年了…除了之前提到的对mruby的子模块进行更新外,如果没有nginx的源代码,也可以进行下载。
刚刚提到如果没有nginx时很方便…但是这种方法更加简单。
在使用git clone命令成功获取ngx_mruby之后,
运行命令$ NGINX_CONFIG_OPT_ENV=’–prefix=/usr/local/nginx’ NGINX_SRC_ENV=’/home/takeswim/nginx-1.7.8′ sh build.sh。
使用环境变量NGINX_CONFIG_OPT_ENV将参数传递给nginx,使用NGINX_SRC_ENV来设置nginx的源代码路径。这样就可以完成包含了ngx_mruby的nginx。使用sudo make install命令来安装nginx。
总结
将ngx_mruby集成到nginx的大体流程是…
-
- ngx_mrubyをgit cloneで取得後submodule取得し環境を整えつつmake
- nginxでconfigure –add_module=[ngx_mrubyパス]のちmake
我已经解释了三种方法来说明这个问题。
-
- 按照上述的步骤进行处理
-
- 只需使用 ngx_mruby 的 make 来创建
- 使用 build.sh 进行创建
依照個人的經驗,在安裝Nginx時通常會一併使用ngx_mruby插件,常使用的是版本2。但如果出於同樣的原因,版本3也是可行的選擇。另外,如果需要持續使用現有的Nginx,版本1也可被選擇作為解決方案。根據具體情況靈活選擇!
(番外篇)我根本不记得之前创建的nginx配置选项了!
如果重新编译现有的nginx,那么旧的nginx配置选项也将不会保留……但通常我们也记不住吧。
对于这种情况,有一个nginx -V选项(V为大写)。
$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.7.8
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
configure arguments: --add-module=/home/takeswim/ngx_mruby/ --add-module=/home/takeswim/ngx_mruby/dependence/ngx_devel_kit
当您使用configure参数来进行指定的nginx编译时,configure选项将起到作用。您可以将此部分内容复制粘贴,并加以利用!
明天是ainoya先生的“使用mod_mruby创建基于JWT的认证代理”的讲座!