12
8

More than 3 years have passed since last update.

AWSで80ポートを開いてるのに【このサイトにアクセスできません】が出る

Posted at

image-2.png

先日Railsアプリをsslで通信したいと考えRailsでconfig.force_sslを設定してからなぜかアプリが表示されなくなったため、その時の対処法をまとめました。

アプリの状態

アプリ名 my-app
server EC2
web server nginx
application server unicorn
解放ポート 80, 443, 22

まずはセキュリティグループを確認

いつものことかと思い

AWS→セキュリティグループ→対象のパブリックなセキュリティグループを確認

しかし特に異常は見つからず80番と443番はしっかり開いてました。
普通なら通信はできるはずなのですが…

ちなみにlocal環境からEC2インスタンスへssh通信はできているようです。

nginxが80ポートにlistenしているかを確認

続いてnginxの設定ファイルを確認し80ポートにlistenされているか。

$ssh USER@MY-ELASTIC-IP

$ cat /etc/nginx/conf.d/my-app.conf


upstream unicorn {
          server unix:/var/www/my-app/shared/tmp/sockets/unicorn.sock;
}
server {
  listen 80; <-----------
  server_name ELASTIC-IP;
  root /var/www/my-app/current/public;

  access_log /var/log/nginx/nginx_access.log;
  error_log  /var/log/nginx/nginx_error.log;


  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}

ポート指定も問題ないようです。

コンソールからポートが開いているかチェック


$ netstat -tln

# 接続しているものでlisten済みのものを表示

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN
tcp6       0      0 :::111                  :::*                    LISTEN

確認してみると確かに接続を許していないようです。なぜ22ポートだけが開いているのかわかりません。

試しにこの状態でセキュリティグループをいじくっても結果は変わらず…

セキュリティグループの他にもネットワークインターフェースやネットワークACL、インターネットゲートウェイ、ルートテーブルなども確認してみたのですが結果は変わりませんでした、

結論 ngixnの不調でした

結局nginxを調べてみることに。
すると…

$ sudo nginx -s reload

----------------------------------------------------------------------

nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)

capistranoでデプロイした際は特に問題なくunicornは起動していたので見落としてしまっていましたがここに原因があったようです。

nginxpidファイルが消失してしまっていたため作り直します。

ngixn 再起動


$ sudo service nginx stop

$ sudo touch /run/nginx.pid     

$ nginx -t

$ sudo service ngixn start  

再び確認

$ sudo service ngix status

----------------------------------------------------------------------
Redirecting to /bin/systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-10-30 06:05:36 UTC; 3h 28min ago
  Process: 22103 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 22100 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 22099 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 22106 (nginx)
   CGroup: /system.slice/nginx.service
           ├─22106 nginx: master process /usr/sbin/nginx
           └─22111 nginx: worker process

Oct 30 06:05:36 ip-10-0-0-178.us-east-2.compute.internal systemd[1]: Starting The nginx HTTP and reverse proxy server...
Oct 30 06:05:36 *p-10-0-0-178.us-east-2.compute.internal nginx[22100]: nginx: the configuration file /etc/nginx/ngi...ok
Oct 30 06:05:36 ip-10-0-0-178.us-east-2.compute.internal nginx[22100]: nginx: configuration file /etc/nginx/nginx.c...ul
Oct 30 06:05:36 ip-10-0-0-178.us-east-2.compute.internal systemd[1]: Failed to read PID from file /run/nginx.pid: ...ent
Oct 30 06:05:36 ip-10-0-0-178.us-east-2.compute.internal systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.

その後

$ netstat -tlnt

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN
tcp6       0      0 :::111                  :::*                    LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN

解決しました!

nginxが上手く機能していないとすると80ポートが閉じてしまうのは知らなかったですね…

原因はおそらくインスタンスの再起動

rails で config.force_ssl = trueを使用

sslに必要な設定を行っていなかったため表示エラー

その際EC2インスタンスを再起動したため上手くnginxが機能していなかったのだと思います。

config.force_sslエラーについてはこちらの記事にまとめました。
>>【config.force_ssl】を使用したらページが表示されなくなった

次回同じようなエラーに遭遇したらまずはnginxからポートが開いているかを確認してからawsコンソールを弄ろうと思います。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8