Bagaimana cara mengatur favicon.ico untuk Virtual Host tertentu di Nginx?

26

Saya menggunakan Nginx sebagai server web saya untuk pertama kalinya. Saya tidak memiliki masalah untuk mengaturnya dan semuanya bekerja dengan baik. Masalahnya muncul ketika desainer bertanya kepada saya apakah dia bisa mengirim saya "ikon di bar judul" untuk "meletakkannya di sana".

# /opt/nginx/conf/nginx.conf
...
server {
    listen 80 ;
    server_name *.website.com website.com;
    root /home/webuser/sites/website;
}

Direktori saya:

/home/webuser/sites/website/
|_ index.html
|_ main.css
|_ favicon.ico

Apakah mungkin untuk menempatkan favicon.ico tertentu ke setiap Host Virtual? Di mana Anda harus meletakkan file itu dan bagaimana Anda bisa mengonfigurasinya?

EDIT:

Saya baru menyadari bahwa itu adalah masalah yang sama sekali berbeda. Kedua jawaban itu benar tetapi masalah saya adalah izin. Saya tidak tahu mengapa file favicon.ico akhirnya memiliki izin 600 dan tentu saja saat saya melakukannya:

chmod +r favicon.ico

Bekerja seperti pesona. Saya akan meninggalkan ini di sini jika itu terjadi pada orang lain.

ersamy
sumber
Izin 600 mungkin terkait dengan umask (umask untuk pengguna tersebut diatur ke 077 misalnya).
jcisio
Masalah izin memperbaikinya juga untuk saya!
Kzqai
Masalah izin di sini juga. Mungkin karena membuat file ico dengan mengunggah png ke situs.
Aaron Storck

Jawaban:

14

favicon.icoFile harus ditempatkan di direktori root situs web yang ditentukan oleh nginx rootdirective. Atau Anda bisa meneruskan URL ke favicon dengan menggunakan kode berikut dalam HTML:

<link rel="shortcut icon" href="http://example.com/myicon.ico" />

AlexD
sumber
Saya punya file favicon.ico saya di sana ... masih tidak berfungsi
ersamy
1
Periksa grep favicon.ico nginx-{access,error}.logdan periksa output dari file favicon.ico- IE tidak mengerti apa pun selain format ICO. Anda juga mengkonfigurasi hanya menunjukkan satu VirtualHost.
AlexD
1
baik dengan php crap, tidak baik dengan pengaturan file statis
holms
55

Ini adalah bagaimana kami melakukannya di konfigurasi vhost khusus kami ( sites-available/[vhostconfigfile]) di bawah direktif server:

location = /favicon.ico {
    alias /var/www/media/images/favicon.X.ico;
}

Dengan begitu Anda bisa meletakkannya di mana saja yang Anda inginkan tanpa html sama sekali.

".X." sama sekali tidak diperlukan, dan hanya menunjukkan bahwa Anda dapat mengubah nama file ini menjadi apa pun yang Anda suka. Saya cukup menggunakan ".X." sebagai pengganti untuk mengidentifikasi sub domain spesifik yang saya rujuk. Ini murni untuk organisasi.

eficker
sumber
Ini sempurna untuk situasi saya. Saya memiliki index.htm sederhana dengan tautan ke Webmin dan phpVirtualBox untuk server saya dan saya ingin ketiganya memiliki favicon khusus yang sama.
RyanScottLewis
mengapa kamu perlu =di sana?
holms
4
= Mungkin tidak diperlukan , tetapi mungkin merupakan speedup sederhana dan sudah benar. Lihat dokumen: nginx.org/en/docs/http/ngx_http_core_module.html#location
Scott Stafford
Pertama, apakah ada kebutuhan untuk .Xmasuk /var/www/media/images/favicon.X.ico? Kedua, saya sudah mencoba solusi ini persis seperti yang diposting, masih belum berfungsi. Mungkin ini tidak berhasil auto_index on;? Mungkin memerlukan rekomendasi @AlexD.
JamesThomasMoon1979
Anda benar, '.X' tidak diperlukan. Kami hanya memiliki banyak favicon yang semuanya terletak di folder yang sama untuk berbagai situs yang kami jalankan, jadi ini adalah bagaimana kami menamakannya secara unik. Itu harus nama file yang tepat untuk file yang ingin Anda layani sebagai 'favicon.ico'. Arahan saya daftar di atas memungkinkan penamaan sewenang-wenang dari file yang sebenarnya sambil memungkinkan server web untuk melayani nama file yang benar 'favicon.ico' ke browser klien.
eficker
0

Ini berarti, di mana pun file host virtual diambil dari (direktori root) Anda harus meletakkan file favicon.ico tertentu.

U4iK_HaZe
sumber