我在 EC2 实例上安装了 Apache 来为我的网站提供服务。我从 GoDaddy 购买了该网站的域名。
为了在 AWS 托管的 EC2 实例上为网站提供服务,我在 Route53 中为从 GoDaddy 购买的域名创建了一个托管区域。
我更新了在 GoDaddy DNS 面板中的 Route53 中创建托管区域后获得的名称服务器。
更新此名称服务器后,我在 Route53 的托管区域中创建了一条 A 记录,指向为服务我的网站而创建的 EC2 实例的公共 IP。
但是仍然无法通过域使用 Apache 访问 EC2 实例上提供的网站。
我于周一(2024 年 2 月 26 日)更新了 GoDaddy 面板中的名称服务器,自更新以来已经过去了近 2 天,但该网站仍然未在预期的域上提供服务。
这是我的 Apache 配置文件:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
ServerName test.instabook.app
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
RewriteEngine on
RewriteCond %{SERVER_NAME} =test.instabook.app
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我不明白为什么尽管执行了所有需要的任务,网站却没有提供服务。
答案1
Apache 配置仅设置为 HTTP (80),并且浏览器正尝试通过 HTTPS (443) 进行连接。
最好的解决方案是购买 SSL 证书并将其安装在服务器上。您可以使用自签名 SSL 证书进行测试。
检查 DNS 传播DNS 检查器显示 DNS 已正确传播;所有节点都指向目标地址:
3.110.225.226
我通过运行以下 Curl 命令进一步测试了您的网站;它通过基本 HTTP 快速返回了干净的响应标头:
curl -ILk http://test.instabook.app
结果是:
HTTP/1.1 200 OK
Date: Thu, 29 Feb 2024 04:14:16 GMT
Server: Apache/2.4.52 (Ubuntu)
Last-Modified: Wed, 28 Feb 2024 11:33:38 GMT
ETag: "1268-6126f83916814"
Accept-Ranges: bytes
Content-Length: 4712
Vary: Accept-Encoding
Content-Type: text/html
但它总是如果我使用 HTTPS,则会挂起直到超时:
curl -ILk https://test.instabook.app
挂起一段时间然后返回:
curl: (28) Failed to connect to test.instabook.app port 443: Operation timed out
问题很可能是,当您仅在纯 HTTP 上运行服务器(当前)时,您的浏览器正尝试强制使用 HTTPS。
最好的解决方案是购买 SSL 证书并将其安装在服务器上。您可以使用自签名 SSL 证书测试 Apache 设置;但请为您的网站获取真正的证书。