安装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

我已经解释了三种方法来说明这个问题。

    1. 按照上述的步骤进行处理

 

    1. 只需使用 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的认证代理”的讲座!

广告
将在 10 秒后关闭
bannerAds