我有一个在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相同的内容?
答案 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和正则表达式模式,以指示服务器应阻止用于处理所列选项。