レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

Ubuntu (Debian) で nginx に perl module (モジュール) を組み込んで使ってみる

2012年9月3日 2017年8月9日
nginx perl

今回は、Ubuntu Server(Debian) で nginx の perl module (モジュール) を使ってみたいと思います。

perl module (モジュール) を組み込むと
nginx.conf の中で perl を利用することができます。例えば、URLをperlを使って自在に変更してリダイレクトする・・なんてことも簡単に行うことができます。

perl module (モジュール) を組み込み方は、
以前に、Nginx にリバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込んで使ってみる(Debian/Ubuntu編) で紹介した nginx cache purge のやり方とほぼ同じで、若干異なる点があるので、ここで備忘録も含めて記事にしておきます。

ここでは、Ubuntu Server をメインに記述していますが、ここの内容はDebianでも同様です。
Ubuntu Server と Debian とで異なる点は、その都度記載しています。また、sudo は、Debianの場合、インストール(使用)されていない方は 無視してください。

nginx の最新版を手に入れるには ( リポジトリの設定 )

ここでの入手方法は、nginxの公式サイトからの入手になっています。
debianリポジトリの有名どころである Dotdeb からの入手方法は、Debian(Ubuntu 12) で Dotdeb から最新のnginx をインストール、php-fprm を使ってphpを動かしてみる を参照してください。

リポジトリの設定を終えたら、nginx のパッケージ(dpkg)を作成する ( perl モジュールを組み込む ) へ進んでください。

まずは、最新版のnginxを入手する方法を解説しておきます。
その後、perl モジュールを組み込んでみます。
最新版のnginxを入手するには、もちろんnginxのサイトをリポジトリに登録することで安定版(stable)の最新版を入手することができます。以降に、その方法を簡単に解説しておきます。

  1. nginxのサイトから、パッケージの公開鍵をダウンロードし、apt-keyで追加する

    Debian / Ubuntu では、ダウンロードするパッケージが安全か否かを判断するための公開キーを追加する必要があります。

    $ wget "http://nginx.org/keys/nginx_signing.key"return
    $ sudo apt-key add nginx_signing.keyreturn
    [sudo] password for hoge: return
    OK
    

  2. nginxのサイトをパッケージダウンロード先として登録する

    いわゆるリポジトリの登録です。/etc/apt/sources.list の末尾に以下を追記します。

    Ubuntu 10

    ...
    # nginx
    deb http://nginx.org/packages/ubuntu/ lucid nginx
    deb-src http://nginx.org/packages/ubuntu/ lucid nginx
    

    Debian 6

    ...
    # nginx
    deb http://nginx.org/packages/debian/ squeeze nginx
    deb-src http://nginx.org/packages/debian/ squeeze nginx
    

  3. apt-get でキャッシュならびシステムの更新を行う

    ダウンロード先の登録などを行った場合は、キャッシュ情報など更新のために apt-get でアップデートを行います。

    $ sudo apt-get updatereturn
    [sudo] password for hoge: return
    ...
    Reading package lists... Done
    
    ここまでできたら、最新版のnginxをインストールすることができます。バイナリをそのままインストールしたい場合、
    $ sudo apt-get install nginxreturn
    [sudo] password for hoge: return
    ...
    
    これですぐに最新版をインストールすることができます。

    ここでは、モジュールを追加したいので、自前でパッケージを作成します。 そのために、次に最新のソースコード一式をダウンロードします。

    nginx cache purgeモジュールの組み込んだ時と異なるのは、perlモジュールが、nginxの一部機能として、ソースコードに組み込まれている点です。 dpkg の作成オプションの設定のみで対応できる点に注意しておく必要があります。(他のソースコードは不要)

nginx のパッケージ(dpkg)を作成する ( perl モジュールを組み込む )

