Я настроил обратный прокси-сервер nginx и добавил к нему кеширование с помощью кеширования nginx.
Я могу проверить, кэширована ли запрошенная копия или нет, используя добавленный заголовок.
add_header X-Cache-Status $upstream_cache_status;
Я установил страницу кеширования, если к ней обращаются более двух раз.
proxy_cache_min_uses 2;
Кеширование Nginx работает должным образом, я вижу X-Cache-Status: MISS
дважды и позже X-Cache-Status: HIT
если я попытаюсь получить доступ к веб-странице из любого браузера.
Но если я попытаюсь проверить то же самое с помощью curl, если страница не кешируется, я получаю
X-Cache-Status: MISS
и если страница кешируется, я получаю
X-Cache-Status: HIT
Но моя проблема в том, что я не могу разогреть кеш с помощью curl. Я имею в виду, что я не могу заставить веб-сервер создавать конкретную страницу кеша, обращаясь к странице с помощью curl, даже если я обращаюсь к ней 10 раз с помощью curl.
это почему ?
Пока я пробовал.
curl -I https://example.com/page1
curl -v https://example.com/page1
curl --verbose https://example.com/page1
curl -svo /dev/null https://example.com/page1
с использованием последней версии centos 7x64
последний Nginx
[root]# curl -V
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.19.1 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz
update1: вот мой файл конфигурации nginx
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=10g use_temp_path=off;
server {
access_log /dev/null;
listen my_ip:80;
server_name example.com ;
location / {
access_log off;
proxy_cache mycache;
proxy_cache_min_uses 2;
proxy_cache_valid 200 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_pass http://box1.example.com/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#hide headers
proxy_hide_header Cache-Control;
#ignore header
proxy_ignore_headers Cache-Control Expires;
#add custom headers for users
add_header X-Cache-Status $upstream_cache_status;
expires 3h;
add_header Cache-Control "public, max-age=10800, s-maxage=10800";
#add no mobile redirect cookie
add_header Set-Cookie "__cf_mob_redir=0;Domain=.example.com;";
}
}
обновление 2:
Я использую cloudflare в своем домене. Я попытался полностью отключить службу Cloudflare и использовать ее только в качестве DNS-сервера. Попробовал снова с curl и получил тот же ответ.
Не имеет значения, включена облачная вспышка или нет. Curl не может сделать кеш страниц.
Обновление 3:
Пытался использовать разные User-agnts, но получил тот же ответ.
curl -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" -svo /dev/null http://example.com/some-page
0) Как я вижу, вы проверяете https://
сайт, но конфигурация для http://
версия. Думаю, в вашем случае это не проблема, но лучше проверить, правильно ли вы редактируете файл конфигурации.
1) Вы должны проверить, что получили от апстрима curl -I http://box1.example.com/page1
и я думаю, что будет Set-Cookie
заголовок. Поэтому вам следует либо добавить Set-Cookie
к proxy_ignore_headers
или удалите файлы cookie из ответа апстрима. Или используйте отдельные местоположения: одно для страниц, на которых вы можете игнорировать файлы cookie для кеширования, а другое - для страниц, на которых вы не можете игнорировать файлы cookie.