尽管在AWS上开放了80端口,但仍然无法访问该网站
前几天我想在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控制台。