先にも説明したように、perl モジュールをnginxに組み込むには、パッケージ の再構築が必要になります。
以前の「Nginx にリバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込んで使ってみる(Debian/Ubuntu編)」で、nginxの構築を行いました。
基本的なやり方は、同じです。 一応、順を追って、先の「Nginx にリバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込んで使ってみる(Debian/Ubuntu編)」になぞって解説してみます。

  1. パッケージを作成するために必要な環境をインストールする

    パッケージを作成する上で、最低限必要なパッケージ(dpkg-dev , dh-make)をインストールします。

    $ sudo apt-get install dpkg-devreturn
    [sudo] password for hoge: return
    ...
    
    $ sudo apt-get install dh-makereturn
    [sudo] password for hoge: return
    ...
    

  2. nginxの最新版のソースコード一式をダウンロードする

    nginxの最新版のソースコード(パッケージ作成環境)一式をダウンロードします。

    $ sudo apt-get source nginxreturn
    [sudo] password for hoge: return
    ...
    $ sudo chmod -R hoge. *return
    [sudo] password for hoge: return
    
    Ubuntuの場合、ソースコードの展開先は、カレントディレクトリになります。 後々、面倒なので、Ubuntu なら、自分のホームディレクトリに適当なディレクトリを作成して、そこで上記の apt-get を実行すると良いでしょう。
    また、Debiansudo を利用していない場合などは、/usr/local/src がわかり易いでしょうね。
    $ mkdir ~/nginx-pkgreturn
    $ cd ~/nginx-pkgreturn
    [~/nginx-pkg]$ sudo apt-get source nginxreturn
    ...
    

    また、最後にファイル、ディレクトリ一式の所有者を切り替えています。
    (su で rootになっている場合は問題ありませんが、) 元はrootになっていて、ビルド実行時にエラーとなることがあります。

    以降の説明では、/home/hoge/src/nginx-pkg/ へ展開したものとして解説します。

  3. nginxのビルドに必要なライブラリをインストールする

    nginxをビルドする際に必要になるライブラリ( libpcre3-dev , libssl-dev , zlib1g-dev )をインストールします。

    $ sudo apt-get install libpcre3-dev libssl-dev zlib1g-dev libperl-devreturn
    [sudo] password for hoge: return
    ...
    
    nginx 1.0.3 ( 最新版 1.2.3 でも同様 ) では、少なくとも libpcre3-dev , libssl-dev , zlib1g-dev libperl-dev(perlモジュールに必要) が必要でした。
    必要なパッケージは、以下のように nginxの最新版のソースコードの controlファイルに記載されているので、確認すると良いでしょう。
    [~/nginx-pkg]$ cd nginx-1.0.13/return
    [~/nginx-pkg/nginx-1.0.13]$ cat debian/control | grep Build-Depends:return
    Build-Depends: debhelper (>= 7.0.50~), libssl-dev (>= 0.9.7), libpcre3-dev, zlib1g-dev
    
    nginx-1.2.0 の場合は、ディレクトリ名が異なるのみです。
    : nginx-1.0.13 → nginx-1.2.3 となります。

    以降、nginx-1.0.13として解説しますが、手順は、nginx-1.2.3でも同じです。

  4. perl モジュールを組み込む

    perl モジュールを組み込むには、Buildオプションを設定します。そのオプションを有効にするために少なくとも2つのファイル( rules , nginx.dirs )の編集が必要になります。
    以降に各ファイルの編集内容を解説してみます。(この文字色部分が、編集された箇所になります。)

    • rulesファイルの編集

      まずは、ビルドオプションとインストール先を指定するために、./nginx-1.0.13/debian/rules ファイルを編集します。

      ...
      override_dh_auto_build:
              dh_auto_build
              mv objs/nginx objs/nginx.debug
              ./configure \
                      --prefix=/etc/nginx/ \
                      --sbin-path=/usr/sbin/nginx \
                       ...
                      --with-http_stub_status_module \
                      --with-http_perl_module \
                      --with-mail \
                       ...
      configure_debug:
              ./configure \
                      --prefix=/etc/nginx/ \
                      --sbin-path=/usr/sbin/nginx \
                       ...
                      --with-http_stub_status_module \
                      --with-http_perl_module \
                      --with-mail \
                       ...
      
      ...
      override_dh_auto_install:
              dh_auto_install
              ...
              /usr/bin/install -m 755 objs/nginx  debian/nginx/usr/sbin/
              /usr/bin/install -m 644 objs/src/http/modules/perl/blib/lib/nginx.pm  debian/nginx/usr/lib/perl/5.10.1/
              /usr/bin/install -m 644 objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.so  debian/nginx/usr/lib/perl/5.10.1/auto/nginx/
              /usr/bin/install -m 644 objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.bs  debian/nginx/usr/lib/perl/5.10.1/auto/nginx/
      ...
      

      前半の –with-http_perl_module \ は、perlモジュールのコンパイルオプションになります。
      後半の /usr/bin/install -m 644 objs/src/http/modules/perl/blib/… は、perlモジュールの必要なファイルのインストールを支持しています。

      あくまで、ここでの debian/nginx/usr/lib/perl/… で指定しているディレクトリは、論理ディレクトリですが、 実際のインストール先ディレクトリとして debian/nginx を省略したパスが用いられることに注意する必要があります。
      また、debian/nginx/usr/lib/perl/5.10.1 の数値は、perlのバージョンにしています。

    • nginx.dirsファイルの編集

      次いで、perl モジュールのインストール先ディレクトリを作成するように設定します。
      ./nginx-1.0.13/debian/nginx.dirs ファイルにて設定します。

      ...
      /usr/sbin
      /etc/nginx/conf.d
      /usr/share/nginx
      /usr/share/nginx/html
      /var/cache/nginx
      /var/log/nginx
      /usr/lib/perl
      /usr/lib/perl/5.10.1
      /usr/lib/perl/5.10.1/auto
      /usr/lib/perl/5.10.1/auto/nginx
      

      ここで設定している /usr/lib/perl … は、先の rules で指し示したインストール先のリアルなディレクトリになります。

      ここで指定している/usr/lib/perl … は、本来、/usr/local/lib/perl … あるいは、 /usr/local/share/perl … にすべきかもしれません。
      各環境によってインストール先は、変更されることをおすすめします。

      一応、参考までに、perlモジュールのMakeFileには、以下のようなディレクトリ設定があります。
      [~/nginx-pkg/nginx-1.0.13]$ cat objs/src/http/modules/perl/Makefilereturn
      ...
      RANLIB = :
      SITELIBEXP = /usr/local/share/perl/5.10.1
      SITEARCHEXP = /usr/local/lib/perl/5.10.1
      SO = so
      VENDORARCHEXP = /usr/lib/perl5
      VENDORLIBEXP = /usr/share/perl5
      ...
      

  5. nginx をビルドし、パッケージを作成する

    nginx をビルドし、パッケージを作成します。
    Ubuntu では、パッケージ作成を行う場合、dpkg-buildpackageを使います。

    [~/nginx-pkg/nginx-1.0.13]$ dpkg-buildpackage -uc -b -dreturn
    ...
    
    [ dpkg-buildpackage のパラメータの意味 ]
    -uc    .changesファイルへ書き込みません。
    -b    バイナリパッケージのみ作成します。
          ソースコードを含みません。
    -d    ビルドの依存関係とコンフリクトをチェックしません。

    バイナリパッケージは、一つ下位ディレクトリに作成されます。

    [~/nginx-pkg/nginx-1.0.13]$ ls ../return
    nginx-1.0.13                   nginx_1.0.13-1_i386.changes
    nginx-debug_1.0.13-1_i386.deb  nginx_1.0.13-1_i386.deb
    nginx_1.0.13-1.debian.tar.gz   nginx_1.0.13.orig.tar.gz
    nginx_1.0.13-1.dsc             
    

    ここでは、32bit OS を利用した例なので、
    Ubuntu : nginx_1.0.13-1_i386.deb
    Debian : nginx_1.0.13-1~squeeze_i386.deb
    というパッケージファイルが作成されました。

    さらに 1.2.3 なら、
    nginx_1.2.3-1~squeeze_i386.deb のような名前になります。

    参考までに 64bit OS の場合は、
    nginx_…_i386.deb → nginx_…_amd64.deb となります。

  6. 最新のnginx をインストールして、動かしてみる

    ここまでで作成したnginxの最新パッケージをインストールして、動かしてみます。

    Ubuntu 10

    [~/nginx-pkg/nginx-1.0.13]$ sudo dpkg -i ../nginx_1.0.13-1_i386.debreturn
    [sudo] password for hoge: return
    ...
    

    Debian 6

    [~/nginx-pkg/nginx-1.0.13]$ dpkg -i ../nginx_1.0.13-1~squeeze_i386.debreturn
    ...
    

    続けて、サービスを起動してみます。
    ( インストールした時点で起動していると思います。もし、起動していないなら、手動で起動してみましょう。 )

    $ sudo /etc/init.d/nginx startreturn
    [sudo] password for hoge: return
    $ ps aux|grep nginxreturn
    root     23545  0.0  0.0   4960   752 ?        Ss   13:45   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    nginx    23546  0.0  0.1   5116  1124 ?        S    13:45   0:00 nginx: worker process
    hoge     23581  0.0  0.0   1860   580 pts/0    R+   13:46   0:00 grep --color=auto nginx
    

    ちゃんと動作しているようなので、ブラウザから確認してみましょう。
    以下のような初期ページが表示されればOKです。

    nginxの初期画面

    ちゃんと perl モジュール組み込まれたかどうか確認するには、以下のようにコマンドで確認できます。
    $ nginx -Vreturn
    nginx version: nginx/1.0.13
    TLS SNI support enabled
    configure \
    arguments: \
        --prefix=/etc/nginx/ \
        --sbin-path=/usr/sbin/nginx \
        --conf-path=/etc/nginx/nginx.conf \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --pid-path=/var/run/nginx.pid \
        --lock-path=/var/run/nginx.lock \
        --http-client-body-temp-path=/var/cache/nginx/client_temp \
        --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
        --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
        --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
        --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
        --user=nginx \
        --group=nginx \
        --with-http_ssl_module \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --with-http_gzip_static_module \
        --with-http_random_index_module \
        --with-http_secure_link_module \
        --with-http_stub_status_module \
        --with-http_perl_module \
        --with-mail \
        --with-mail_ssl_module \
        --with-file-aio \
        --with-ipv6 
    
    configure があまりに長いので 適当な箇所で\ 記号で改行しています。
    ちゃんと最後に –with-http_perl_module と出力されていますね。

