【发布时间】: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