Hatena::ブログ(Diary)

四角革命前夜

2013年12月24日(火)

マスタリングnginx

を読みました。


普段、よく使っている訳ではないのでさっぱりわからず……

でもまあ、設定に関しては詳しく書いてあるので、使うようになったらとても重宝するのではないかなーと思います。

正直、nginxを使う必要にかられている訳ではないので(たまにローカルプロキシとして使ってるくらい)今は特によいかなと……

httpdが欲しくなったらnode.jsで書くか、mongoose httpdとか使うような気がします。

2013年11月03日(日)

nginxをインストールする

最近何かと使う、nginxをインストールするメモです。

環境:OS X 10.9

$ curl -O http://nginx.org/download/nginx-1.4.3.tar.gz
$ curl -L -O "http://downloads.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2Fpcre%2F8.33%2F&ts=1383407826&use_mirror=jaist"
$ tar xvf nginx-1.4.3.tar.gz
$ tar xvf pcre-8.33.tar.bz2
$ cd nginx-1.4.3
$ ./configure --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --prefix=$HOME/Binary/nginx --with-pcre=../pcre-8.33
$ make
$ make install

--with-pcreってコンパイルしたバイナリの場所を渡すんでなくて、pcreのソースの場所を渡すのですね……

とりあえず、これでCocProxy for nginx - #生存戦略 、それは - subtech / no titleが使えます。

2013年02月07日(木)

httpsのアクセスをnginxでプロキシしてnode.jsに渡す

httpsアクセスを前面に立てたnginxで受け取って、node.jsに渡すというのをやってみました。

かなり面倒そうだなーと思っていたのですが、それほどでもなかったです。

環境:OS X 10.8.2 / node.js 0.8.17 / nginx 1.3.12


証明書の作成

httpsサーバを実行してみたよ - 四角革命前夜を参考にそれっぽく作ります。

$ head -c 20 /dev/random > seed.data
$ openssl genrsa -rand seed.data -des3 1024 > secret-key.pem
$ openssl req -new -key secret-key.pem -out csr.pem
$ openssl x509 -in csr.pem -out server.cert -req -signkey secret-key.pem
$ openssl rsa -in secret-key.pem -out secret-key-nopass.pem

どのファイルがなんなのかとか全然わかってません。


nginxのインストール

まずはnginxをインストールします。

$ curl -O http://nginx.org/download/nginx-1.3.12.tar.gz
$ tar xvfz nginx-1.3.12.tar.gz
$ cd nginx-1.3.12/
$ ./configure --prefix=$HOME/Work/nginx/bin --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_rewrite_module
$ make
$ make install

こんな感じでインストールしました。httpsを扱うのでそのモジュールを入れているのと、メール関連のモジュールを外しているのと、PCREを入れるのが面倒だったという理由でrewriteモジュールも外してあります。


nginxの設定ファイルを記述する

次にnginxにプロキシしてもらうため設定ファイルを書きます。

$ cd $HOME/Work/nginx/bin/conf
$ cp nginx.conf{,.bak}
$ vim nginx.conf
nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

http {
  server {
    listen 8080;
    server_name localhost;

    ssl on;
    ssl_certificate (パス)/server.cert;
    ssl_certificate_key (パス)/secret-key-nopass.pem;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;

    location /aaa {
      proxy_pass https://localhost:3000;
    }

    location /bbb {
      proxy_pass https://localhost:3001;
    }
  }
}

鍵の設定は何度か試したらエラーが出なかったのでこれで。


プロキシされるnode.jsのスクリプトを書く

nginxから渡されたアクセスを処理するnode.jsのスクリプトを書きます。

2つ書きますが大してかわりません。

index.js
#!/usr/bin/env node

var fs = require('fs'),
    https = require('https'),
    server;

server = https.createServer({
  key: fs.readFileSync('./secret-key-nopass.pem'),
  cert: fs.readFileSync('./server.cert')
}, function(req, res) {
  res.writeHead(200);
  res.end('/aaa');
}).listen(3000, function() {
  console.log('server running port at 3000');
});
index2.js
#!/usr/bin/env node

var fs = require('fs'),
    https = require('https'),
    server;

server = https.createServer({
  key: fs.readFileSync('./secret-key-nopass.pem'),
  cert: fs.readFileSync('./server.cert')
}, function(req, res) {
  res.writeHead(200);
  res.end('/bbb');
}).listen(3001, function() {
  console.log('server running port at 3001');
});

