CentOSにnginxをインストールしてRailsと連携させる

# はじめに
久しぶりにCentOSへRailsをインストールする機会があったので、nginxのインストールからRails連携までの手順をメモしました。

**環境**
CentOS 7.3.1611
Rails 5.1.2
nginx 1.10.2

**もくじ**
1. nginx インストール
2. nginx アクセス確認
3. nginx バーチャルホスト設定
4. Rails puma設定
5. nginx→Railsアクセス確認
6. nginx 自動起動設定

**前提条件**
Railsアプリは`/home/xxx/hello-app`に配置された状態

# 1. nginx インストール

```
# インストール
$ sudo yum install -y nginx

# バージョン確認
$ nginx -v
```

yumコマンドでnginxがインストールできなかった場合はこちらをご参考ください。
[CentOSにnginxをインストールする方法 \- Qiita](http://qiita.com/NaokiIshimura/items/08aac94a184d1a00d39b)

# 2. nginx アクセス確認

```
# nginx起動
$ sudo nginx
```

ブラウザでサーバのアドレスにアクセスする
https://example.com

![nginx.png](https://qiita-image-store.s3.amazonaws.com/0/141934/837cbccc-4c5d-3a07-5a21-cd4c9bd51352.png)

```
# nginx停止
sudo nginx -s stop
```

# 3. nginx バーチャルホスト設定

コンフィグファイルを修正する

```
vi /etc/nginx/nginx.conf
```

```nginx:/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

```

バーチャルホスト設定ファイル配置ディレクトリを用意する

```
$ mkdir /etc/nginx/sites-available
$ mkdir /etc/nginx/sites-enabled
```

バーチャルホスト設定ファイルを作成する

```
# アプリ名をhello-appとする場合
vi /etc/nginx/sites-available/hello-app
```

```nginx:/etc/nginx/sites-available/hello-app
# アプリ名：hello-app
# アプリ配置ディレクトリ：/home/xxx/hello-app
# アプリで使用するポート：3000

upstream hello-app {
  server unix:/home/xxx/hello-app/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name .*;

  root /home/xxx/hello-app/public;

  location / {
    try_files $uri @app;
  }

  location @app {
    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Host    $host;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_pass http://hello-app;
  }
}
```

`/etc/nginx/sites-enabled`ディレクトリにバーチャルホスト設定ファイルをコピーする

```
$ ln -s /etc/nginx/sites-available/hello-app /etc/nginx/sites-enabled/hello-app
```

# 4. Rails puma設定

puma.rbに設定を追記する

```
$ cd ~/hello-app
$ vi /config/puma.rb
```

```ruby:confit/puma.rb
# 追記
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"
```


# 5. nginx→Railsアクセス確認

```
# nginx起動
$ sudo nginx

# Railsサーバ起動
$ cd ~/hello-app
$ sudo env PATH=$PATH bin/rails s -p 3000
```

ブラウザでサーバのアドレスにアクセスする
https://example.com

![rails.png](https://qiita-image-store.s3.amazonaws.com/0/141934/eeea0d97-f60f-db0b-82c7-d50c9311abea.png)

```
# Railsサーバ停止
Ctrl + C 

# nginx停止
$ sudo nginx -s stop
```

# 6. 自動起動設定

アクセス確認して問題なければ自動起動設定をする

```
# 自動起動ON
$ sudo systemctl enable nginx

# 状態確認
$ sudo systemctl status nginx
```

# おまけ
うまくアクセス出来ない場合はこちらもご参考ください。

[【忘却録】nginx, Rails連携時に「502 Bad Gateway」となる場合のSELinux設定 \- Qiita](http://qiita.com/NaokiIshimura/items/d4464f13c8610e7b6745)
[【忘却録】nginx, Rails連携時にassets配下のファイルにアクセスできない場合の解決方法 \- Qiita](http://qiita.com/NaokiIshimura/items/cc57316a409a39aa5a6d)