解决nginx返回500 Internal Server Error
ubuntu 系统Nginx默认是 www-data用户执行的
# root @ www-dongqianshan-com in /home/kevin/website on git:master x [19:12:40]
$ cat /etc/nginx/nginx.conf
user www-data;# 已什么用户启动Nginx工作进程
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...省略若干行...
然后打包的build root 权限不够
## 改变目录下所有文件属主和属组为Nginx 用户
sudo chown -R www-data:www-data build
解决改变属主和属组后nginx仍然返回301 Internal Server Error
2024/04/16 03:08:33 [crit] 903097#903097: *1356 stat() "/home/kevin/website/build/index.html" failed (13: Permission denied), client: 83.97.73.245, server: dongqianshan.com, request: "GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.1", host: "150.158.1111", referrer: "http://150.158111:80/?XDEBUG_SESSION_START=phpstorm"
是因为开启 AppArmor 这个鬼东西
sudo systemctl status apparmor.service
AppArmor 是一个 Linux 内核安全模块,用于实施操作系统级别的安全策略,以保护系统和应用程序免受潜在的安全威胁。它通过限制程序对文件系统、网络和其他系统资源的访问,提供了额外的安全层。
具体来说,AppArmor 可以通过配置应用程序的访问规则,限制它们能够访问的文件、目录、网络端口等资源,以防止恶意行为或潜在的安全漏洞。这样可以降低系统被攻击或受到损害的风险。
AppArmor 的工作原理是基于安全策略文件(profiles),这些文件定义了应用程序的权限和访问规则。这些规则可以针对特定的应用程序进行定制,以适应其运行环境和安全需求。
总的来说,AppArmor 是 Linux 系统中一种用于实施安全访问控制的工具,可以提高系统的安全性并保护系统和应用程序免受潜在的安全威胁。