У меня есть приложение django, которое можно запускать локально с использованием стандартной среды разработки. Теперь я хочу переместить это в EC2 для производства. В документации django предлагается работать с apache и mod_wsgi, а также использовать nginx для загрузки статических файлов.
Я запускаю Ubuntu 12.04 на Ec2. Мое приложение Django, «ddt», содержит подкаталог «apache» с ddt.wsgi.
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()
У меня установлен 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 / с поддержкой сайтов
<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, а затем прямые запросы к apache, на котором запущено приложение django на порту 8080. Если я перейду на mysite.com, все, что я вижу, это Добро пожаловать в Nginx !
Любой совет, как это отладить?
обратите внимание, что вы должны использовать www.mysite.com или mysite.com в ваших запросах (как это определено в файле конфигурации):
server {
listen 80;
server_name www.mysite.com mysite.com;
но похоже, вы запрашиваете сайт по локальному хосту или по IP-адресу
Во-первых, во имя всего святого, не используйте одновременно nginx и httpd. Это будет головная боль для отладки.
Во-вторых, я нигде в документации не видел, чтобы они рекомендовали такую установку.
Используйте apache или nginx, это устранит половину ваших проблем.
Также проверьте свой nginx.conf, если он не включает файлы из других каталогов, которые могут иметь глобальный виртуальный хост, который переопределяет ваш.
Вы также должны отредактировать свое сообщение, чтобы удалить домен в конфигурации apache рядом с параметрами WSGI, поскольку в настоящее время происходит утечка вашей производственной установки.
Удалите другие сайты с включенных сайтов.
В вашей конфигурации NGINX вы включили путь к файлу conf (/etc/nginx/proxy.conf
) внутри location
. Я считаю, что это принадлежит вне.
Прежде всего, убедитесь, что вы можете получить доступ к своему приложению на 127.0.0.1:8080 и, пожалуйста, разместите содержимое nginx_error.log. Попробуйте скопировать и вставить следующий файл конфигурации nginx и убедитесь, что он работает. Я использую ту же конфигурацию для своего приложения 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/*;
}