Розгортання програми Django з Nginx, Apache, mod_wsgi


13

У мене є програма 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 встановлений з apt. Мій апарат / 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 !

Будь-яка порада, як це налагодити?


Чи можете ви опублікувати файл nginx.conf? є певна проблема з тим, що nginx не вмикає вашого хоста, можливо, рядок включати, як include /etc/nginx/conf.d/*.conf; і ваш конфігураційний файл не є .conf. У будь-якому випадку, якщо ви бачите привітальну сторінку nginx, означає, що ваша конфігурація не застосовується.
Андрій Михальцов

Для майбутніх користувачів я повинен зазначити, що з появою mod_wsgi-express нам не потрібно робити жодної конфігурації Apache, жодних визначень VirtualHost, нічого в папках конф та сайтів. Все це зроблено добре оптимізованим способом mod_wsgi-express автоматично. Детальніше дивіться у блогах Грем
Anupam

Відповіді:


1

зауважте, що ви повинні використовувати www.mysite.com або mysite.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, якщо він не включає файли інших dirs, які можуть мати глобальний vhost, який перекриває ваш.

Ви також повинні відредагувати свою публікацію, щоб видалити домен у конфігурації apache поблизу параметрів WSGI, оскільки ви зараз протікаєте у виробничих налаштуваннях.

Видаліть інші сайти з включених сайтів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.