【问题标题】:Nginx, django on ec2 with elastic ip not respondingNginx,ec2上的django,弹性IP没有响应
【发布时间】:2015-01-21 06:36:24
【问题描述】:

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

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

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

注意:最终我会让 django 使用 gunicorn 运行,但只是为了测试它,我只是通过以下方式运行它:manage.py runserver 8004

这是我的入站规则在亚马逊 ec2 上的开放端口的外观快照

可能是因为我在启动实例后正在编辑入站规则?这不就是你应该能够做到的吗?

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;
        }
    }

}

【问题讨论】:

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


    【解决方案1】:

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

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

    我现在只有

    server_name sub.domain.com
    listen 80;
    

    443 也一样。

    【讨论】:

      【解决方案2】:

      如果你想通过 8004 端口从 Internet 访问 django dev 服务器尝试:

      manage.py runserver 0.0.0.0:8004
      

      默认情况下,开发服务器只会监听 127.0.0.1。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-23
        • 2016-11-23
        • 2012-04-18
        • 2013-12-25
        • 2012-08-19
        • 2015-11-21
        • 2013-02-05
        • 2013-09-15
        相关资源
        最近更新 更多