酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

さくらVPS/Cent OS 6.4 Nginx導入[Railsサーバへの道]

さくらVPS 2GB SSDのCentOS 6.4をセットアップしてイケてるRailsサーバに仕上げるまでのシリーズです。第5回はNginxの導入です。NginxはApacheと比べると歴史は浅いですがRailsで使うのもかなりメジャーになってきました。もしApacheの方が、好みの方はさくらVPS/Cent OS 6.4へのApache導入を試してみて下さい!

(07-10 20:30) ELB経由のnginxでクライアントのIPを取得する方法を追記


リポジトリの登録

以下のコマンドを実行して、nginxのリポジトリを登録。

1
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

nginxのリポジトリ登録確認。

1
2
3
4
5
yum list nginx --disablerepo=* --enablerepo=nginx
nginx            | 2.9 kB     00:00
nginx/primary_db |  24 kB     00:00
Available Packages
nginx.x86_64 1.4.2-1.el6.ngx nginx

Nginxのインストール

次のコマンドを実行してNginxをインストール。

1
sudo yum install -y nginx --disablerepo=* --enablerepo=nginx

Nginxの設定

Nginxを起動及び、自動起動を設定。

1
2
sudo service nginx start
sudo chkconfig nginx on

自動機能の確認。以下のようになっていれば成功。

1
2
chkconfig --list nginx
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off

実際のRailsへの利用は僕自身の検証が追いついていません。という申し訳ない状況です。完熟トマトというブログのCentOS 6.3にRails実行環境を構築する(Nginx+Rails+Unicorn+PostgreSQL)がとても良くまとまっていてわかりやすいので、是非ご覧ください。改めて検証をやりきったらアップデートします!

オレオレ証明書でSSLの導入の手順

オレオレ証明書を使ってSSLをとりあえず導入する手順です。

まずはオレオレ証明を作成。

1
2
3
4
5
6
7
8
sudo su -
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

作った証明書をnginx.conf側に反映。

1
2
3
4
5
6
7
server {
    # 以下を443側に追記
    listen 443 default ssl;
    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
}

httpのアクセスをhttpsにリダイレクトさせる

nginx.confを以下の様に書き換え!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
    listen 80;
    server_name example.com;
    return 301 https:/$host$request_uri;
}

server {
  listen 443 default ssl;
  server_name example.com;
  root /var/rails/example.com;

  ssl on;
  ssl_certificate /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;
  location / { proxy_pass http://127.0.0.1:5001; }
}

AWS ELB経由でnginxに繋げる場合にクライアントIPを取得する方法

AWS ELB経由でnginxに繋げる場合にクライアントIPを取得する方法です。正直言って、かなりハマったので忘備録がてらのメモです!

1
2
3
4
5
http {
  # 以下のコードをhttp/serverなどの中に追記
  real_ip_header     X-Forwarded-For;
  set_real_ip_from   0.0.0.0/0;
}

IP制限などを行いたいときに超便利です!

Special Thanks

nginx で ssl 設定をする - dogmap.jp

CentOS-6へ最新版のnginxを3分でインストールする方法 - Y-Ken Studio - 日々クリエイション

変更来歴

(13/09/24 07:45) 新規作成
(14/07-10 20:30) ELB経由のnginxでクライアントのIPを取得する方法を追記
(14/07/24 13:55) SSLの導入手順を追記

おすすめの書籍