使用Nginx,Apache,mod_wsgi部署Django应用


13

我有一个django应用程序,可以使用标准开发环境在本地运行。我现在想将其移至EC2进行生产。django文档建议使用apache和mod_wsgi运行,并使用nginx加载静态文件。

我在Ec2机器上运行Ubuntu 12.04。我的Django应用“ ddt”包含一个带有ddt.wsgi的子目录“ apache”

import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/usr/lib/python2.7/site-packages/django/')
sys.path.append('/home/jeffrey/www/ddt/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ddt.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我从apt安装了mod_wsgi。我的apache / httpd.conf包含

NameVirtualHost *:8080

WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
WSGIPythonPath /home/jeffrey/www/ddt

<Directory /home/jeffrey/www/ddt/apache/>
<Files ddt.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>

在apache2 / sites-enabled下

<VirtualHost *:8080>
ServerName www.mysite.com
ServerAlias mysite.com
<Directory /home/jeffrey/www/ddt/apache/>
    Order deny,allow
    Allow from all
</Directory>
LogLevel warn
ErrorLog  /home/jeffrey/www/ddt/logs/apache_error.log
CustomLog /home/jeffrey/www/ddt/logs/apache_access.log combined
WSGIDaemonProcess datadriventrading.com user=www-data group=www-data threads=25
WSGIProcessGroup datadriventrading.com
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
</VirtualHost>

如果我是正确的,则上面的这3个文件应该正确地允许我的django应用程序在端口8080上运行。

我有以下nginx / proxy.conf文件

proxy_redirect              off;
proxy_set_header            Host $host;
proxy_set_header            X-Real-IP $remote_addr;
proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size        10m;
client_body_buffer_size     128k;
proxy_connect_timeout       90;
proxy_send_timeout          90;
proxy_read_timeout          90;
proxy_buffer_size           4k;
proxy_buffers               4 32k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

在启用nginx /站点的情况下

server {
  listen 80;
  server_name www.mysite.com mysite.com;
  access_log /home/jeffrey/www/ddt/logs/nginx_access.log;
  error_log /home/jeffrey/www/ddt/logs/nginx_error.log;
  location / {
    proxy_pass http://127.0.0.1:8080;
    include     /etc/nginx/proxy.conf;
  }
  location  /media/ {
   root /home/jeffrey/www/ddt/;
  }
}      

如果我是正确的话,这两个文件应将nginx设置为在HTTP端口80上接收请求,然后将请求定向到在端口8080上运行django应用程序的apache。如果我转到mysite.com,我看到的只是欢迎使用Nginx !

任何有关如何调试此建议?


您可以发布您的nginx.conf文件吗?nginx无法启用主机存在一些问题,也许include行就像include /etc/nginx/conf.d/*.conf; 并且您的配置文件不是.conf。无论如何,如果看到nginx欢迎页面,则意味着您的配置未应用。
Andrei Mikhaltsov 2012年

对于将来的用户,我应该提到,随着mod_wsgi-express的出现,我们不需要执行任何 Apache配置,无需VirtualHost定义,无需在conf和sites文件夹中进行任何操作。通过mod_wsgi-express自动以一种优化的方式完成所有操作。有关详细信息,请参见Graham的博客文章
Anupam'7

Answers:


1

请注意,您应在请求中使用www.mysite.commysite.com(如配置文件中所定义):

server {
  listen 80;
  server_name www.mysite.com mysite.com;

但看起来,您正在通过localhost或IP地址请求站点


0

首先,请确保您可以在127.0.0.1:8080上访问您的应用程序,并发布nginx_error.log的内容。尝试在nginx conf文件后复制粘贴并检查其是否有效。我正在为我的python应用程序使用相同的配置。

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";


    ##
    # Virtual Host Configs
    ##

    server {
        listen 80;

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://127.0.0.1:8080;
        }

    location /static {
        root /home/ubuntu/www/myproject/webapp;
    }

    }


    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

}

0

在NGINX配置中,您已将conf文件(/etc/nginx/proxy.conf)的路径包括在内location。我相信它属于外面的


0

首先,请热爱所有神圣的事物,不要同时使用nginx和httpd。这将是调试工作中的一个难题。

其次,我在文档中都没有发现他们推荐这种设置。

使用apache或nginx,这将消除一半的问题。

另外,如果您的nginx.conf不包括来自其他目录的文件,则该文件可能具有覆盖您的全局虚拟主机。

您还应该编辑帖子,以删除WSGI参数附近的apache配置中的域,因为您当前正在泄漏生产设置。

从启用站点的站点中删除其他站点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.