Arahan lokasi tidak berfungsi

10

Untuk server NGINX saya, saya memiliki server virtual yang diatur hanya untuk mengeluarkan konten statis. Saat ini saya sedang mencoba mengaturnya agar gambar memiliki tanggal kedaluwarsa. Namun, ketika saya membuat arahan lokasi untuk ini, semuanya hanya menghasilkan 404.

Konfigurasi saya sekarang terlihat seperti ini:

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

Catatan, file ini disertakan dari /etc/nginx/nginx.conf, di dalam direktif http

Saya mencoba untuk mengakses gambar, di, katakanlah ... static.example.com/images/screenshots/something.png. Benar saja, gambar juga ada di /srv/www/static/images/screenshots/something.png. Namun, pergi ke alamat mengatakan tidak berfungsi dan hanya memberitahu saya 404 Tidak Ditemukan .

Namun, jika saya menghapus location /imagesdan mengubah location /yang berikut ...

location / {
    root /srv/www/static;
}

Berhasil! Apa yang saya lakukan salah di sini?

Jesse Brands
sumber

Jawaban:

14

Konfigurasi Anda mengikuti perangkap konfigurasi nginx. Anda harus membacanya sebelum mengkonfigurasi nginx.

Untuk menjawab pertanyaan Anda, Anda tidak boleh mendefinisikan rootdi lokasi, menetapkannya sekali dan tag lokasi secara otomatis akan membiarkan Anda menetapkan akses ke direktori tertentu.

Juga alih-alih mendefinisikan root khusus untuk direktori gambar, gunakan try_files. Direktori $uriakan peta /images/dengan /static/images/.

Coba konfigurasi ini:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}
phoops
sumber
Terima kasih! Saya telah membaca jebakan, tapi saya rasa ingatan saya mengecewakan saya. Ini berfungsi, meskipun saya sedikit mengeditnya untuk tujuan saya.
Jesse Brands
Ya saya membaca kembali bagian-bagian itu dari waktu ke waktu sendiri, ada alasan mengapa ia memiliki halaman wiki terpisah untuk itu;)
phoops
Jika mendefinisikan rootdi dalam locationadalah praktik yang buruk, bagaimana mereka mendonasikannya sendiri di docs / http / ngx_http_core_module.html # alias ? (lihat di mana dikatakan " lebih baik menggunakan direktif root sebagai gantinya ") KOREKSI : oke, sepertinya apa yang salah adalah mendefinisikan root utama di suatu lokasi, bukan sembarang root
aexl