安装和配置Nginx

Nginx是一个高性能的Web服务器。

首先,我们将从本地终端登录到EC2服务器终端。
接下来,我们将安装Nginx。
本地终端

$ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
(ダウンロードした鍵を用いて、ec2-userとしてログイン)

终端(服务器)

[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nginx

终端(EC2服务器)

[ec2-user@ip-172-31-25-189 ~]$ sudo vim /etc/nginx/conf.d/rails.conf

打开终端并编辑文件,按照以下方式进行修改。

upstream app_server {
  # Unicornと連携させるための設定。アプリケーション名を自身のアプリ名に書き換えることに注意。今回であればおそらくchat-space
  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;
}
```
<アプリケーション名>と<Elastic IP>はご自身のを入力してください。
ちなみに、<>は記入不要です。
次に、POSTメソッドでもエラーが出ないようにします。
なぜエラーが出ないようにするかというと、POSTメソッドは、HTTP通信でクライアントからWebサーバへ送るリクエストの種類の一つで、URLで指定したプログラムなどに対してクライアントからデータを送信するためのものです。大きなデータやファイルをサーバに送るために使われます。
ターミナル(EC2サーバ)

中的命令行:
[ec2-user@ip-172-31-25-189 ~]$ cd /var/lib
[ec2-user@ip-172-31-25-189 lib]$ sudo chmod -R 775 nginx

翻译成中文:
[ec2-user@ip-172-31-25-189 ~]$ 切换至 /var/lib 目录
[ec2-user@ip-172-31-25-189 lib]$ 使用sudo命令将nginx目录及其子目录的权限设置为775。

[ec2-user@ip-172-31-25-189 lib]$ cd ~
[ec2-user@ip-172-31-25-189 ~]$ sudo service nginx restart

下一步,我们需要通过Nginx来进行处理,所以需要修改unicorn的配置。在本地修改unicorn.rb文件。

listen 3000

↓以下のように修正

listen "#{app_path}/tmp/sockets/unicorn.sock"

在做出修改后,进行commit和push操作,并在服务器端执行以下指令来反映修正内容。接下来,将本地的变更内容应用到生产环境中。使用终端(EC2服务器)。

# まず、ご自身のレポジトリ名のディレクトリに移動
[ec2-user@ip-172-31-25-189 ~]$ cd /var/www/リポジトリ名
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ git pull origin master

然后,杀死Unicorn进程(数字从左至右的第二个),并重新启动。
终端(EC2服务器)

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ ps aux | grep unicorn

ec2-user 17877  0.4 18.1 588472 182840 ?       Sl   01:55   0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881  0.0 17.3 589088 175164 ?       Sl   01:55   0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911  0.0  0.2 110532  2180 pts/0    S+   02:05   0:00 grep --color=auto unicorn

接下来,我们将终止该进程。
终端(EC2服务器)

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ kill <確認したunicorn rails masterのPID(上のコードでは17877)>

接下来,我们要启动Unicorn。
终端(EC2服务器)

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

如果上述操作正确完成,您可以通过浏览器使用弹性IP访问应用程序(无需添加:3000)。请注意,此时unicorn必须已经启动。

当访问IP地址时发生错误

如果遇到502 Bad Gateway错误,需要检查nginx的日志。可以使用less或cat命令查看/var/log/nginx/error.log。

在服务器端,也可以使用less或cat命令查看/var/www/<仓库名称>/log/unicorn.stderr.log,以确保没有出现错误(最新的日志在下方,注意时间标记是UTC时间)。

可能还需要检查Rails是否已启动。

可以尝试重新启动EC2实例(在生产环境中可能需要启动mysql和nginx)。

广告
将在 10 秒后关闭
bannerAds