Nginx、Apache、mod_wsgiを使用したDjangoアプリのデプロイ


12

標準の開発環境を使用してローカルで実行できる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 / 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/;
  }
}      

私が正しい場合、これらの2つのファイルはHTTPポート80でリクエストを取得するためにnginxをセットアップする必要がありますが、ポート8080でdjangoアプリを実行しているapacheにリクエストを送信します。 !

これをデバッグする方法についてのアドバイスはありますか?


nginx.confファイルを投稿してください。nginxがホストを有効にしないという問題があります。おそらくinclude行はinclude /etc/nginx/conf.d/*.confのようなものです。構成ファイルは.confではありません。nginxのウェルカムページが表示される場合は、設定が適用されていないことを意味します。
アンドレイミハールツォフ

将来のユーザーのために、私はmod_wsgiの特急の出現で、私たちが行う必要がないことを言及する必要があります任意の Apacheの設定ファイル、なしのVirtualHostの定義、CONFおよびサイトフォルダ内の何を。そのすべては、mod_wsgi-expressによって最適化された方法で自動的に行われます。詳細については、グラハムのブログ投稿を参照してください
Anupam

回答:


1

要求でwww.mysite.com またはmysite.comを使用する必要があることに注意してください(構成ファイルで定義されているとおり)。

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

しかし、ローカルホストまたは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の設定で、/etc/nginx/proxy.conf内にconfファイル()へのパスを含めましたlocationにあると思う。


0

まず、すべての聖なるものへの愛のために、nginxとhttpdの両方を使用しないでください。これは、デバッグする上で苦痛になるでしょう。

第二に、ドキュメントのどこにも、彼らがこの種のセットアップを推奨しているのを見たことがありません。

Apacheまたはnginxを使用すると、問題の半分が解消されます。

また、他のディレクトリからのファイルが含まれていない場合は、nginx.confを確認してください。これには、あなたのものを上書きするグローバルvhostが含まれている可能性があります。

現在、本番環境の設定をリークしているため、投稿を編集して、WSGI paramsの近くのapache configでドメインを削除する必要もあります。

有効なサイトから他のサイトを削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.