Nginx,django对ec2的弹性ip无响应

时间:2014-11-23 14:01:02

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

我的亚马逊ec2实例存在问题。我无法从浏览器访问在端口8004上运行的django应用程序。

我在amazon ec2上安装了一个实例,安装了django和nginx。这是在ubuntu trusty 14.04上运行的。我在外部dns-nameserver上有一个域名,我已正确地将该域名指向我的amazon ec2实例的公共弹性ip。当我对服务器执行ping操作时,它会显示公共IP。

我以前见过类似的线程,在大多数情况下,问题都是因为没有为特定端口添加防火墙规则,即它们不对外界开放。在我的情况下,我确保在创建实例时端口22,80和443是打开的。我甚至打开了端口8000 - 8100。

注意:最终我将使用gunicorn运行django,但只是为了测试它我只是通过执行来运行它:manage.py runserver 8004

以下是亚马逊ec2上开放端口的入站规则的快照 enter image description here

可能是因为我在启动实例后正在编辑入站规则吗?这不是你想要做的吗?

Nginx运行没有问题,我将在下面发布我的配置。我不知道为什么这不起作用。我已经跟踪了我在这个主题上发现的任何线索,似乎没有任何解决方法。

更新:我现在可以确认我可以直接通过ip访问我的django网站了 IP:8004。所以很明显这不是端口的问题,但可能与nginx配置或我的DNS设置有关。

我的nginx配置(我已经用x替换了ip,而用sub.domain.com取代了域。然后我尝试从sub.domain.com访问该网站)

upstream docko_server {
    server 127.0.0.1:8004 fail_timeout=0;
}

server {
    server_name sub.domain.com;
    listen xx.xx.xx.xxx:80;
    return 303 https://$host$request_uri;
}

# HTTPS server
#
server {
    listen xx.xx.xx.xxx:443;
    server_name sub.domain.com;

    ssl on;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.key;

    ssl_session_timeout 5m;

    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;

    client_max_body_size 25M;

    access_log /webapps/docko/logs/nginx-access.log;
    error_log /webapps/docko/logs/nginx-error.log;

    location /assets/ {
        alias /webapps/docko/docko/staticfiles/;
    }


    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


        proxy_set_header Host $http_host;

        proxy_redirect off;


        if (!-f $request_filename) {
            proxy_pass http://docko_server;
            break;
        }
    }

}

2 个答案:

答案 0 :(得分:1)

如果要通过端口8004从Internet访问django dev服务器,请尝试:

manage.py runserver 0.0.0.0:8004

dev服务器默认只在127.0.0.1上监听。

但是,如果通过Nginx访问开发服务器,即连接到your.domain.com:80,则不需要这样做。在这种情况下,Nginx将充当代理,将请求传递给开发服务器。

顺便说一句,您可以在启动实例后编辑现有安全组的规则,这非常有效。

答案 1 :(得分:0)

为了回答我自己的问题,我成功了,没有分配弹性ip,只是只是在端口80,443上听。所以在我的nginx conf而不是这个。

server_name sub.domain.com;
listen xx.xx.xx.xxx:80;

我现在只有

server_name sub.domain.com
listen 80;
443也是如此。