当我尝试配置域名以Google Domains
指向我的EC2
(Ubuntu Server)实例时遇到了一个大问题。
我设置了nginx
反向代理来为Django
应用程序提供服务。我还配置了一个弹性 IP 并将其与EC2
实例关联。当我访问弹性 IP ( 34.XXX.XXX.28
) 时,我可以正常访问应用程序。这告诉我 EC2 实例中的所有内容都已正确配置(nginx、Django 应用程序等...)。
问题是,当我访问我的域名时www.mydomain.com
,我得到了这个页面:
欢迎使用 nginx!
如果您看到此页面,则表示 nginx Web 服务器已成功安装并正常运行。需要进一步配置。
有关在线文档和支持,请参阅 nginx.org。商业支持可在 nginx.com 上获得。
感谢您使用 nginx。
我很困惑为什么直接访问弹性 IP 有效,但通过域名 ( www.mydomain.com
) 访问会转到默认nginx
页面。有人能给我指出正确的方向吗?
以下是一些背景信息:
- 这是我的Google 域配置
- 这些都是我的弹性 IP 和 EC2 安全入站规则配置
- 我的
nginx
配置是监听端口 80。这是我的配置:
upstream djangoapp { server unix:/var/www/run/djangoapp.sock; } server { listen 80; server_name 34.XXX.XXX.28; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://djangoapp ; } location /static/ { alias /var/www/djangoapp/static/; autoindex on; } }
答案1
Nginx 可以监听同一 IP 地址上的多个网站,包括 http 和 https。现在,您可以让它监听对特定 IP 的请求,而不是域名。解决方案是指定您希望它监听的域 - 例如
server_name example.com www.example.com;
通常情况下,您只应监听一个域。子域应转发到主域,但 www 或根域是否为“主”域完全由您决定。
# Main server
server {
listen 80;
server_name example.com;
// Locations etc
}
server {
listen 80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
您还可以阻止任何给定的服务器“默认服务器”。这可能是您网站的主要服务器阻止,也可能是另一个阻止您的服务器通过 IP 响应的服务器阻止。您可能不想响应 IP,因为互联网会不断被扫描
server {
listen 80 default_server;
server_name 1.2.3.4 example.com;
}
这是一个默认服务器,它拒绝特定服务器块未处理的 IP 流量
server {
listen 80 default_server;
server_name _; # Wildcard, any domain is served
return 444; # This means "go away", effectively
}
答案2
当您使用站点的公共 IP 时,它正在逃避 DNS。您看到的是 100% 正确的内容,中间没有 DNS 缓存机制。如果没有错误日志的精确详细信息和完整配置,就无法做出判断。但 Nginx 配置确实有误,正如其他人指出的那样显然Nginx有文档。 例子官方文档中给出的配置。您会看到他们所说的格式与此处的其他答案和评论类似。
唯有我们能说:
- 在调试期间将 DNS 的 TTL 设置为非常低的水平,例如 30 秒
- 并
server_name www.your-domain-name.com;
从 nginx 设置。 - 然后检查 DNS 传播
- 通过 Tor 浏览器访问检查。您可能看到的是缓存页面。
改正后,运行nginx -t
config test然后重启nginx即可生效。
答案3
Nginx 正在监听 IP 地址。您需要在“server_name”指令中添加您的域名。然后重新加载 nginx,它应该可以正常工作。