Как установить favicon.ico для конкретного виртуального хоста на Nginx?

26

Я впервые использую Nginx в качестве своего веб-сервера. У меня не было никаких проблем с настройкой, и все отлично работает. Проблема возникла, когда дизайнер спросил, может ли он отправить мне «иконку в строке заголовка», чтобы «поставить ее там».

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

Мой каталог:

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

Можно ли разместить определенный favicon.ico для каждого виртуального хоста? Где вы должны поместить этот файл и как вы можете настроить его?

РЕДАКТИРОВАТЬ:

Я просто понял, что это была совершенно другая проблема. Оба ответа были правильными, но моей проблемой было разрешение. Я не знаю, почему файл favicon.ico получил 600 разрешений и, конечно, в тот момент, когда я сделал:

chmod +r favicon.ico

Работал как шарм. Я оставлю это здесь, если это случится с кем-то еще.

ersamy
источник
Разрешение 600 может относиться к umask (например, для этого пользователя установлено значение 077).
jcisio
Проблема с разрешениями исправила и меня!
Kzqai
Вопрос разрешения здесь тоже. Вероятно, из-за создания файла ico путем загрузки png на сайт.
Аарон Сторк

Ответы:

14

favicon.icoФайл должен быть помещен в корневой каталог сайта, который определяется rootдирективой nginx . Или вы можете передать URL-адрес favicon, используя следующий код в HTML:

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

AlexD
источник
У меня там есть файл favicon.ico ... все еще не работает
ersamy
1
Проверьте grep favicon.ico nginx-{access,error}.logи проверьте вывод из file favicon.ico- IE не понимает ничего, кроме формата ICO. Также ваш конфиг показывает только один VirtualHost.
AlexD
1
хорошо с php дерьмом, плохо с настройкой статических файлов
holms
55

Вот как мы делаем это в нашем конкретном config vhost ( sites-available/[vhostconfigfile]) под директивой сервера:

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

Таким образом, вы можете поместить его в любом месте, без каких-либо HTML.

".X." не требуется вообще, и означает только то, что вы можете изменить это имя файла на что угодно. Я просто использую «.X.» в качестве заполнителя для определения конкретного субдомена, на который я ссылаюсь. Это чисто для организации.

eficker
источник
Это идеально подходит для моей ситуации. У меня есть простой index.htm со ссылками на Webmin и phpVirtualBox для моего сервера, и я хотел, чтобы у всех трех был один и тот же пользовательский значок.
RyanScottLewis
зачем тебе =там?
Холмс
4
Знак = может не потребоваться , но это может быть небольшое ускорение и является правильным. См. Документы: nginx.org/en/docs/http/ngx_http_core_module.html#location
Скотт Стаффорд,
Во-первых, есть ли необходимость .Xв /var/www/media/images/favicon.X.ico? Во-вторых, я попробовал это решение именно так, как написано, все еще не работает Возможно, это не работает auto_index on;? Возможно, это требует рекомендации @AlexD.
JamesThomasMoon1979
Вы правы, «.X» не требуется. У нас просто есть много значков, расположенных в одной папке для разных сайтов, которые мы запускаем, поэтому мы называем их уникально. Это должно быть точное имя файла для файла, который вы хотели бы использовать как «favicon.ico». Директива, которую я перечислю выше, позволяет произвольно именовать фактический файл, в то же время позволяя веб-серверу предоставлять правильное имя файла «favicon.ico» браузеру клиента.
eficker
0

Это означает, что куда бы вы ни брали файлы виртуального хоста (корневой каталог), вы должны поместить этот конкретный файл favicon.ico.

U4iK_HaZe
источник