Saya telah menginstal nginx dengan PHP-FPM pada kotak CentOS 5, tetapi saya berjuang untuk mendapatkannya untuk melayani semua file saya - apakah PHP atau tidak.
Nginx berjalan sebagai www-data: www-data, dan situs "Selamat datang di nginx di EPEL" default (dimiliki oleh root: root dengan izin 644) dimuat dengan baik.
File konfigurasi nginx memiliki perintah include untuk /etc/nginx/sites-enabled/*.conf, dan saya memiliki file konfigurasi example.com.conf , dengan demikian:
server {
listen 80;
Virtual Host Name
server_name www.example.com example.com;
location / {
root /home/demo/sites/example.com/public_html;
index index.php index.htm index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /home/demo/sites/example.com/public_html$fastcgi_script_name;
include fastcgi_params;
}
}
Meskipun public_html dimiliki oleh www-data: www-data dengan 2777 izin file, situs ini gagal menyajikan konten apa pun -
[error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"
Saya telah menemukan banyak posting lain dengan pengguna mendapatkan 403 dari nginx, tetapi sebagian besar yang saya lihat melibatkan pengaturan yang lebih kompleks dengan Ruby / Penumpang (yang sebelumnya saya benar-benar berhasil) atau hanya menerima kesalahan ketika PHP upstream -FPM terlibat, sehingga mereka tampaknya tidak banyak membantu.
Apakah saya melakukan sesuatu yang konyol di sini?
sumber
Jawaban:
Salah satu persyaratan izin yang sering diabaikan adalah kebutuhan pengguna x izin di setiap direktori induk file untuk mengakses file itu. Periksa izin pada /, / home, / home / demo, dll. Untuk www-data x akses. Dugaan saya adalah / home mungkin 770 dan www-data tidak dapat chdir melaluinya untuk sampai ke subdir. Jika ya, coba chmod o + x / home (atau dir apa pun yang menolak permintaan).
EDIT: Untuk dengan mudah menampilkan semua izin di jalur, Anda dapat menggunakan
namei -om /path/to/check
sumber
chmod -4 +x /mypath
bekerja untuk saya) nginxlibrary.com/403-forbidden-errorJika Anda masih melihat
permission denied
setelah memverifikasi izin folder induk, itu mungkin SELinux membatasi akses.Untuk memeriksa apakah SELinux sedang berjalan:
Untuk menonaktifkan SELinux hingga reboot berikutnya:
Mulai ulang Nginx dan lihat apakah masalahnya masih ada. Untuk mengizinkan nginx untuk melayani direktori www Anda (pastikan Anda mengaktifkan SELinux kembali sebelum menguji ini. Yaitu,
setenforce Enforcing
)Lihat jawaban saya di sini untuk perincian lebih lanjut
sumber
open() "/usr/share/nginx/logs/xxxxxx.com-error_log" failed (13: Permission denied)
setelah saya memeriksa izin dan memastikan itu dimulai sebagai root. Saya menemukan ini dan menemukan SELinux diaktifkan. Saya menonaktifkannya dan sekarang tidak ada masalah. Terima kasih!user
dari nginx ke akar di/var/nginx/nginx.conf
- mungkin itu akan membantu orang lain yang datang di masalah ini. S / O ke DataPsyche untuk bagian kedua.setsebool httpd_read_user_content on
(Untuk file statis yang di-host dari direktori home, chmod'ed menjadi dapat dibaca dunia) - Meskipun saya kira metode @ KapiteinWitbaard di atas lebih aman.Saya memecahkan masalah ini dengan menambahkan pengaturan pengguna.
di nginx.conf
ubah 'username' dengan nama pengguna linux.
sumber
Saya mendapatkan kesalahan ini dan saya akhirnya menyelesaikannya dengan perintah di bawah ini.
Masalah ini disebabkan ketika Anda memindahkan sesuatu dari satu tempat ke tempat lain. Ini mempertahankan konteks selinux dari aslinya ketika Anda memindahkannya, jadi jika Anda menghapus sesuatu di / home atau / tmp itu akan diberikan konteks selinux yang cocok dengan lokasinya. Sekarang Anda mv ke / var / www / html dan dibutuhkan konteks mengatakan itu milik / tmp atau / home dengannya dan httpd tidak diizinkan oleh kebijakan untuk mengakses file-file itu.
Jika Anda cp file bukan mv mereka, konteks selinux ditugaskan sesuai dengan lokasi Anda menyalin, bukan dari mana asalnya. Menjalankan restorecon mengembalikan konteks ke default dan memperbaikinya juga.
sumber
Saya sudah mencoba berbagai kasus dan hanya ketika pemiliknya diatur ke nginx (
chown -R nginx:nginx "/var/www/myfolder"
) - mulai berfungsi seperti yang diharapkan.sumber
Jika Anda menggunakan SELinux, ketikkan:
Ini akan memperbaiki masalah izin.
sumber
Pertanyaan lama, tetapi saya memiliki masalah yang sama. Saya mencoba setiap jawaban di atas, tidak ada yang berhasil. Apa yang diperbaiki untuk saya adalah menghapus domain, dan menambahkannya lagi. Saya menggunakan Plesk, dan saya menginstal Nginx SETELAH domain sudah ada di sana.
Meskipun demikian, lakukan backup lokal ke / var / www / backup. Jadi saya bisa dengan mudah menyalin kembali file.
Masalah aneh ....
sumber
Kami memiliki masalah yang sama, menggunakan Plesk Onyx 17. Alih-alih mengacaukan hak dll, solusinya adalah menambahkan pengguna nginx ke dalam grup psacln, di mana semua pemilik domain (pengguna) lainnya adalah:
Sekarang nginx memiliki hak untuk mengakses .htaccess atau file lain yang diperlukan untuk menampilkan konten dengan benar.
Di sisi lain, pastikan juga bahwa Apache ada di grup psaserv, untuk menyajikan konten statis:
Dan jangan lupa untuk me-restart Apache dan Nginx di Plesk sesudahnya! (dan muat ulang halaman dengan Ctrl-F5)
sumber
usermod -aG username www-data
di sebagian besar pengaturan.Saya menggali sedikit tentang masalah ini dengan menjalankan
setfacl
perintah secara salah. Saya berlari:Aku ditinggalkan rute ini mendukung menambahkan
nginx
kefoo
kelompok, tetapi bahwa kebiasaan ACL itu menggagalkan upaya nginx untuk mengakses file. Saya membersihkannya dengan menjalankan:Dan kemudian nginx dapat mengakses file.
sumber
Jika Anda menggunakan PHP, pastikan
index
arahan NGINX di blok server berisi index.php:index index.php index.html;
Untuk info lebih lanjut, periksa petunjuk indeks dalam dokumentasi resmi.
sumber
Saya menghadapi masalah yang sama tetapi solusi di atas tidak membantu.
Jadi, setelah banyak perjuangan saya menemukan bahwa sestatus ditetapkan untuk menegakkan yang memblokir semua pelabuhan dan dengan mengatur agar permisif semua masalah diselesaikan.
Semoga ini bisa membantu orang seperti saya.
sumber