#nginx
Вопрос:
Мой сервер Nginx отвечает , 404
когда клиент запрашивает a /favicon.ico
, но все работает хорошо, если я переименую вещь как-нибудь иначе, например wip-icon.ico
. Почему?
Конфигурация Nginx:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
Обслуживаемая страница (на которой я сменил "/favicon.ico"
"/wip-icon.ico"
):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/x-icon" href="/wip-icon.ico" />
<title>Work in progress</title>
</head>
<body id="root">
<script src="bundle.js"></script>
</body>
</html>
Хост (где я раньше был favicon.ico
вместо wip-icon.ico
):
root@container:/usr/share/nginx/html# ls
50x.html bundle.js bundle.js.LICENSE.txt index.html wip-icon.ico
Проблема воспроизводима с помощью официального изображения Nginx Docker с использованием следующего сценария bash:
function runInNewContainer {
mkdir -p favicon-issue/www
cd favicon-issue/www
echo "<!doctype html><head><meta charset=utf-8><link rel="icon" type="image/x-icon" href="/$1" /></head>" > index.html
touch $1
echo
Ответ №1:
Проблема заключалась в кэшировании. Использование curl -I <host>:<port>/favicon.ico
ответил, 200 OK
потому что curl не кэшируется.
FROM nginxnCOPY . /usr/share/nginx/html' > Dockerfile
docker build --tag $1 .
docker run --name $1 -d -p $2:80 $1
echo "Listening at port $2!"
rm $1
cd ../..
}
runInNewContainer 'favicon.ico' 8888
runInNewContainer 'custom.ico' 8889
Ответ №1:
Проблема заключалась в кэшировании. Использование curl -I <host>:<port>/favicon.ico
ответил, 200 OK
потому что curl не кэшируется.