2011-02-03 38 views
8

Tôi đã thiết lập ứng dụng Django của mình trên Apache + mod_wsgi. Để phục vụ các tệp tĩnh tôi đang sử dụng Nginx, như được đề xuất trên trang web dự án của Django. http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/Cấu hình cho Django, Apache và Nginx

Apache đang chạy trên cổng 8081 và nginx ở cổng 80. Bây giờ một số người cho rằng cấu hình của tôi sai và tôi nên đảo ngược vai trò của Apache và Nginx. Tôi không chắc tại sao lại như thế. Và nếu thực sự cấu hình của tôi là sai, tại sao trang web django đề nghị phương pháp sai?

+0

Thật an toàn khi gắn bó với Nginx trên cổng 80. Chăm sóc để chia sẻ nơi bạn tìm thấy mọi người nói apache là proxy ngược lại tốt hơn? Điểm chuẩn là chìa khóa. –

+0

Trong khi tôi đang thiết lập ứng dụng của mình, tôi đã đăng câu hỏi trên http://stackoverflow.com/questions/4868213/apache-reverseproxy-not-working-noob/4870186 và sf http://serverfault.com/questions/229842/apache-reverseproxy-to-nginx. Và tôi nhận được phản hồi tương tự trên cả hai trang. – Neo

Trả lời

12

Tài liệu django bạn đã liên kết không đề xuất bạn sử dụng apache làm proxy ngược. Họ chỉ đơn giản đề nghị bạn sử dụng một máy chủ web riêng biệt, vì vậy tôi muốn nói rằng các tài liệu không rõ ràng về chủ đề đó - chúng không đề xuất bất cứ điều gì sai.

Câu trả lời ban đầu của tôi giả sử bạn có nginx làm proxy ngược vì cổng 80 là cổng HTTP, cổng được sử dụng khi trình duyệt cố truy cập url không có cổng được chỉ định.

Có rất nhiều hướng dẫn hoàn chỉnh để thiết lập nginx + apache thông qua tìm kiếm google nhanh chóng nhưng đây là ý chính cho việc thiết lập nginx:

location/{ 
     # proxy/requests to apache running django on port 8081 
     proxy_pass   http://127.0.0.1:8081/; 
     proxy_redirect  off; 
    } 

location /media/ { 
     # serve static media directly from nginx 
     root /srv/anuva_project/www/; 
     expires 30d; 
     break; 
    } 

Tất cả bạn cần làm là loại bỏ các dòng proxy từ apache của bạn cấu hình và thêm các câu lệnh proxy vào nginx.conf của bạn.

Nếu bạn thực sự muốn phục vụ trang web của mình từ cổng 8081, bạn có khả năng có thể nginx nghe trên cổng 8081 và có apache nghe trên một cổng khác.

Vấn đề là, apache nằm trong một số cổng tối nghĩa, chỉ phục vụ các yêu cầu được gửi đến từ nginx, trong khi việc phân phát tệp tĩnh được xử lý bởi nginx.

+0

Tôi thật sự bối rối ở đây. Hoặc có lẽ tôi đã có toàn bộ khái niệm máy chủ sai. Kể từ khi Django đang chạy trên Apache, để phục vụ phương tiện truyền thông tĩnh tôi phải đảo ngược proxy thông qua Apache để đạt nginx. Vì vậy, tôi thực sự sử dụng proxy ngược trong tập tin cấu hình apache. Ví dụ: ứng dụng chính của tôi là: http: //enpass.djangoserver: 8081/tài khoản. Trong khi trong các mẫu django, tôi lấy các tập tin tĩnh từ nginx. Vì vậy, tôi đoán apache là ở phía trước (và không nginx, như u nói trong câu trả lời ur). Hoặc tôi đã có khái niệm của tôi lộn ngược. – Neo

+0

Cổng 80 là cổng HTTP, vì vậy hãy truy cập example.com sẽ là bất kỳ máy chủ nào đang nghe cổng 80. Trong trường hợp của bạn, đó là nginx. Nginx sau đó sẽ yêu cầu proxy không đến thư mục phương tiện truyền thông của bạn để apache trên 8081 –

+0

"Nginx sau đó sẽ yêu cầu proxy không vào thư mục phương tiện truyền thông của bạn để apache trên 8081" - Bạn có thể xây dựng. Tôi là một noob xa như apache/nginx có liên quan. Và chắc chắn, tôi đã không cấu hình Nginx cho bất kỳ loại proxy nào. – Neo