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へようこそ!
これをデバッグする方法について何かアドバイスはありますか?
リクエストではwww.mysite.comまたはmysite.comを使用する必要があることに注意してください(構成ファイルで定義されているとおり):
server {
listen 80;
server_name www.mysite.com mysite.com;
しかし、ローカルホストまたはIPアドレスでサイトをリクエストしているようです
まず、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/*;
}
NGINX構成には、confファイルへのパスが含まれています(/etc/nginx/proxy.conf
)location
内。私はそれが属すると信じています外部。
まず、神聖なすべての愛のために、nginxとhttpdの両方を使用しないでください。これは、デバッグするお尻の痛みになるでしょう。
第二に、ドキュメントのどこにも、この種のセットアップを推奨しているのを見たことはありません。
Apacheまたはnginxを使用すると、問題の半分が解消されます。
また、他のdirからのファイルが含まれていない場合は、nginx.confを確認してください。これには、自分のファイルをオーバーライドするグローバル仮想ホストが含まれている可能性があります。
現在、本番環境の設定をリークしているため、投稿を編集して、WSGI paramsの近くのApache configでドメインを削除する必要もあります。
サイト対応から他のサイトを削除します。