Nginx 導入
Nginx(エンジン・エックス)は、Webサーバの一種。
・Webサーバ
クライアントからのリクエストに応じたコンテンツをレスポンスとして返すプログラム。
① クライアントからのリクエスト全てがWebサーバに送られる。
② Webサーバ内で処理することが出来れば、ブラウザにレスポンスを返す。
処理が出来るものはデータベースと通信せず、静的なコンテンツのみ。
静的なコンテンツはリクエストのたびに内容が変更されないファイル。
例:表示が定まっているCSSや、画像、会社概要、事業内容など
誰が見ても同じ内容を提供する。
③ Webサーバから渡された情報を、アプリケーションサーバ内で処理する
④ 処理結果を、Webサーバに返す
アプリケーションサーバとアプリケーション本体は、使用言語が違い
連携できない。この問題をRackが解決。
Rack インターフェースの一種(異なる種類のものを結びつける共用部分)
いわば翻訳。アプリケーションサーバとアプリケーション本体が
コミュニケーションを取ることができ、処理結果をWebサーバに返す。
⑤ アプリケーションサーバから返ってくる処理を、ブラウザに返す。
Webサーバで処理出来ない場合、処理をアプリケーションサーバに依頼。
処理が出来ないものとは、動的なコンテンツを生成しリクエストを返す。
動的なコンテンツは、リクエストの際内容が変更されるファイル。
例:データベースから検索条件に該当するデータ取得して、表示する
ファイル。プログラムが実行されるもの。)
Webサーバ3つの処理
・静的なコンテンツをレスポンスとしてクライアントに返す
・動的なコンテンツ生成をアプリケーション本体に依頼する
・アプリケーションサーバから返ってくる処理結果をレスポンスとして
クライアントに返す処理
・アプリケーションサーバ
動的なコンテンツを生成し、処理結果をWebサーバに返す役。
アプリケーションサーバが、サーバ内に設置されているアプリケーション
本体にリクエスト処理の指令を出す。本体が処理を完了すると、サーバは
処理結果をレスポンスとしてWebサーバに返す。
Unicornはアプリケーションサーバの一種。
Nginxをインストール
ターミナル(EC2サーバ)
# インストール
[ec2-user@ip-172-31-40-199 ~]$ sudo yum -y install nginx
# vimコマンドでNginxの設定。/etc以下のファイルなので、強い権限でないと書き込み、保存ができない。
# コマンド頭にsudoをつける。
[ec2-user@ip-172-31-40-199 ~]$ sudo vim /etc/nginx/conf.d/rails.conf
rails.conf を編集
upstream app_server {
# Unicornと連携。アプリケーション名を書き換える。
server unix:/var/www/アプリケーション名/tmp/sockets/unicorn.sock;
}
# {}で囲った部分をブロックと呼ぶ。サーバの設定
server {
# 接続を受け付けるポート番号
listen 80;
# 接続を受け付けるリクエストURLを設定。 ここ以外のURLではアクセスできない
server_name <Elastic IP>;
# アップロードされるファイルの容量上限を2ギガに設定。デフォルトは1メガ。
client_max_body_size 2g;
# 接続時のrootディレクトリ
root /var/www/アプリケーション名/public;
# assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
error_page 500 502 503 504 /500.html;
}
ターミナル(EC2サーバ)
# nginxの権限を変更。POSTメソッドでもエラーが出ないようにする。
[ec2-user@ip-172-31-25-189 ~]$ cd /var/lib
[ec2-user@ip-172-31-25-189 lib]$ sudo chmod -R 775 nginx
# Nginxを再起動して設定ファイルを再読み込み
[ec2-user@ip-172-31-25-189 lib]$ cd ~
[ec2-user@ip-172-31-25-189 ~]$ sudo service nginx restart
POSTメソッドとは、HTTP通信でWebサーバへ送るリクエストの種類の一つURLで指定したプログラムなどに対してクライアントからデータを送信するためのもの。大きなデータやファイルをサーバに送るために使われる。
unicorn.rb を編集
# Nginxを介した処理を行うため listen 3000 を下記に変更。
listen "#{app_path}/tmp/sockets/unicorn.sock"
ターミナル(EC2サーバ)
# 本番環境に反映。
[ec2-user@ip-172-31-25-189 ~]$ cd /var/www/〇〇
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ git pull origin master
# PID確認。
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ ps aux | grep unicorn
# プロセスをkill。
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ kill <PID>
# Unicorn再起動。
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
・Elastic IPでアクセス :3000 は付けない。
エラーが出る時
・502 but gateway が出る場合は、nginxの log の確認が必要。
/var/log/nginx/error.logを less または cat コマンドで確認。
サーバ側で、 /var/www/<レポジトリ名>/log/unicorn.stderr.log を
less か cat コマンドで確認し、エラーを確認。
(下に行くほど最新のログ。時刻表記がUTCであることに注意)
・Rails起動確認
・EC2インスタンス、mysql、nginx再起動。