Nginx
centos8 nginx uwsgi套接字權限被拒絕
我已將 uwsgi 和 nginx 配置為通過位於使用者主目錄中的套接字(chmod 777)工作,但 nginx 無法訪問套接字(13:Permission denied in
error.log
)。嘗試使用 777 chmod 將套接字移動到 /tmp/,但隨後收到錯誤2: No such file or directory
2021/09/21 19:40:16 [crit] 68278#0: *17 connect() to unix:///tmp/my.sock failed (2: No such file or directory) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/my.sock:", host: "****" 2021/09/21 20:10:16 [crit] 517#0: *1 connect() to unix:/home/***/.deploy/my.sock failed (13: Permission denied) while connecting to upstream, client: ***, server: ***, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/***/.deploy/my.sock:", host: "***"
PS selinux 禁用
在得到答案之前,您應該盡一切努力打破使用 chmod 777 或禁用 SELinux 的不良安全習慣。相反,您應該全面了解 UNIX 權限模型,以便始終了解正確的權限,並且您應該配置您的服務以與 SELinux 一起使用,以便從它提供的額外安全層中受益。
因此,深埋在使用者主目錄中的套接字不起作用的原因是父目錄的權限禁止了必要的訪問(在這種情況下為 search
x
)。用於namei -l /home/***/.deploy/my.sock
一次查看所有父目錄的權限,並更正不允許搜尋權限的那些(很可能是/home/***
)。chmod +x /as/needed
還要記住根據需要修復套接字本身的權限和所有權。
為了完整起見,未找到您的套接字的原因
/tmp
是作為系統服務執行的 nginx 無法訪問系統/tmp
目錄。Systemd 啟動它PrivateTmp=true
會導致創建一個唯一的私有目錄並將 nginx/tmp
命名空間到該目錄。這就是所有這些/tmp/xxx-systemd-private-foo
目錄的用途。