nginx の perl モジュールを動かしてみる

最後に nginx の perl モジュールを動かしてみたいと思います。

先にも書いたように perl モジュールは、nginxの設定ファイルである nginx.conf の中で記述し、動作させることができます。
ここでは、perl モジュールで、よく例で上がっているURLの小文字化を試してみます。

/etc/nginx/nginx.conf にperl モジュールを使うように編集してみます。

...

# Include the perl module
perl_modules perl/lib;

# Define this function
perl_set $uri_lowercase 'sub {
        my $r = shift;
        my $uri = $r->uri;
        $uri = lc($uri);
        return $uri;
}';
server {
	listen 80;
	server_name  www.example.com;
	root         /var/www/html;
	access_log   /var/log/httpd/example-access.log main;
	error_log    /var/log/httpd/example-error.log warn;
	
	location / {
		if ( $uri != $uri_lowercase ) {
			rewrite . http://$host$uri_lowercase;
		}
	}
}
...

上記の例は、ディレクトリ名に大文字が使用されていた場合、全て小文字として扱うようにしたものです。

あくまで、ここでは、perlモジュールの確認にしぼって解説していますので、細かい nginx.conf の設定内容は省略しています。ご注意ください。

編集を終えたら、nginxを再起動します。

$ /etc/init.d/nginx restartreturn
...

