繁体   English   中英

在 AWS 中,我需要帮助以通过公共 ip 或公共 dns 拒绝 url 并仅允许通过域(CNAME)访问

[英]In AWS I need help for deny url by public ip or public dns and to allow only access by domain (CNAME)

我有带有弹性 ip 的 aws ec2 和带有我的域的 route53 并且在服务器中有 nginx,这工作正常但是,

我见过其他网站是如何工作的,amazon.com udemy.com。 如果您通过 public ip 或 public dns 直接访问,则会引发错误。 我的问题是如何配置它来做同样的事情。

例子:
浏览器 url 按域:amazon.com = ok
浏览器 url 由公共 ip:52.222.137.64 = 400-403 错误。
浏览器 url 由公共 dns:server-52-222-137-64.ams50.Z4B43B0AEE35624CD95B910189B3DC20-403 错误

浏览器 url 按域:example.com = ok
浏览器 url 由公共 ip:124.34.32.245 = 好的。
浏览器 url 由公共 dns:ec2-124.34.32.245.eu-west-3.compute.amazonaws.Z4D236D9A2D102C5ZFE6AD1C50DA4BEC5 确定。

感谢你的帮助。

示例代替我的域,这是我的配置。

server {
    listen                  8089 ssl http2;
    listen                  [::]:8089 ssl http2;
    server_name             example.com;
    root                    /var/www/example.com/public;

    # SSL
    ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
    #ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_dhparam             /etc/letsencrypt/ssl-dhparams.pem;

    # security
    include                 nginxconfig.io/security.conf;

    location / {
       proxy_set_header Accept-Encoding "";
        try_files $uri $uri/ /index.html;
    }

    # additional config
    include                 nginxconfig.io/general.conf;


}

server {
    listen      8080;
    listen      [::]:8080;
    server_name example.com;
    include     nginxconfig.io/letsencrypt.conf;

    location / {
       return 301 https://example.com$request_uri;
    }
}

忘了说我也用docker,不知道会不会有关系

试试添加这个

if ($host !~* ^(www.example.com)) {
            return 444;

}

这将为没有您的域名的所有请求提供 444 作为响应。

nginx conf 中配置的服务器名称是什么?

http://nginx.org/en/docs/http/server_names.html

如果您输入实际名称,如果未使用该名称,您应该能够使其拒绝请求

在询问之前我想出了这个解决方案,但由于我很新,我不知道这是否是一个好习惯。 添加到我的配置:

server {
   listen       8089;
   listen       [::]:8089;
  server_name my_public_ip or my public_dns => x.x.x.x;    

   location / {
        return 403;
   }
error_page 403 /403.html;
    error_page   501 =500  /50x.html;
    error_page   500 502 503 504  /50x.html;

  location /403.html {
    root      /usr/share/nginx/html;
   # allow all;
  }

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

所以我可以随心所欲地处理它。

在“AWS 世界”中解决此问题的正确方法是在您的 EC2 实例前面使用具有侦听器规则的应用程序负载均衡器,并将您的实际服务器放在 Auto Scaling 组中。

这提供了许多其他好处:

  • 如果您的工作负载无法在至少 2 个可用区之间进行负载平衡,AWS SLA 将不起作用
  • 添加 AWS 生成器 TLS 证书很简单(额外奖励:它将自动更新)
  • 内置一定数量的 DDoS 保护
  • 自动缩放
  • 实例刷新
  • 故障转移

请注意,为了使顶级域名正常工作,最好将实际域迁移到 AWS Route53,或者至少将控制权委托给 AWS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM