¿Cómo configurar un favicon.ico para un host virtual específico en Nginx?

26

Estoy usando Nginx como mi servidor web por primera vez. No tuve ningún problema para configurarlo y todo funciona muy bien. El problema surgió cuando el diseñador me preguntó si podía enviarme "el ícono en la barra de título" para "ponerlo allí".

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

Mi directorio:

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

¿Es posible poner un favicon.ico específico para cada host virtual? ¿Dónde debe colocar ese archivo y cómo puede configurarlo?

EDITAR:

Me acabo de dar cuenta de que era un problema completamente diferente. Ambas respuestas fueron correctas, pero mi problema fue el permiso. No sé por qué el archivo favicon.ico terminó teniendo permisos 600 y, por supuesto, en el momento en que lo hice:

chmod +r favicon.ico

Trabajado como un encanto. Dejaré esto aquí si le sucede a alguien más.

Ersamy
fuente
El permiso 600 podría estar relacionado con la umask (por ejemplo, umask para ese usuario está configurado en 077).
jcisio
¡El problema de los permisos también me lo arregló!
Kzqai
Problema de permiso aquí también. Probablemente debido a la creación del archivo ico cargando un png a un sitio.
Aaron Storck

Respuestas:

14

favicon.icoEl archivo debe colocarse en el directorio raíz del sitio web definido por la rootdirectiva nginx . O puede pasar la URL a favicon usando el siguiente código en HTML:

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

AlexD
fuente
Tengo mi archivo favicon.ico allí ... todavía no funciona
Ersamy
1
Verifique grep favicon.ico nginx-{access,error}.logy verifique la salida de file favicon.ico: IE no entiende nada más que el formato ICO. Además, su configuración muestra solo un VirtualHost.
AlexD
1
bueno con basura de php, no es bueno con la configuración de archivos estáticos
holms
55

Así es como lo hacemos en nuestra configuración específica de vhost ( sites-available/[vhostconfigfile]) bajo la directiva del servidor:

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

De esa manera, puede colocarlo en cualquier lugar que desee sin html.

El ".X". no es obligatorio en absoluto, y solo denota que puede cambiar este nombre de archivo a lo que desee. Simplemente uso el ".X". como marcador de posición para identificar el subdominio específico al que me refiero. Es puramente para la organización.

eficker
fuente
Esto es perfecto para mi situación. Tengo un simple index.htm con enlaces a Webmin y phpVirtualBox para mi servidor y quería que los 3 tuvieran el mismo favicon personalizado.
RyanScottLewis
¿Por qué necesitas =allí?
holms
44
El = puede no ser requerido , pero puede ser una modesta aceleración y es correcto. Vea los documentos: nginx.org/en/docs/http/ngx_http_core_module.html#location
Scott Stafford
En primer lugar, hay una necesidad de que el .Xen /var/www/media/images/favicon.X.ico? En segundo lugar, probé esta solución exactamente como se publicó, todavía no funciona. Quizás esto no funciona auto_index on;? Quizás requiera la recomendación de @AlexD.
JamesThomasMoon1979
Tienes razón, no se requiere el '.X'. Solo tenemos muchos favicons ubicados en la misma carpeta para los diferentes sitios que ejecutamos, así es como los nombramos de manera única. Debe ser el nombre de archivo exacto para el archivo que le gustaría servir como 'favicon.ico'. La directiva que enumero arriba permite nombrar arbitrariamente el archivo real al tiempo que permite que el servidor web sirva el nombre de archivo correcto 'favicon.ico' al navegador del cliente.
eficker
0

Esto significa que, donde sea que se extraigan los archivos del host virtual (directorio raíz), debe colocar ese archivo favicon.ico específico.

U4iK_HaZe
fuente