ウェブブラウザから、大文字、小文字いずれのディレクトリ指定でも同じようにアクセスできることを確認してみましょう。

例)
大文字指定 : → http://www.example.com/SAMPLE/INDEX.HTML
小文字指定 : → http://www.example.com/sample/index.html

また、perl モジュールを無効にしたときは、大文字小文字それぞれでアクセスした場合、少なくともいずれか一方は 404 が表示されるはずです。

nginxの404

いかがでしたか?

デフォルトでperlモジュールは組み込まれていないので、自前で組み込む必要があります。
perlモジュールを組み込むと、nginxの動作バリエーションが増えるのは間違いないです。非常に便利です。

ただ、perlを毎回動作させるのは、できる限り少ないに越したことはないですね。折角、軽いnginxを使用しているのですから。


関連記事 :


コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

Genymotionとは、 公式サイト(http://www.genymotion.com/)には、以下のように記述があります。 G ...

以下のように Android x86 を仮想マシンへインストールし、色々と試してきました。 仮想マシンを使って Android ...

Android x86とは、 いわゆる Android のPC版OSです。 Android は、Googleによって開発されたスマー ...

Android x86とは、 いわゆる Android のPC版OSです。 Android は、Googleによって開発されたスマー ...

今回は、Mondo Rescue を使って バックアップとリストア(復元)をやってみたいと思います。 いまだに、さくらのVPSは、バッ ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ
Time : 0.2206 [s]