在 EC2 上使用 nginx 设置 django

Posted

技术标签:

【中文标题】在 EC2 上使用 nginx 设置 django【英文标题】:Setting up django with nginx on EC2 【发布时间】:2011-10-08 20:15:42 【问题描述】:

我正在尝试使用 nginx 运行我的 django 应用程序,但是在尝试连接到我的 EC2 IP 时,我收到“连接超时”错误。当我运行时,它会在终端上正确显示 django“deafult”页面

curl 127.0.0.1

但是 EC2 IP 没有运气。公共 IP 给我错误 99(无法分配给请求的地址),私有 IP 在我的浏览器中给我“连接超时”消息。

那么我和/或这个 nginx 配置有什么问题:

user nobody nogroup;
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log;

events 
    worker_connections  1024;
    accept_mutex: on;


http 
    include       mime.types;
    default_type  application/octet-stream;
    access_log /tmp/nginx.access.log combined;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay         on;
    gzip  on;
    gzip_http_version 1.0;
    gzip_proxied any;
    gzip_min_lenght 500;
    gzip_disable "MSIE [1-6]\.";
    gzip_types text/plain text/xml text/css
         text/comma-separated-values
         text/javascript application/x-javascript
         application/atom+xml;
    include /etc/nginx/sites-enabled/*;

这是我启用的网站

upstream app_server 
  server 127.0.0.1:8000 fail_timeout=0;


server 
    listen my_IP:80 default;
    client_max_body_size 4G;
    server_name www.my_domain.pl my_domain.pl;
    keepalive_timeout 5;
    root /home/ubuntu/webapps/my_app;

  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://app_server;
        break;
      
  
  error_page 500 502 503 504 /500.html;
  location = /500.html 
    root /path/to/app/current/public;

我是否需要将最后一行更改为其他内容?还是这个 proxy_pass 东西?

【问题讨论】:

您的 nginx 配置可能没有任何问题。您看到的错误是我遇到的与 EC2 防火墙默认设置相关的错误。进入 EC2 控制面板并打开您要授予访问权限的端口(看起来像 80)。 天哪。为什么我在整个 *** 上总是遇到最愚蠢的问题? xD。谢谢精灵。 不客气!我有几天无法将两个脑细胞揉在一起。我们都这样做。 @Soviet 仅供参考,您不能在浏览器上使用私有 IP,私有 IP 旨在用于 Amazon 服务(如 RDS、其他 EC2 实例等)。 @Soviet:如果这对您有用,请将解决方案作为答案发布并接受。你可以通过这种方式帮助人类;)谢谢。 【参考方案1】:

我使用 Nginx 和 Gunicorn 在 EC2 上创建了我的 Django 站点,这些是我遵循的步骤

easy_install gunicorn
apt-get install nginx

nano /etc/init/site1.conf 并添加

description "site1 web server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec /home/scripts/gunicorn_runserver.sh

在 gunicorn_runserver.sh 中

#!/bin/bash
  set -e
  LOGFILE=/var/log/nginx/site1.log
  NUM_WORKERS=10
  # user/group to run as
  USER=www-data
  GROUP=adm
  cd /home/projects/project_name/
#  source ../../bin/activate
  exec gunicorn_django -w $NUM_WORKERS \
    --user=$USER --group=$GROUP --log-level=error \
    --log-file=$LOGFILE 2>>$LOGFILE

在 Nginx 配置中

upstream app_server_site1 
    server localhost:8000 fail_timeout=0;


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://app_server_site1;
            break;
    

终于

/etc/init.d/nginx restart
service site1 start

关于Nginx+Django+Gunicornhere和Nginx+Django+Fcgihere的详细说明

【讨论】:

以上是关于在 EC2 上使用 nginx 设置 django的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Amazon EC2 上使用 Gunicorn 设置 Nginx 代理缓冲?

在 AWS EC2 实例上使用 nginx 配置 django

django 和 gunicorn 在 docker 容器内运行时,无法在 ec2 上使用 nginx 提供静态文件

HTTPS 协议不适用于 ec2 实例上的 django 和 nginx

如何使用仅允许 HTTPS 连接的 nginx 和 uwsgi 在 ec2 实例中部署 django 站点?

在 Amazon EC2 微型实例上从 Apache 切换后 uWSGI/nginx/Django 性能不佳