Tôi đã thấy rất nhiều câu hỏi về SO về chủ đề này và tôi đã thử nhiều phương pháp nhất có thể nhưng vẫn chưa giải quyết được vấn đề cho tôi vì vậy tôi hy vọng bài đăng này có thể hữu ích.Nginx + uWsgi + Django 'Quyền bị từ chối trong khi kết nối tới thượng nguồn' (socket)
Tôi đang theo hướng dẫn từ trang web này để thiết lập Django trên Nginx wtih uWSGI: http://www.oliverelliott.org/article/computing/tut_setup_nginx_django/
uwsgi.ini tập tin
[uwsgi]
chdir=/home/ec2-user/project/awssite
module=awssite.wsgi
home=/home/ec2-user/project
master=true
processes=2
socket=/home/ec2-user/project/awssite/awssite.socket
chmod-socket=666
vacuum=true
etc/nginx/sites-enabled/awssite_nginx.conf
upstream django {
server unix:///home/ec2-user/project/awssite/awssite.socket;
}
server {
listen 8080;
server_name localhost;
charset utf-8;
#max upload size
client_max_body_size 75M;
#Django media
location /media {
alias /home/ec2-user/project/awssite/awssite/media;
}
location /static {
alias /home/ec2-user/project/awssite/awssite/static;
}
location /favicon.ico {
log_not_found off;
}
location/{
uwsgi_pass django;
include /home/ec2-user/project/awssite/uwsgi_params;
}
}
Đây là mã lỗi trong /var/log/nginx/error.log
2016/02/15 01:21:22 [crit] 22159#0: *3 connect() to unix:///home/ec2-user/project/awssite/awssite.socket failed (13: Permission denied) while connecting to upstream, client: CLIENT_IP, server: localhost, request: "GET /menu/ HTTP/1.1", upstream: "uwsgi://unix:///home/ec2-user/project/awssite/awssite.socket:", host: "HOST_IP:8080"
Lưu ý: CLIENT_IP & HOST_IP là giá trị địa chỉ IP.
Đây là những gì tôi đã cố gắng và không làm việc:
1. chmod 755
thư mục home và chạy uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=666
2. Thêm người dùng nginx vào nhóm người dùng của tôi và chạy uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664
3. Thay đổi tệp ini bằng cách thêm các dòng mới này
chown-socket=ec2-user:nginx
uid=nginx
gid=nginx
và sau đó chạy ing uwsgi --ini uwsgi.ini
này trả về với 'Permission denied cho chown' nhưng khi tôi chạy lệnh với sudo
, tôi nhận được sudo: uwsgi: command not found
(uWSGI được cài đặt toàn hệ thống)
4. Đặt tất cả các file trong một thư mục khác nhau (bên ngoài về thành viên ec2-user
) nhưng điều đó không cho phép tôi để truy cập chúng trừ khi tôi chạy như root
và thậm chí sau đó nó không hoạt động
5. chạy uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664/666
với các thông số --uid nginx
--gid nginx
--chown-socket=nginx:nginx
Lưu ý: 664/666
nghĩa tôi đã cố gắng cả quyền
6. Đổi tên nginx. tệp conf.default và nginx.conf.rpmnew (vì vậy rằng tệp conf duy nhất cho nginx đọc là nginx.conf
)
Ai đó có thể làm sáng tỏ một số cách tôi có thể giải quyết vấn đề này? Tôi sẽ tiếp tục thêm vào các phương pháp mà tôi đã thử và không làm việc về câu hỏi này trong khi tôi làm việc trên nó. Cảm ơn :)
EDIT: Cảm ơn câu trả lời @GwynBleidD, cuối cùng tôi đã làm việc đó. Đây là những gì hoạt động:
giữ file socket của tôi trong /tmp
etc/nginx/sites-enabled/awssite_nginx.conf
upstream django {
server unix:///tmp/djangosocket/awssite.socket;
}
....
uwsgi.ini tập tin
[uwsgi]
chdir=/home/ec2-user/project/awssite
module=awssite.wsgi
home=/home/ec2-user/project
master=true
processes=2
socket=/tmp/djangosocket/awssite.socket
chmod-socket=666
vacuum=true
tôi đã thêm tôi ec2-user
(đăng nhập người dùng) vào nhóm nginx
.
Tôi đã thay đổi các điều khoản tập tin phù hợp
chown -R ec2-user:nginx djangosocket
chmod g+rwx djangosocket
Bạn có thể thử thay đổi chdir thành 'chdir =/home/ec2-user/project' không? – Selcuk
@ Selcuk không có tác dụng. với sự hiểu biết của tôi, 'chdir' là đường dẫn đến ứng dụng trong dự án chứ không phải bản thân dự án. –
Tôi luôn luôn chdir đến thư mục dự án nhưng tôi không bao gồm các đối số nhà. – Selcuk