配置 Google Domains、EC2 和 Nginx

配置 Google Domains、EC2 和 Nginx

当我尝试配置域名以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页面。有人能给我指出正确的方向吗?

以下是一些背景信息:

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有文档。 例子官方文档中给出的配置。您会看到他们所说的格式与此处的其他答案和评论类似。

唯有我们能说:

  1. 在调试期间将 DNS 的 TTL 设置为非常低的水平,例如 30 秒
  2. server_name www.your-domain-name.com;从 nginx 设置。
  3. 然后检查 DNS 传播
  4. 通过 Tor 浏览器访问检查。您可能看到的是缓存页面。

改正后,运行nginx -tconfig test然后重启nginx即可生效。

答案3

Nginx 正在监听 IP 地址。您需要在“server_name”指令中添加您的域名。然后重新加载 nginx,它应该可以正常工作。

相关内容