我有一个Django的应用程序,可以使用标准的开发环境在本地运行。 现在我想把它移到EC2进行生产。 django文档build议使用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>
如果我是正确的,这三个文件应该正确地允许我的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 / sites-enabled下
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 !
任何build议如何debugging呢?
首先请确保您可以在127.0.0.1:8080上访问您的应用程序,并请发布nginx_error.log的内容。 尝试复制粘贴下面的nginx conf文件并检查它正在工作。 我为我的Python应用程序使用相同的configuration。
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/*; }
请注意,你应该使用http://www.mysite.com或mysite.com在您的请求(如它在configuration文件中定义):
server { listen 80; server_name www.mysite.com mysite.com;
但看起来像,你正在通过本地或IP地址请求网站
在你的NGINXconfiguration中,你已经包含了一个location内的conf文件的path( /etc/nginx/proxy.conf )。 我相信它属于外面 。