پرش به محتوا

Nginx روی Rocky Linux و تنظیمات SELinux

Nginx را نصب کنید و مشکلات رایج SELinux، مانند خطای 403 برای پوشه‌ی سایت یا ممنوعیت اتصال به برنامه‌ی پشتی، را درست حل کنید.

Rocky Linux 10سطح: متوسطبه‌روزرسانی: ۱۶ آبان ۱۴۰۵

در Rocky Linux، SELinux به‌طور پیش‌فرض فعال است. بیشتر خطاهای «Permission denied» در Nginx از آن می‌آیند. راه درست، تنظیم برچسب‌هاست، نه خاموش کردن SELinux.

۱. نصب

bash
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 پوشه درست نیست:

bash
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 وجود نداشت:

bash
sudo dnf install -y policycoreutils-python-utils

۳. Nginx به‌عنوان reverse proxy

برای این‌که Nginx به یک برنامه روی 127.0.0.1:3000 وصل شود، باید اجازه‌ی اتصال شبکه به آن داده شود:

bash
sudo setsebool -P httpd_can_network_connect on
nginx
server {
    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 ذخیره کنید و:

bash
sudo nginx -t && sudo systemctl reload nginx

۴. پیدا کردن علت خطاهای SELinux

bash
sudo ausearch -m avc -ts recent
sudo journalctl -t setroubleshoot --since "10 min ago"