2012-02-28 34 views
6

Khi tôi cố gắng truy cập trang web Django của tôi tại http://www.satoshi.example.com/mysite Tôi nhận được 503 Service Temporary Unavailable.Django mod_wsgi apache

Apache lỗi log nói

[Tue Feb 28 07:11:09 2012] [error] [client 10.0.0.202] (13)Permission denied: mod_wsgi (pid=4756): Unable to connect to WSGI daemon process 'django' on '/etc/httpd/logs/wsgi.17555.4.1.sock' after multiple attempts. 

Apache đúng tải mod_wsgi

[email protected]:~/html/mysite# apachectl -M | grep wsgi 
wsgi_module (shared) 
Syntax OK 

Apache tải /var/www/html/mysite/apache/apache_django_wsgi.conf đó là

WSGIDaemonProcess django 
WSGIProcessGroup django 

<Directory "/var/www/html/mysite"> 
Order allow,deny 
Options Indexes 
Allow from all 
IndexOptions FancyIndexing 
</Directory> 

WSGIScriptAlias /mysite "/var/www/html/mysite/apache/django.wsgi" 

<Directory "/var/www/html/mysite/apache"> 
Order deny,allow 
Allow from all 
</Directory> 

Đây là /var/www/html/mysite/apache/django.wsgi

import os 
import sys 

paths = [ '/var/www/html/mysite', 
      '/usr/lib/python2.6/site-packages/', 
] 

for path in paths: 
    if path not in sys.path: 
     sys.path.append(path) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

Một điều kỳ lạ là tôi phát hiện ra tôi thậm chí không cần phải LoadModule wsgi_module modules/mod_wsgi.so trên riêng của mình httpd.conf. Tôi nghĩ rằng httpd.conf của tôi là phần mở rộng của cấu hình khác đã được tải mod_wsgi. Không chắc chắn nếu điều này quan trọng.

Có điều gì sai với những gì tôi đã cung cấp cho đến thời điểm này không? Hay noi tôi nêu bạn cân thêm thông tin. Cảm ơn trước!

============================================== =======

Thông tin theo yêu cầu của @jpic

[email protected]:/var/www/html# ps aux | grep apache 
root  4564 0.0 0.2 207636 5432 pts/9 S+ 04:16 0:00 vi apache_django_wsgi.conf 
apache 6006 0.0 0.7 365140 14820 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6007 0.0 0.7 365140 14884 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6008 0.0 0.7 365140 14888 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6009 0.0 0.7 365140 14884 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6010 0.0 0.7 365008 14784 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6011 0.0 0.7 365008 14768 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6012 0.0 0.7 365008 14748 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6013 0.0 0.7 365140 14876 ?  S 09:53 0:00 /usr/sbin/httpd 
apache 6112 0.0 0.7 365008 14756 ?  S 10:05 0:00 /usr/sbin/httpd 
root  6116 0.0 0.2 207700 5492 pts/15 S+ 10:06 0:00 vi ../apache/django.wsgi 
apache 6181 0.0 1.5 713972 32136 ?  Sl 10:08 0:00 /usr/sbin/httpd 
root  8173 0.0 0.0 103300 848 pts/17 S+ 23:39 0:00 grep --color=auto apache 

Thông tin người dùng (Ý của bạn là id? userid không được tìm thấy)

[email protected]:/var/www/html# id apache 
uid=48(apache) gid=48(apache) groups=48(apache) 

ls -la thông tin

[email protected]:/var/www/html# ls -la /etc/ | grep httpd 
drwxrwxr-x. 4 root 4.0K Feb 16 18:27 httpd/ 

[email protected]:/var/www/html# ls -la /etc/httpd/ 
total 24K 
drwxrwxr-x. 4 root 4.0K Feb 16 18:27 ./ 
drwxr-xr-x. 128 root 12K Feb 28 03:45 ../ 
drwxr-xr-x. 2 root 4.0K Feb 28 08:07 conf/ 
drwxr-xr-x. 2 root 4.0K Feb 16 18:28 conf.d/ 
lrwxrwxrwx 1 root 19 Feb 16 18:27 logs -> ../../var/log/httpd/ 
lrwxrwxrwx 1 root 29 Feb 16 18:27 modules -> ../../usr/lib64/httpd/modules/ 
lrwxrwxrwx 1 root 19 Feb 16 18:27 run -> ../../var/run/httpd/ 

