Saya menggunakan konfigurasi default sambil menambahkan direktori tertentu dengan nginx diinstal pada mesin ubuntu 12.04 saya.
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
root /username/test/static;
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
...
...
}
Saya hanya ingin server nginx statis sederhana untuk melayani file dari direktori itu. Namun, memeriksa error.log
saya mengerti
2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html
Saya sudah melakukan chown -R www-data:www-data
pada /username/test/static
, saya telah menetapkan mereka untuk chmod 755
. Saya tidak tahu apa lagi yang perlu disetel.
www-data
pengguna dapatcd
ke/username/test/static
direktori:sudo -u www-data cd /username/test/static
Jawaban:
Nginx beroperasi di dalam direktori, jadi jika Anda tidak bisa
cd
ke direktori itu dari pengguna nginx maka itu akan gagal (seperti halnyastat
perintah di log Anda). Pastikanwww-user
bisacd
semua jalan ke/username/test/static
. Anda dapat memastikan bahwa keinginanstat
akan gagal atau berhasil dengan menjalankanDalam kasus Anda mungkin
/username
direktori masalahnya di sini. Biasanyawww-data
tidak memiliki izin kecd
direktori home pengguna lain.Solusi terbaik dalam hal itu adalah menambahkan
www-data
keusername
grup:dan pastikan
username
grup tersebut dapat masuk ke semua direktori di sepanjang jalur:Agar perubahan Anda berfungsi, mulai ulang nginx
sumber
umask
. Jika Anda membutuhkan solusi yang lebih umum, yang tidak memerlukanchmod
setiap direktori baru, maka ada solusinya. Ini membutuhkan asosiasi kelompok terbalik (username
kewww-data
kelompok) dan penggunaansetgid
. Jangan ragu untuk memposting pertanyaan baru untuk deskripsi yang lebih terperinci dan saya akan dengan senang hati menjawabnya.nginx
Pengguna saya dapat mengakses direktori situs web saya tetapi tetap dikatakan izin ditolak di log kesalahan.Saya baru saja mengalami masalah yang sama pada kotak CentOS 7.
Sepertinya saya akan menekan selinux. Menempatkan selinux ke mode permisif (
setenforce permissive
) telah mengatasi masalah untuk saat ini. Saya akan mencoba dan kembali dengan perbaikan yang tepat.sumber
ls -Z myFile.js
akan menampilkan konteks SELinux:-rw-r--r--. nginx nginx unconfined_u:object_r:user_home_t:s0 myFile.js
Gunakanchcon -v --type=httpd_sys_content_t myFile
untuk mengubah konten SELinux.sudo setenforce 0
memperbaikinya untuk saya.SELINUX
nilainya menjadidisabled
in/etc/selinux/config
, diikuti dengan reboot. Jika disetel kepermissive
, itu masih dapat menjalankan pemeriksaan di belakang layar (menggunakan CPU yang berharga), tetapi tidak mengambil tindakan.Nginx harus memiliki + x akses pada semua direktori yang mengarah ke direktori root situs tersebut.
Pastikan Anda memiliki + x pada semua direktori di jalur yang mengarah ke root situs. Misalnya, jika root situs adalah / home / username / siteroot:
sumber
Di CentOS 7.0 saya mengalami
Access Deined
masalah ini yang disebabkan oleh SELinux dan langkah-langkah ini menyelesaikan masalah:Pembaruan: Hanya catatan tambahan dari apa yang saya pelajari saat menggunakan server Linux virtual digitalocean, atau mereka menyebutnya Droplets . Menggunakan SELinux membutuhkan RAM yang lumayan. Kemungkinan besar Anda tidak akan bisa menjalankan dan mengelola SELinux pada tetesan dengan RAM kurang dari 2GB.
sumber
setenforce 0
. Namun, ketika melihat kembali apa yang sebenarnya dilakukan solusi ini, saya menyadari bahwa saya perlu menjalankan kembali perintah untuk memperbarui izin untuk pengguna nginx. Sepertinya itu berhasil dan saya dapat mengatur SELinux kembali ke penerapan.Anda mungkin menjalankan Linux yang Ditingkatkan Keamanan, jadi tambahkan aturan untuk itu. Saya mengalami kesalahan izin 13, meskipun izin ditetapkan dan pengguna ada ..
chcon -Rt httpd_sys_content_t /username/test/static
sumber
Gejala:
Tidak dapat mengunggah gambar ke Perpustakaan Media WordPress.
Sebab:
(CentOS)
yum update
Kesalahan:
Larutan:
chown -R www-data:www-data /var/lib/nginx
sumber
Secara default, data statis, saat Anda menginstal nginx, akan berada di / var / www / html. Jadi Anda cukup menyalin folder statis Anda ke / var / html / dan mengatur
di ngix.conf (atau / etc / nginx / sites-available / default)
Ini berfungsi untuk saya di ubuntu tetapi saya kira itu tidak jauh berbeda untuk distro lain.
Semoga membantu.
sumber
Ubah
nginx.conf
user
properti Anda menjadiwww-static
file owener.sumber
Saya menghadapi masalah ini, saya menyelesaikannya untuk memberikan izin kepada pengguna nginx dan mengelompokkan sesuatu seperti ini:
sumber
Dalam kasus saya, folder yang menyajikan file adalah tautan simbolis ke folder lain, dibuat dengan
Meskipun izin (pengguna dan grup) di mana benar di folder tujuan (tautan simbolis), saya masih mengalami kesalahan karena Nginx perlu memiliki izin ke seluruh hierarki folder asal juga.
sumber
Saya akhirnya menemukan jalan saya. Singkatnya, katakanlah nama pengguna Anda adalah
joe
dan Anda memiliki situs web di bawah sistem file pribadi Anda/home/joe/path/to/website
.Anda benar-benar harus memberi tahu sistem bahwa itu
nginx
adalah teman Anda.Tempatkan
nginx
dalamjoe
grup:Setelah itu jika masih tidak berhasil, periksa akses
/home/joe
direktori yang benar. Mungkin itulah alasan mengapa nginx tidak dapat menjangkau file tersebut karena meskipun dia adalah teman Anda sekarang Anda harus membukanya pintu ke rumah Anda:Itu dia. Hanya itu yang harus Anda lakukan untuk memberikan akses nginx ke file lokal Anda :)
Saya tidak berpikir ada masalah keamanan dengan metode ini karena
nginx
merupakan otoritas tinggi dan hanya admin yang dapat mengubah grup.nginx
sekarang dapat membaca apa yang ada dijoe
direktori. Ini hanya pelanggaran keamanan jika pemegangnginx
akun berbeda dengan pengguna tempat Anda membuka akses direktori, tetapi dalam kasus saya, saya adalah pemegang kedua belah pihak, yang dalam konteks lokal.sumber
Saya memiliki masalah yang sama, saya menggunakan Plesk Onyx 17 dengan Centos7. Saya bisa melihat kesalahan ini di proxy_error_log di bawah log domain yang terpengaruh. Semua dirs / file di / var / www / vhosts / dimiliki oleh masing-masing pengguna (pemilik domain) dan Anda dapat melihat bahwa semuanya ada di grup psacln. Jadi solusinya adalah menambahkan nginx juga ke grup ini, sehingga dia dapat melihat apa yang dia butuhkan:
Dan memang, restart nginx dan muat ulang halaman dengan Ctrl + F5.
sumber
Saya menemukan solusi: Pindahkan folder ke folder konfigurasi nginx, dalam kasus saya "/ etc / nginx / my-web-app". Dan kemudian mengubah hak akses ke pengguna root "sudo chown -R root: root" my-web-app ".
sumber
Anda juga dapat menambahkan pengguna mana yang akan menjalankan nginx. Di file nginx.conf, lakukan perubahan berikut:
Anda dapat menambahkan baris di atas sebagai baris pertama di conf nginx Anda. Anda dapat menulis nama pengguna mana pun yang memiliki izin untuk menulis di direktori itu.
sumber
Ini biasanya masalah hak istimewa ... Bagi saya, karena saya menggunakan / root / ** sebagai root nginx, maka perlu hak istimewa yang lebih tinggi. Cara yang mudah adalah dengan memindahkan proyek ke direktori yang Anda buat sendiri.
sumber