nginxとnode.jsを起動させる

あとは起動させてアクセスするだけ!

$ ./nginx
$ node index.js &
$ node index2.js &

これでFirefoxからhttps://localhost:8080/aaahttps://localhost:8080/bbbにアクセスするとそれぞれの出力が表示されます。


nginxのことをまだまだ全然知らないので、少しでも慣れるように使っていくか、node-http-proxyでプロキシを書いてしまうか……

2012年02月26日(日)

Debianにnginxを入れたよ

XS35にDebianを入れてから全然使っていなかったのでnginxを入れてみた。

環境:Debian Squeeze 64bit


下準備

# apt-get install -y libpcre3-dev

build-essentialとかlibssl-devを既に入れていたので、必要なのはこれくらいだった。


ダウンロードとインストール

# wget http://nginx.org/download/nginx-1.1.14.tar.gz
# tar xvfz nginx-1.1.14.tar.gz 
# cd nginx-1.1.14/
# ./configure --help | less # ふむふむ
# ./configure --prefix=/opt/nginx/1.1.14 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module

とりあえずメール関連は要らなかったのでそこだけ無効化しておいた。

それと、とりあえず/optに入れておいた。


で、コンパイル、インストール!

# make
# make install

動作させる

# cd /opt/nginx/1.1.14/sbin
# ./nginx

特に何も表示されないけど、動いてるみたい。

# ps ax | grep nginx
3729 ?        Ss     0:00 nginx: master process ./nginx
3730 ?        S      0:00 nginx: worker process

アクセスしてみると

Welcome to nginx!

って表示がされた。ラクチンだなー。


止める

# killall nginx

ね。

# nginx -s quit

でもいいのかな?これでもできたけど。


参考図書

ハイパフォーマンスHTTPサーバ Nginx入門

ハイパフォーマンスHTTPサーバ Nginx入門

この本を見ながらやったんだけど、なかなか役に立った。扱ってるバージョンはもう若干古いけど……

2011年09月20日(火)

Nginx入門 第3章〜第8章 + 付録A,B,C

読んだのにここに書くのを忘れてた。


これ一冊あればNginxでやりたいことは大体見つかる、って感じかな。

PHP/PythonをFastCGIでつなぐやり方とか、Apacheにリバースプロキシとして使う方法も書いてあるし、

各モジュールの説明も懇切丁寧に書いてあるし。

付録はものすごいことになってるし…… 使い慣れて、困ったらここを読みそう。


今の自分の難点として、Nginxを使う機会がないってところ?

機会はまあ、いくらでも作れるんだけど…… ああ、暇がない。

2011年09月16日(金)

Nginx入門 第1章〜第2章

ハイパフォーマンスHTTPサーバ Nginx入門

ハイパフォーマンスHTTPサーバ Nginx入門

Nginx本を買ってから大分経つのですが、全然読んでなかったので読むことに。他にも買ってから読んでない本は結構あるのですけど。


第1章

PuTTYをダウンロード、から始まるこの本。最初は買って失敗だったかな、と思いましたが逆に言うと基礎的なことがちゃんと書いてあるということで。(それをNginx本として書いてあるのはどうなんだろうとは思うけど……)

よく使う各種コマンドの使い方やiノードの説明などなど、知っていることが多かったけど、知らなかったことなどもけっこうあって勉強になりました。iノードとか、ログインできないユーザを作る意味とか、atime, ctime, mtimeとか。


ログインできないアカウントを作成するときのコマンドに、

$ useradd --shell /sbin/nologin --home-dir /usr/local/nginx nginx

とありますが、Ubuntu Server 10.04の場合は/usr/sbin/nologinです。これはrpm系のディストリビューションのコマンドなのかな?


第2章

Nginxのダウンロードとインストールの章。Nginxをコンパイルするのに必要なライブラリだとか、./configure時のオプションの説明だとかそういう章です。

あと今まで一番知りたくて知れなかったデーモンの説明とか、SystemVスクリプトの作り方だとかが書いてあったり。

Nginx本としての側面以外に、Linuxの基礎的なことが書いてある本というかなんというか。


なんでもっと早く読まなかったのかなー。このままどんどん先を読みましょう。