关于Nginx的Django需要帮助

时间:2017-11-10 22:45:59

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

我正在尝试将我的网站部署到aws ec2。它在python / django中,我想学习如何自己部署网站。我在使用aws的EBS时遇到了一些问题,所以首先我想知道如何手动执行此操作。 我决定使用gunicorn和nginx。

我可以在虚拟环境中使用gunicorn运行网站,我在/home/ec2-user/gunicorn_start.bash中创建了以下脚本:

#!/bin/bash

NAME="davidbiencom"                                  # Name of the 
application
DJANGODIR=/home/ec2-user/davidbien             # Django project directory
SOCKFILE=/home/ec2-user/virtual/run/gunicorn.sock
USER=ec2-user                                     
GROUP=ec2-user                                    
NUM_WORKERS=3                                     
DJANGO_SETTINGS_MODULE=davidbiencom.settings             
DJANGO_WSGI_MODULE=davidbiencom.wsgi                     

echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $DJANGODIR
source /home/ec2-user/virtual/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do$
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-

这很好,我相信没有错误。 接下来我安装nginx并启动该服务。当我收到欢迎页面时,我确认它正在运行。接下来我执行以下操作:

  1. 转到/etc/nginx/nginx.conf并将以下内容添加到http

    包括/ etc / nginx / sites-enabled / * .conf;

  2. 然后我在/ etc / nginx / sites-available和sites-enabled中创建了两个文件夹。 我创建了一个文件davidbien.conf并在其中输入以下内容(UPDATED):

    upstream app_server {
    # fail_timeout=0 means we always retry an upstream even if it failed
    # to return a good HTTP response
    
    # for UNIX domain socket setups
    server unix:/home/ec2-user/virtual/run/gunicorn.sock fail_timeout=0;
    
    # for a TCP configuration
    # server 192.168.0.7:8000 fail_timeout=0;
    }
    
    server {
    listen 80;
    server_name 35.176.185.50;
    
    #Max upload size
    client_max_body_size 75M;   # adjust to taste
    
    location /static/ {
        root /home/ec2-user/davidbien/static;
    }
    
    location / {
      # checks for static file, if not found proxy to app
      try_files $uri @proxy_to_app;
    }
    
    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      # enable this if and only if you use HTTPS
      # proxy_set_header X-Forwarded-Proto https;
      proxy_set_header Host $http_host;
      # we don't want nginx trying to do something clever with
      # redirects, we set the Host: header above already.
      proxy_redirect off;
      proxy_pass http://app_server;
      }
    }
    

    我保存此文件并运行以下命令:

    ln -s /etc/nginx/sites-available/davidbiencom.conf /etc/nginx/sites-enabled/davidbiencom.conf
    

    完成此操作后,我重新启动nginx,当我输入ip地址时,我收到502错误的网关错误。

    这里有什么问题? 谢谢。

    编辑: 这是来自var / log / nginx / error.log

    的错误日志
    2017/11/10 22:26:27 [error] 27620#0: *1 open() "/usr/share/nginx/html/favicon.iicon.ico" failed (2: No such file or directory), client: 2.96.149.96, server: $localhost, request: "GET /favicon.ico HTTP/1.1", host: "35.176.185.50",referrer: "http://35.176.185.50/"
    

    编辑2: 这是etc / nginxnginx / conf文件:

    http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log  /var/log/nginx/access.log  main;
    
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    
    #include             /etc/nginx/mime.types;
    #default_type        application/octet-stream;
    
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/sites-enabled/*.conf;
    
    index   index.html index.htm;
    
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        location / {
    
    # redirect server error pages to the static page /40x.html
        #
        error_page 404 /404.html;
            location = /40x.html {
        }
    
        # redirect server error pages to the static page /50x.html
        #
    error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    

1 个答案:

答案 0 :(得分:1)

你告诉nginx它必须将请求转发到127.0.0.1:3031但是从我从脚本中看到的启动gunicorn,gunicorn绑定到套接字,如果你将在127.0启动你的gunicorn worker。 0.1:3031它应该工作