در Rocky Linux، SELinux بهطور پیشفرض فعال است. بیشتر خطاهای «Permission denied» در Nginx از آن میآیند. راه درست، تنظیم برچسبهاست، نه خاموش کردن SELinux.
۱. نصب
sudo dnf install -y nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload۲. پوشهی سایت خارج از مسیر پیشفرض
اگر فایلهای سایت در /srv/www/example باشند، Nginx خطای 403 میدهد، چون برچسب SELinux پوشه درست نیست:
sudo mkdir -p /srv/www/example
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
sudo restorecon -Rv /srv/www
ls -Z /srv/wwwاگر دستور semanage وجود نداشت:
sudo dnf install -y policycoreutils-python-utils۳. Nginx بهعنوان reverse proxy
برای اینکه Nginx به یک برنامه روی 127.0.0.1:3000 وصل شود، باید اجازهی اتصال شبکه به آن داده شود:
sudo setsebool -P httpd_can_network_connect onserver {
listen 80;
server_name example.ir;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}این را در /etc/nginx/conf.d/example.conf ذخیره کنید و:
sudo nginx -t && sudo systemctl reload nginx۴. پیدا کردن علت خطاهای SELinux
sudo ausearch -m avc -ts recent
sudo journalctl -t setroubleshoot --since "10 min ago"