提供不同内容的IPv4公用IP和公用DNS(IPv4)

时间:2018-11-08 02:10:50

标签: amazon-web-services nginx amazon-ec2

我有一个在AWS EC2实例上运行的Django-nginx-gunicorn应用程序。我已经成功配置了nginx,并且可以在公共IP上获取所有内容。但是,在AWS提供的外部DNS主机名上却没有发生相同的情况(例如:ec2-203-0-113-25.compute-1.amazonaws.com)。我的仍然在渲染nginx默认页面。公用IP x.x.x.x正在提供Django App内容。

这是nginx.conf的<script src="{{asset('lib/js/config.js')}}"></script>部分:

server

如何获取默认DNS,以提供与公共IP相同的内容?

2 个答案:

答案 0 :(得分:1)

从您的配置中删除服务器名称:

    server_name X.X.X.X

更改:

    listen 80;

收件人:

    listen *:80;

检查/ etc / nginx / sites-available和/或/ etc / nginx / sites-enabled,应该有一个默认配置文件(默认)。我的猜测是,它保留了DNS指向的默认配置,并在/ var / www / html下呈现html。

注释掉该文件中的内容...然后,重新启动nginx:

    service nginx restart

这里发生的事情是,一个配置告诉nginx绑定到端口80,但查找您的公共IP的标头,另一个配置(默认配置)可能告诉它使用DNS作为服务器名称。通过绑定到没有服务器名称的*:80,您可以告诉nginx在所有IP地址上为您的配置提供服务,而不管服务器名称标头如何。

我希望有帮助。

答案 1 :(得分:0)

尝试以下操作:

server {
        listen 80 default_server;
        server_name X.X.X.X; # Has the Public IP address here
        access_log /var/log/nginx-access.log;
        error_log /var/log/nginx-error.log;
        root /home/ubuntu/project/ToDo-application/;
        location /static {
                root /home/ubuntu/ToDo-application/frontend;
        }

        location / {
                include /etc/nginx/mime.types;
                default_type application/octet-stream;
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

根据官方Nginx documentation,使用default_server可以告诉Nginx,特定的server定义应该是给定端口的默认侦听器。

还值得注意的是,您可以在一条server_name行中包含多个域名,IP和正则表达式模式,以指示服务器应阻止用于处理所列选项。