[email protected]:/var/www/html# ls -la /etc/httpd/logs/ 
total 528K 
drwxrwxr-x. 2 root 4.0K Feb 28 09:53 ./ 
drwxr-xr-x. 19 root 4.0K Feb 27 06:51 ../ 
-rw-r--r-- 1 root 17K Feb 28 10:08 access_log 
-rw-r--r-- 1 root 351 Feb 3 10:24 access_log-20120205 
-rw-r--r-- 1 root 1.8K Feb 7 01:39 access_log-20120212 
-rw-r--r-- 1 root 278K Feb 18 23:17 access_log-20120219 
-rw-r--r-- 1 root 85K Feb 22 08:38 access_log-20120226 
-rw-r--r-- 1 root 50K Feb 28 10:08 error_log 
-rw-r--r-- 1 root 14K Feb 5 03:28 error_log-20120205 
-rw-r--r-- 1 root 2.2K Feb 12 03:14 error_log-20120212 
-rw-r--r-- 1 root 9.4K Feb 19 03:28 error_log-20120219 
-rw-r--r-- 1 root 4.0K Feb 26 03:20 error_log-20120226 
-rw-r--r--. 1 root  0 Oct 14 15:14 ssl_access_log 
-rw-r--r-- 1 root 3.1K Feb 28 09:53 ssl_error_log 
-rw-r--r-- 1 root 1.4K Feb 3 03:25 ssl_error_log-20120205 
-rw-r--r-- 1 root 237 Feb 5 03:28 ssl_error_log-20120212 
-rw-r--r-- 1 root 1.2K Feb 17 01:52 ssl_error_log-20120219 
-rw-r--r-- 1 root 237 Feb 19 03:28 ssl_error_log-20120226 
-rw-r--r--. 1 root  0 Oct 14 15:14 ssl_request_log 
srw-rw-rw- 1 apache 0 Feb 28 09:53 wsgi.17555.14.1.sock 
+0

+1 cho đăng log apache. – jpic

Trả lời

9

Vấn đề này được ghi nhận ở:

http://code.google.com/p/modwsgi/wiki/ConfigurationIssues#Location_Of_UNIX_Sockets

Các giải pháp được đưa ra bởi những người khác thay đổi quyền là sai.

Giải pháp chính xác là thay đổi vị trí các tệp ổ cắm được giữ ở vị trí mà người dùng Apache có thể đọc chúng.

Trên các hệ thống bảo vệ thư mục nhật ký, đôi khi chúng có hệ thống để đặt lại các quyền đó khi bạn gây rối với chúng. Kết quả là mọi thay đổi chỉ có thể là tạm thời.

+0

trải nghiệm của tôi là, khi bạn đặt vị trí ổ cắm, chúng sẽ luôn có quyền hạn chặt chẽ hơn (ví dụ: srwx ------ www-data root) và vì vậy bạn phải thay đổi quyền truy cập ổ cắm. –

+1

Bạn không cần và bạn không có khả năng đặt quyền cho socket vì tên của tệp socket thay đổi động theo thời gian dựa trên ID tiến trình, thế hệ cấu hình Apache và cá thể nhóm quy trình daemon. IOW, nó không phải là một cái tên không thay đổi. Miễn là thư mục có thể truy cập được đối với người dùng Apache, tất cả sẽ hoạt động như mod_wsgi sẽ đảm bảo rằng các tệp socket thực tế có các quyền hạn chính xác. –

+1

@GrahamDumpleton Tôi đã thay đổi cấu hình theo liên kết mà bạn đã cung cấp nhưng tôi vẫn gặp lỗi "Không thể kết nối với quá trình xử lý WSGI daemon 'wsgi' trên '/var/run/wsgi.12116.0.1.sock' sau nhiều lần thử" – Harshdeep

0

Người dùng đang chạy quy trình apache dường như không có quyền đọc/ghi từ vị trí được chỉ định.

Điều đó thường được tiếp cận bằng cách đặt các chỉ thị WSGIDaemonProcessWSGIProcessGroup trong conf VirtualHost.

WSGIDaemonProcess process-name user=user group=group threads=10 python-path=vitrual-env-path 
WSGIProcessGroup process-group 

Bạn cũng có thể thay thế (trừ khi không có bất kỳ vấn đề quyền/nhóm nào khác.) Chỉ thêm đường dẫn có liên quan đọc/ghi truy cập vào người dùng đang chạy quy trình apache.

chmod [apache-user]+rw /etc/httpd/logs/ 
+0

Thực ra tôi đã kiểm tra tệp nhật ký wsgi và nó là 'srwx ------ 1 apache 0 Feb 28 07:14 wsgi.17555.5.1.sock'. Điều đó có nghĩa là 'apache' đã có quyền đọc/ghi chưa? – hobbes3

+0

Ngoài ra tôi đang nhầm lẫn về lệnh 'chmod' của bạn. Bạn có thể đặt quyền cho tệp cho một người dùng cụ thể, trong trường hợp này là 'apache' ?? Người dùng apache và nhóm là 'apache' bằng cách này. Tôi không biết làm thế nào để tìm ra môi trường python ảo của tôi (hoặc nếu chúng ta thậm chí sử dụng một). – hobbes3

+0

Nếu bạn không sử dụng virtual-env, bạn có thể bỏ qua phần đó một cách an toàn. Nếu bạn không biết, bạn có lẽ không. –

2

Tôi đã viết kịch bản này để xử lý vấn đề cho phép ổ cắm wsgi trên apache2-MPM-ITK

#!/bin/sh 
# This script will fix apache wsgi socket permissions 
# By default use standard socket location /var/run/apache2/wsgi 
# 
# You have to add this script after success execute of start|restart|reload 
# commands in next files: 
# /usr/sbin/apache2ctrl 
# /etc/init.d/apache2 

WSGISocketPrefix="/var/run/apache2/wsgi" 

if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

echo "Wait for other processes to start" 
sleep 1 
echo "Change wsgi socket permissions" 
chmod 0766 ${WSGISocketPrefix}.* 
Các vấn đề liên quan