Jak ustawić favicon.ico dla konkretnego wirtualnego hosta na Nginx?

26

Po raz pierwszy używam Nginx jako mojego serwera. Nie miałem żadnych problemów z konfiguracją i wszystko działa świetnie. Problem pojawił się, gdy projektant zapytał mnie, czy mógłby mi wysłać „ikonę na pasku tytułowym”, aby „tam umieścić”.

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

Mój katalog:

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

Czy można umieścić konkretny plik favicon.ico dla każdego wirtualnego hosta? Gdzie należy umieścić ten plik i jak go skonfigurować?

EDYTOWAĆ:

Właśnie zdałem sobie sprawę, że to był zupełnie inny problem. Obie odpowiedzi były prawidłowe, ale moim problemem było pozwolenie. Nie wiem, dlaczego plik favicon.ico uzyskał uprawnienia 600 i oczywiście w tej chwili:

chmod +r favicon.ico

Działa jak urok. Zostawię to tutaj, jeśli stanie się to z kimś innym.

ersamy
źródło
Uprawnienie 600 może odnosić się do umask (umask dla tego użytkownika jest na przykład ustawiony na 077).
jcisio
Problem pozwoleń również to rozwiązał!
Kzqai
Tutaj także kwestia uprawnień. Prawdopodobnie z powodu utworzenia pliku ico przez przesłanie pliku PNG do witryny.
Aaron Storck,

Odpowiedzi:

14

favicon.icoplik powinien zostać umieszczony w katalogu głównym serwisu, który jest zdefiniowany w rootdyrektywie nginx . Lub możesz przekazać URL do favicon za pomocą następującego kodu w HTML:

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

AlexD
źródło
Mam tam plik favicon.ico ... wciąż nie działa
ersamy
1
Sprawdź grep favicon.ico nginx-{access,error}.logi sprawdź dane wyjściowe z file favicon.ico- IE nie rozumie niczego poza formatem ICO. Ponadto konfiguracja pokazuje tylko jeden VirtualHost.
AlexD
1
dobre z bzdurami php, niezbyt dobre z konfiguracją plików statycznych
holms 16.09.13
55

Oto jak to robimy w naszym konkretnym vhost config ( sites-available/[vhostconfigfile]) zgodnie z dyrektywą serwera:

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

W ten sposób możesz umieścić go w dowolnym miejscu bez HTML.

„.X.” nie jest wcale wymagane i oznacza tylko, że możesz zmienić tę nazwę pliku na dowolną. Po prostu używam „.X.” jako symbol zastępczy do identyfikacji konkretnej subdomeny, do której się odwołuję. Jest to wyłącznie organizacja.

eficker
źródło
To idealnie pasuje do mojej sytuacji. Mam prosty index.htm z linkami do Webmina i phpVirtualBox dla mojego serwera i chciałem, aby wszystkie 3 miały ten sam niestandardowy favicon.
RyanScottLewis
dlaczego =tam potrzebujesz
holms 16.09.13
4
Wartość = może nie być wymagana , ale może być skromnym przyspieszeniem i jest poprawna. Zobacz dokumentację: nginx.org/en/docs/http/ngx_http_core_module.html#location
Scott Stafford
Po pierwsze, istnieje potrzeba .XIN /var/www/media/images/favicon.X.ico? Po drugie, wypróbowałem to rozwiązanie dokładnie tak, jak zostało opublikowane, wciąż nie działa. Być może to nie działa auto_index on;? Być może wymaga to rekomendacji @AlexD.
JamesThomasMoon1979
Masz rację, „.X” nie jest wymagane. Po prostu mamy wiele ulubionych znajdujących się w tym samym folderze dla różnych witryn, które prowadzimy, więc w ten sposób nazywamy je unikatowo. Powinna to być dokładna nazwa pliku, który ma służyć jako „favicon.ico”. Powyższa dyrektywa, którą wymieniłem powyżej, pozwala na dowolne nazywanie rzeczywistego pliku, jednocześnie pozwalając serwerowi WWW podawać poprawną nazwę pliku „favicon.ico” w przeglądarce klienta.
eficker
0

Oznacza to, że wszędzie tam, gdzie pobierane są pliki hosta wirtualnego (katalog główny), należy umieścić ten konkretny plik favicon.ico.

U4iK_HaZe
źródło