Saya memiliki 3 nama domain dan saya mencoba meng-host semua 3 situs pada satu server (tetesan Digital Ocean) menggunakan Nginx.
mysite1.name mysite2.name mysite3.name
Hanya 1 dari mereka yang berfungsi. Dua lainnya menghasilkan 403 kesalahan (dengan cara yang sama).
Dalam log error nginx saya, saya lihat: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Konfigurasi yang didukung situs saya adalah:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Semua 3 situs memiliki file konfigurasi yang hampir identik.
File setiap situs ada di folder seperti /usr/share/nginx/mysite1.name/someFolder, dan /usr/share/nginx/mysite1.name/live adalah symlink untuk itu. (Sama untuk mysite2 dan mysite3.)
Saya telah melihat Nginx 403 terlarang untuk semua file tetapi itu tidak membantu.
Ada ide tentang apa yang mungkin salah?
index.html
index.php
file yang hilang, apakah Anda memastikan ada di folder itu?root
untuk menjadi/Users/myUsername/code/app
bukan/Users/myUsername/code/app/public
.Jawaban:
Jika Anda menonaktifkan pengindeksan direktori, dan mengalami masalah ini, itu mungkin karena try_files yang Anda gunakan memiliki opsi direktori:
Hapus itu dan itu akan berfungsi:
Kenapa ini terjadi?
TL; DR: Ini disebabkan karena nginx akan mencoba mengindeks direktori, dan diblokir dengan sendirinya. Melempar kesalahan yang disebutkan oleh OP.
try_files $uri $uri/
berarti, dari direktori root, coba file yang ditunjuk olehuri
, jika itu tidak ada, coba direktori sebagai gantinya (maka dari itu/
). Ketika nginx mengakses direktori, ia mencoba untuk mengindeks dan mengembalikan daftar file di dalamnya ke browser / klien, namun secara default pengindeksan direktori dinonaktifkan, sehingga mengembalikan kesalahan "Nginx 403 error: indeks direktori [folder] terlarang".Pengindeksan direktori dikendalikan oleh
autoindex
opsi: https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlsumber
try_files
tidak mencobaindex.php
, saya terus mendapatkan 403 dengan "indeks direktori ... dilarang"$uri/
masalah?try_files $uri $uri/
berarti, dari root web, coba file yang ditunjuk oleh uri, jika itu tidak ada, coba direktori sebagai gantinya (maka dari itu/
). Ketika nginx mengakses direktori, ia mencoba untuk mengindeks dan mengembalikan daftar file di dalamnya ke browser / klien, namun secara default pengindeksan direktori dinonaktifkan, sehingga mengembalikan kesalahan "Nginx 403 error: indeks direktori [folder] terlarang". Pengindeksan direktori dikendalikan olehautoindex
opsi: nginx.org/en/docs/http/ngx_http_autoindex_module.htmlBerikut adalah konfigurasi yang berfungsi:
Kemudian satu-satunya output di browser adalah kesalahan Laravel: "Aduh, sepertinya ada yang salah."
JANGAN lari
chmod -R 777 app/storage
( perhatikan ). Membuat sesuatu yang bisa ditulis dunia adalah keamanan yang buruk.chmod -R 755 app/storage
bekerja dan lebih aman.sumber
www-data
pada debian. Lalu atur bahkan lebih ketat izin pada folder seperti:chmod -R 640 app/storage
laluchown -R :www-data app/storage
. Dengan cara ini file hanya dapat dilihat oleh pemilik aplikasi dan server web. Dan tidak seorang pun dapat menjalankan file yang disimpan (mungkin diunggah) secara langsung. Nginx seharusnya hanya perlu izin baca untuk mengakses file.public/
diroot /usr/share/nginx/mysitename/public/;
. Setelah menambahkanpublic/
dan menjalankanservice nginx restart
, itu berhasil.Jika Anda hanya mencoba daftar isi direktori gunakan
autoindex on;
seperti:sumber
autoindex on
; itu akan menjadi ide yang buruk untuk mengekspos isi direktori saya kepada publik.Saya mengalami kesalahan serupa
--- "403 Forbidden" di halaman web
--- "13: Izin ditolak" di log kesalahan di /var/log/nginx/error.log
Di bawah 3 Langkah ini berhasil bagi saya:
1: Buka Terminal, lihat sesuatu seperti di bawah ini
Jadi, nama pengguna saya adalah "user1" (dari atas)
2: Mengubah pengguna di /etc/nginx/nginx.conf
3: Muat ulang nginx
Selain itu, saya telah menerapkan izin file / folder (sebelum saya melakukan di atas 3 langkah)
(755 ke direktori saya, katakan / dir1 /) & (644 untuk file di bawah direktori itu):
(Saya tidak yakin, apakah langkah tambahan ini benar-benar diperlukan, tepat di atas 3 langkah mungkin cukup):
Semoga ini bisa membantu seseorang dengan cepat. Semoga berhasil.
sumber
Sebenarnya ada beberapa hal yang perlu Anda periksa. 1. periksa status menjalankan nginx Anda
Di sini kita perlu memeriksa siapa yang menjalankan nginx. harap ingat pengguna dan grup
periksa status akses folder
Itu benar
bandingkan dengan status folder dengan nginx
(1) jika status akses folder tidak benar
(2) jika pengguna dan grup folder tidak sama dengan nginx's running
dan ubah nama pengguna dan grup yang menjalankan nginx
untuk menemukan di mana file konfigurasi nginx
Karena pengguna nginx default running bukan siapa-siapa dan grup bukan siapa-siapa. jika kami belum melihat pengguna dan grup ini, 403 akan diperkenalkan.
sumber
Saya memiliki masalah yang sama, logfile menunjukkan kesalahan ini kepada saya:
Saya hosting aplikasi PHP dengan framework codeignitor. Ketika saya ingin melihat file yang diunggah saya menerima
403 Error
.Masalahnya adalah, bahwa
nginx.conf
itu tidak didefinisikan dengan benar. Dari padasaya hanya termasuk
Saya memiliki index.php di root saya dan saya pikir itu sudah cukup, saya salah;) Petunjuk itu memberi saya NginxLibrary
sumber
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Anda mungkin mendapatkan ini karena kebijakan Nginx (mis. "Menyangkal"), atau Anda mungkin mendapatkan ini karena kesalahan konfigurasi Nginx, atau Anda mungkin mendapatkan ini karena pembatasan sistem file.
Anda dapat menentukan apakah ini nanti (dan mungkin melihat bukti kesalahan konfigurasi dengan menggunakan strace (kecuali, OP tidak akan memiliki akses ke sana):
Di sini saya sedang memeriksa aktivitas filesystem yang dilakukan oleh nginx saat menjalankan tes (saya memiliki kesalahan yang sama seperti Anda).
Inilah bagian yang dipilih dari konfigurasi saya pada saat itu
Dalam kasus saya, seperti yang ditunjukkan oleh strace dengan jelas, bergabungnya dalam "alias" ke "indeks" bukanlah yang saya harapkan, dan sepertinya saya perlu membiasakan diri selalu menambahkan nama direktori dengan tanda /, jadi dalam kasus saya, berikut ini berfungsi:
sumber
/home/web/public
. Mengapa nginx mencoba mengakses file yang tidak ditemukan ini adalah karena saya lupa menghapus baris iniindex index.html index.htm index.nginx-debian.html;
karena file thats tidak ada di dalam dir publik saya.Sepertinya beberapa masalah izin.
Cobalah untuk mengatur semua izin seperti yang Anda lakukan di mysite1 ke situs lain.
Secara default, izin file harus 644 dan dirs 755. Periksa juga apakah pengguna yang menjalankan nginx memiliki izin untuk membaca file dan dir itu.
sumber
ubah
try_files
untuk menunjuk keindex.php
jalan, di "Laravel" yang Anda sebutkan itu harus seperti iniDan dalam proyek "codeigniter", cobalah seperti ini
sumber
Karena Anda menggunakan
php-fpm
, Anda harus memastikan bahwaphp-fpm
pengguna sama dengannginx
pengguna.Periksa
/etc/php-fpm.d/www.conf
dan atur pengguna dan grup php kenginx
jika bukan.The
php-fpm
kebutuhan pengguna izin menulis.sumber
Anda perlu menjalankan izin pada direktori file statis Anda. Mereka juga perlu dikenali oleh pengguna dan grup nginx Anda.
sumber
Ubah default
untuk
memecahkan masalah saya.
sumber
Saya menjalankan Ubuntu 15.10 dan menemukan kesalahan 403 Forbidden karena alasan sederhana. Di nginx.conf (file konfigurasi untuk nginx), pengguna adalah 'www-data'. Setelah saya mengubah nama pengguna menjadi [nama pengguna saya], itu berfungsi dengan baik dengan asumsi izin yang diperlukan diberikan kepada nama pengguna saya. Langkah-langkah yang diikuti oleh saya:
File konfigurasi saya terlihat seperti ini:
sumber
Bagi saya masalahnya adalah bahwa rute apa pun selain rute dasar berfungsi, menambahkan baris ini memperbaiki masalah saya:
Hal penuh:
sumber
Untuk memperbaiki masalah ini saya menghabiskan satu malam penuh. Inilah dua sen saya pada cerita ini,
Ini adalah catatan tambahan: Jika Anda menggunakan mysql, dan koneksi dari hhvm ke mysql menjadi tidak mungkin, periksa apakah apparmor Anda sudah diinstal. nonaktifkan itu.
sumber
Saya menyelesaikan masalah saya, jika saya mengonfigurasi suka ikuti:
Ini akan menunjukkan kesalahan 403.
Saya sudah mencoba
autoindex on
, tetapi tidak berhasil. Jika saya mengubah konfigurasi saya seperti ini, itu berfungsi.Saya pikir pencocokan yang tepat, jika itu jalan seharusnya direktori.
sumber
ketika Anda ingin menyimpan opsi direktori, Anda dapat menempatkan index.php di atas $ uri seperti ini.
sumber