事象
AWSにEC2サーバーをUbuntuで立て、SSHでアクセス出来ています。
nginxをインストールしましたが、ホスト名およびIPアドレスでアクセスするとタイムアウトになります。
$ curl localhost
では正しくnginxのサンプルindex.htmlが表示されますが、
$ curl www.example.com # 自分のホスト名
で
curl: (28) Failed to connect to xxx.xxx.xxx.xxx port 80: 接続がタイムアウトしました
および
$ curl www.example.com # EC2サーバーのElastic IPアドレス
で
curl: (28) Failed to connect to xxx.xxx.xxx.xxx port 80: 接続がタイムアウトしました
となる状態で、ブラウザーからアクセスしてもタイムアウトになります。
正しくWebページを表示させるにはどうすればいいでしょうか。
環境
OSはUbuntuです。
$ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.3 LTS (Focal Fossa)" (以下略)
nginxは1.20.1です。
$ nginx -V nginx version: nginx/1.20.1 built by gcc 9.3.0 (Ubuntu 9.3.0-10ubuntu2) built with OpenSSL 1.1.1f 31 Mar 2020 TLS SNI support enabled (以下略)
設定
nginx.conf
インストール時のままです。
(空行と注釈を削っています)
$ cat /etc/nginx/nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; 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; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
conf.d/default.conf
サーバー名を追加しました。
$ cat /etc/nginx/conf.d/default.conf server { listen 80; #server_name localhost; # ここに自分のホスト名を書きました server_name www.example.com; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
試したこと
curl localhostできていますので、nginxは動いていると思います。
$ curl localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
プロセスの起動も確認しました。
$ ps ax | grep nginx 11435 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 11437 ? S 0:00 nginx: worker process 11495 pts/1 S+ 0:00 grep --color=auto nginx
ポートの状態は以下の通りです。
$ ss -natu | grep LISTEN | grep 80 tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
しかし、curl 自分のホスト名とすると、接続がタイムアウトします。
$ curl www.example.com curl: (28) Failed to connect to login.tododone.biz port 80: 接続がタイムアウトしました
ブラウザーで同じホスト名にアクセスしても「接続がタイムアウトしました」と言われます。
自分のホスト名の名前解決は出来ています。
$ dig www.example.com ; <<>> DiG 9.16.1-Ubuntu <<>> www.example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60139 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 108 IN A xxx.xxx.xxx.xxx # 実際にはEC2のElastic IPが入っています ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: 土 10月 02 12:53:35 JST 2021 ;; MSG SIZE rcvd: 63
IP直打ちでcurlしても結果は同じでした。
$ curl xxx.xxx.xxx.xxx curl: (28) Failed to connect to xxx.xxx.xxx.xxx port 80: 接続がタイムアウトしました
アクセスログを確認しましたが、localhost からのアクセスしか記録されていませんでした。
$ cat /var/log/nginx/access.log 127.0.0.1 - - [02/Oct/2021:11:22:51 +0900] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.68.0" "-" 127.0.0.1 - - [02/Oct/2021:12:01:11 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-" 127.0.0.1 - - [02/Oct/2021:12:06:58 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-" 127.0.0.1 - - [02/Oct/2021:12:11:16 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-" 127.0.0.1 - - [02/Oct/2021:12:23:00 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-" 127.0.0.1 - - [02/Oct/2021:12:33:01 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
補足情報
AWSのEC2 > セキュリティグループから、以下のエントリーを追加しています。
SSHにはアクセス出来ています。
(セキュリティグループ名) IPv4 SSH TCP 22 0.0.0.0/0 (セキュリティグループ名) IPv4 HTTP TCP 80 0.0.0.0/0 (セキュリティグループ名) IPv4 HTTPS TCP 443 0.0.0.0/0 (セキュリティグループ名) IPv6 SSH TCP 22 ::0/0 (セキュリティグループ名) IPv6 HTTP TCP 80 ::0/0 (セキュリティグループ名) IPv6 HTTP TCP 443 ::0/0
ACLは設定していません。
追記
デフォルトのVPCを使っています。
VPC、サブネット、RTBの関係についてです、
このVPCと、ルートテーブルが以下のように設定されていました。
サブネットとルートテーブルの関連付けについては以下の通りです。
どうか、よろしくおねがいします。
回答5件
あなたの回答
tips
プレビュー