web-dev-qa-db-ja.com

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

Djangoアプリは標準開発環境を使用してローカルで実行できます。これを本番用にEC2に移動したいと思います。Djangoドキュメントでは、 Apacheとmod_wsgi、および静的ファイルのロードにnginxを使用します。

Ec2ボックスでUbuntu 12.04を実行しています。私のDjango app、 "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 /サイト対応の下

<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アプリがポート808で実行できるようにするはずです。

私は次の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にリクエストを送信します。mysiteに移動した場合。 com、私が見るのはNginxへようこそ!

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

13
JCWong

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

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

しかし、ローカルホストまたはIPアドレスでサイトをリクエストしているようです

1
sergres

まず、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
yogesh.panchal

NGINX構成には、confファイルへのパスが含まれています(/etc/nginx/proxy.conflocation内。私はそれが属すると信じています外部

0
Dan Dye

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

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

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

また、他のdirからのファイルが含まれていない場合は、nginx.confを確認してください。これには、自分のファイルをオーバーライドするグローバル仮想ホストが含まれている可能性があります。

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

サイト対応から他のサイトを削除します。

0
Gothrek