Como definir um favicon.ico para um host virtual específico no Nginx?

26

Estou usando o Nginx como meu servidor da web pela primeira vez. Não tive problemas para configurá-lo e tudo funciona muito bem. O problema surgiu quando o designer me perguntou se poderia me enviar "o ícone na barra de título" para "colocá-lo lá em cima".

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

Meu diretório:

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

É possível colocar um favicon.ico específico para cada host virtual? Onde você deve colocar esse arquivo e como configurá-lo?

EDITAR:

Acabei de perceber que era um problema completamente diferente. Ambas as respostas estavam corretas, mas meu problema era a permissão. Não sei por que o arquivo favicon.ico acabou tendo permissões 600 e, é claro, no momento em que fiz:

chmod +r favicon.ico

Funcionou como um encanto. Vou deixar isso aqui se acontecer com outra pessoa.

ersamy
fonte
A permissão 600 pode estar relacionada à umask (umask para esse usuário está configurada para 077, por exemplo).
jcisio
A questão das permissões também o corrigiu!
Kzqai
Problema de permissão aqui também. Provavelmente devido à criação do arquivo ico, enviando um png para um site.
Aaron Storck

Respostas:

14

favicon.icoO arquivo deve ser colocado no diretório raiz do site, definido pela rootdiretiva nginx . Ou você pode passar o URL para o favicon usando o seguinte código em HTML:

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

AlexD
fonte
Eu tenho meu arquivo favicon.ico lá ... ainda não está funcionando
ersamy
1
Verifique grep favicon.ico nginx-{access,error}.loge verifique a saída do file favicon.ico- O IE não entende nada além do formato ICO. Além disso, sua configuração mostra apenas um VirtualHost.
AlexD #
1
bom com porcaria php, não é bom com arquivos estáticos de configuração
holms
55

É assim que fazemos em nossa configuração específica do vhost sites-available/[vhostconfigfile]sob a diretiva do servidor:

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

Dessa forma, você pode colocá-lo onde quiser, sem html.

O ".X". não é necessário e indica apenas que você pode alterar esse nome de arquivo para o que quiser. Eu simplesmente uso o ".X". como espaço reservado para identificar o subdomínio específico ao qual estou referenciando. É puramente para organização.

eficker
fonte
Isso é perfeito para a minha situação. Eu tenho um index.htm simples com links para Webmin e phpVirtualBox para o meu servidor e queria que todos os 3 tivessem o mesmo favicon personalizado.
RyanScottLewis
por que você precisa =lá?
holms
4
O = pode não ser necessário , mas pode ser um aumento modesto e está correto. Consulte os documentos: nginx.org/en/docs/http/ngx_http_core_module.html#location
Scott Stafford
Em primeiro lugar, há uma necessidade de .Xnos /var/www/media/images/favicon.X.ico? Segundo, tentei esta solução exatamente como postada, ainda não funcionando. Talvez isso não funcione auto_index on;? Talvez exija a recomendação do @AlexD.
JamesThomasMoon1979
Você está certo, o '.X' não é necessário. Temos apenas muitos ícones favoritos, todos localizados na mesma pasta para os diferentes sites que executamos, então é assim que os nomeamos exclusivamente. Deve ser o nome exato do arquivo que você deseja que seja o 'favicon.ico'. A diretiva listada acima permite a nomeação arbitrária do arquivo real, enquanto permite ao servidor da web servir o nome de arquivo correto 'favicon.ico' ao navegador do cliente.
Eficker #
0

Isso significa que, onde quer que os arquivos do host virtual sejam retirados (diretório raiz), você deve colocar esse arquivo favicon.ico específico.

U4iK_HaZe
fonte