Nginx, Apache, mod_wsgi를 사용하여 Django App 배포


13

표준 개발 환경을 사용하여 로컬로 실행할 수있는 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를 설치했습니다. 내 아파치 /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 / 사이트 사용 가능

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

이 두 파일이 올 바르면 HTTP 포트 80에서 요청을 받도록 nginx를 설정해야하지만 포트 8080에서 django 앱을 실행하는 아파치로 요청을 보내야합니다. mysite.com으로 이동하면 Nginx에 오신 것을 환영합니다 !

이것을 디버깅하는 방법에 대한 조언이 있습니까?


nginx.conf 파일을 게시 해 주시겠습니까? nginx에 호스트를 활성화하지 않는 데 문제가 있습니다. include 줄은 include /etc/nginx/conf.d/*.conf와 같습니다. 구성 파일이 .conf가 아닙니다. nginx 시작 페이지가 표시되면 구성이 적용되지 않았 음을 의미합니다.
Andrei Mikhaltsov

향후 사용자의 경우, 내가의 도래와 함께 그 언급해야 mod_wsgi에 익스프레스, 우리는 할 필요가 없습니다 어떤 conf의 및 사이트 폴더에 아파치 설정, 아니 가상 호스트 정의, 아무것도. 모든 것은 mod_wsgi-express에 의해 자동으로 잘 최적화 된 방식으로 이루어집니다. 자세한 내용은 Graham의 블로그 게시물을 참조하십시오
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 파일 다음에 붙여 넣기를 시도하고 작동하는지 확인하십시오. 파이썬 응용 프로그램에 동일한 구성을 사용하고 있습니다.

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안에 conf 파일 ( ) 의 경로를 포함 시켰습니다 location. 나는 그것이 외부에 속한다고 믿는다 .


0

첫째, 거룩한 모든 것을 사랑하십시오, nginx와 httpd를 모두 사용하지 마십시오. 이것은 엉덩이를 디버깅하는 데 어려움이 될 것입니다.

둘째, 문서의 어느 곳에서도 이러한 설정을 권장하는 것을 보지 못했습니다.

아파치 또는 nginx를 사용하면 문제의 절반이 제거됩니다.

또한 nginx.conf에 다른 디렉토리의 파일이 포함되어 있지 않은지 확인하십시오.

또한 현재 프로덕션 설정이 유출되고 있으므로 WSGI 매개 변수 근처의 아파치 구성에서 도메인을 제거하도록 게시물을 편집해야합니다.

사이트 사용 가능 사이트에서 다른 사이트를 제거하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.