Triển khai ứng dụng Django với Nginx, Apache, mod_wsgi


12

Tôi có một ứng dụng django có thể chạy cục bộ bằng môi trường phát triển tiêu chuẩn. Bây giờ tôi muốn chuyển cái này sang EC2 để sản xuất. Tài liệu django đề nghị chạy với apache và mod_wsgi và sử dụng nginx để tải các tệp tĩnh.

Tôi đang chạy Ubuntu 12.04 trên hộp Ec2. Ứng dụng Django của tôi, "ddt", chứa thư mục con "apache" với 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()

Tôi đã cài đặt mod_wsgi từ apt. Apache / httpd.conf của tôi chứa

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>

Theo apache2 / trang web được kích hoạt

<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>

Nếu tôi đúng, 3 tệp trên đây sẽ cho phép chính xác ứng dụng django của tôi chạy trên cổng 8080 .

Tôi có tệp nginx / proxy.conf sau đây

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;

Dưới nginx / trang web kích hoạt

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

Nếu tôi sửa hai tệp này thì nên thiết lập nginx để nhận yêu cầu trên cổng HTTP 80, nhưng sau đó yêu cầu trực tiếp đến apache đang chạy ứng dụng django trên cổng 8080. Nếu tôi truy cập mysite.com, tất cả những gì tôi thấy là Chào mừng bạn đến với Nginx !

Bất kỳ lời khuyên cho làm thế nào để gỡ lỗi này?


Bạn có thể vui lòng gửi tập tin nginx.conf của bạn? có một số vấn đề với nginx không cho phép máy chủ của bạn, có thể bao gồm dòng giống như bao gồm /etc/nginx/conf.d/*.conf; và tập tin cấu hình của bạn không phải là. Bất cứ cách nào nếu bạn thấy trang chào mừng nginx có nghĩa là cấu hình của bạn không được áp dụng.
Andrei Mikhaltsov

Đối với người dùng trong tương lai, tôi nên đề cập rằng với sự ra đời của mod_wsgi-express, chúng ta không cần thực hiện bất kỳ cấu hình Apache nào , không có định nghĩa Virtualhost, không có gì trong các thư mục conf và trang web. Tất cả được thực hiện theo cách được tối ưu hóa tốt bởi mod_wsgi-express. Xem bài đăng trên blog của Graham để biết chi tiết
Anupam

Câu trả lời:


1

xin lưu ý rằng bạn nên sử dụng www.mysite.com hoặc mysite.com trong các yêu cầu của bạn (như được xác định trong tệp cấu hình):

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

nhưng có vẻ như, Bạn đang yêu cầu trang web của localhost hoặc theo địa chỉ IP


0

Trước hết, hãy đảm bảo bạn có thể truy cập ứng dụng của mình trên 127.0.0.1:8080 và vui lòng đăng nội dung của nginx_error.log. Hãy thử Sao chép dán sau tập tin nginx conf và kiểm tra xem nó có hoạt động không. Tôi đang sử dụng cùng một cấu hình cho ứng dụng python của tôi.

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

Trong cấu hình NGINX của bạn, bạn đã bao gồm đường dẫn đến tệp conf ( /etc/nginx/proxy.conf) bên trong a location. Tôi tin rằng nó thuộc về bên ngoài .


0

Đầu tiên, xin vui lòng vì tình yêu của tất cả những gì là thánh, đừng sử dụng cả nginx và httpd. Đây sẽ là một nỗi đau trong ass để gỡ lỗi.

Thứ hai, không nơi nào trong các tài liệu tôi thấy rằng họ đề xuất loại thiết lập này.

Sử dụng apache hoặc nginx, điều này sẽ loại bỏ một nửa vấn đề của bạn.

Ngoài ra, hãy kiểm tra nginx.conf của bạn nếu nó không bao gồm các tệp từ các thư mục khác, có thể có một vhost toàn cầu ghi đè lên tệp của bạn.

Bạn cũng nên chỉnh sửa bài đăng của mình để xóa tên miền trong cấu hình apache gần các thông số WSGI, vì bạn hiện đang rò rỉ thiết lập sản xuất của mình.

Xóa các trang web khác khỏi kích hoạt trang web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.