Menyebarkan Aplikasi Django dengan Nginx, Apache, mod_wsgi

12

Saya memiliki aplikasi Django yang dapat berjalan secara lokal menggunakan lingkungan pengembangan standar. Saya ingin sekarang memindahkan ini ke EC2 untuk produksi. Dokumentasi Django menyarankan berjalan dengan apache dan mod_wsgi, dan menggunakan nginx untuk memuat file statis.

Saya menjalankan Ubuntu 12,04 pada kotak Ec2. Aplikasi Django saya, "ddt", berisi subdirektori "apache" dengan 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()

Saya telah menginstal mod_wsgi dari apt. Apache / httpd.conf saya berisi

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>

Di bawah apache2 / situs-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>

Jika saya benar, 3 file di atas ini seharusnya memungkinkan aplikasi Django saya berjalan di port 8080 .

Saya memiliki file nginx / proxy.conf berikut

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;

Di bawah nginx / situs-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/;
  }
}      

Jika saya benar kedua file ini harus mengatur nginx untuk mengambil permintaan pada port HTTP 80, tetapi kemudian mengarahkan permintaan ke apache yang menjalankan aplikasi django pada port 8080. Jika saya pergi ke mysite.com, yang saya lihat adalah Selamat datang di Nginx !

Ada saran untuk cara men-debug ini?

JCWong
sumber
Bisakah Anda memposting file nginx.conf Anda? ada beberapa masalah dengan nginx tidak mengaktifkan host Anda, mungkin termasuk baris seperti include /etc/nginx/conf.d/*.conf; dan file konfigurasi Anda bukan .conf. Bagaimanapun jika Anda melihat halaman selamat datang nginx berarti bahwa konfigurasi Anda tidak diterapkan.
Andrei Mikhaltsov
Untuk pengguna di masa depan, saya harus menyebutkan bahwa dengan munculnya mod_wsgi-express, kita tidak perlu melakukan apa pun konfigurasi Apache, tidak ada definisi VirtualHost, tidak ada dalam conf dan situs folder. Semuanya dilakukan dengan cara yang dioptimalkan dengan baik oleh mod_wsgi-express secara otomatis. Lihat posting blog Graham untuk detailnya
Anupam

Jawaban:

1

harap dicatat, bahwa Anda harus menggunakan www.mysite.com atau mysite.com dalam permintaan Anda (sebagaimana didefinisikan dalam file konfigurasi):

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

tetapi sepertinya, Anda meminta situs dengan localhost atau dengan alamat IP

Sergres
sumber
0

Pertama-tama pastikan Anda dapat mengakses aplikasi Anda di 127.0.0.1:8080 & silakan memposting konten nginx_error.log. Coba Salin tempel berikut file conf nginx & periksa apakah berfungsi. Saya menggunakan konfigurasi yang sama untuk aplikasi python saya.

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/*;

}
yogesh.panchal
sumber
0

Di konfigurasi NGINX Anda, Anda telah menyertakan path ke file conf ( /etc/nginx/proxy.conf) di dalam a location. Saya percaya bahwa itu milik luar .

Dan Dye
sumber
0

Pertama, mohon untuk cinta semua yang suci, jangan gunakan nginx dan httpd. Ini akan menyebalkan untuk debug.

Kedua, tidak ada dokumen yang pernah saya lihat yang merekomendasikan pengaturan semacam ini.

Gunakan apache atau nginx, ini akan menghilangkan setengah dari masalah Anda.

Periksa juga nginx.conf Anda jika tidak termasuk file dari dir lain, yang mungkin memiliki vhost global yang menimpa Anda.

Anda juga harus mengedit posting Anda untuk menghapus domain dalam konfigurasi apache dekat params WSGI, karena Anda saat ini membocorkan pengaturan produksi Anda.

Hapus situs lain dari situs yang diaktifkan.

Gothrek
sumber