尽管在AWS上开放了80端口,但仍然无法访问该网站

image-2.png

前几天我想在Rails应用程序中使用ssl进行通信,所以在Rails中设置了config.force_ssl,但是不知何故应用程序无法显示,所以总结了当时的解决方法。

应用程序的状态

アプリ名my-appserverEC2web servernginxapplication serverunicorn解放ポート80, 443, 22

首先,确认安全组。

我以为这是常态。

AWS→安全组→确认目标公共安全组

然而,没有发现任何异常情况,80号和443号端口都是开放的。
按理说应该可以进行通信,但是…

顺便说一句,从本地环境到EC2实例似乎可以进行SSH通信。

请确认nginx是否在80端口进行监听。

接下来,确认一下nginx的配置文件,看看是否在80端口进行了监听。

$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文件丢失,需要重新创建它。

重启nginx


$ 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。

让我们一起努力工作,实现我们的目标吧。

由于没有进行ssl所需的设置,所以出现了显示错误。

请提供您需要重述的具体内容。

我认为是因为在那个时候重新启动了EC2实例,所以nginx无法正常运行。

使用【config.force_ssl】后页面无法显示,我们在这篇文章中总结了关于config.force_ssl错误的信息。

如果下次遇到类似错误,我首先会检查nginx是否打开了端口,然后再去调整aws控制台。

广告
将在 10 秒后关闭
bannerAds