nginx에서 bot에 대해 캐시를 보이고 싶습니다.
10534 단어 proxy_no_cachenginx도커
그렇다고 해서, 옛 유산이므로 지금도 리팩토링 윤기. 시간이 걸립니다.
그럼 nginx로 캐시하면 좋을까? 라고 생각했지만 갱신 내용은 되는 빨리 보여주고 싶다는 요건도 있어 또 귀찮다.
같은 것을 할 수 없을까-, 라고 생각했으므로 검증해 보겠습니다.
검증 환경
win10 Home입니다.
Docker Toolbox 넣습니다.
htps : // 기주 b. 코 m / 도 c 케 r / 토오보 x / 레아 아세 s
함께 docker-compose도 넣고 있습니다.
설치하고 시작했습니다.
일단 기본 nginx를 움직입니다.
docker-compose.yml
version: '3'
services:
nginx:
image: nginx
ports:
- "8080:80"
volumes:
- ./content:/usr/share/nginx/html/content
- ./conf.d:/etc/nginx/conf.d
- ./cache:/usr/share/nginx/cache
./content/index.html
<html>
<body>
Hello, 俺
</body>
</html>
./conf.d/default.conf
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
$ docker pull nginx:latest
$ docker-compose up -d
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------
dockers_nginx_1 nginx -g daemon off; Up 0.0.0.0:8080->80/tcp
$ docker-machine ip
192.168.99.100
그리고 192.168.99.100을 열면 default의 녀석이 표시된다.
다만, 192.168.99.100/content/는 403이 되어, 뭔가 표시되지 않았으므로,
컨테이너 들어 index.html을 다시 만들어 보았다. 파일의 permission 라든지.
$ docker-compose.exe exec nginx bash
그러면 표시되었다. 어쩐지 문자 깨져 있지만 여기에서는 신경 쓰지 않는다.
캐시 설정
그런 이유로 우선 캐시 설정.
./conf.d/default.conf
proxy_cache_path /usr/share/nginx/cache keys_zone=zone1:1m levels=1:2;
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /content {
proxy_cache zone1;
proxy_cache_valid any 60m;
proxy_pass http://localhost:81;
break;
}
}
server {
listen 81;
server_name _;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/access81.log;
error_log /var/log/nginx/error81.log;
}
이것을 저장하고
docker-compose restart
를 실행하십시오.proxy_cache는 proxy에서 사용하는 것 같기 때문에 다른 포트 세우면서 같은 컨텐츠를 보고 있습니다.
192.168.99.100/content/을 열면
./cache/
에 파일이 있습니다.$ curl http://192.168.99.100:8080/content/ <html>
<body>
Hello,俺
</body>
</html>
$ du -l ./cache
4 ./cache/0/81
4 ./cache/0
4 ./cache/e/7a
4 ./cache/e
8 ./cache
여기까지는 보통
Bot과 사람으로 처리를 분리
이것으로 어떨까.
./conf.d/default.conf
proxy_cache_path /usr/share/nginx/cache keys_zone=zone1:1m levels=1:2;
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
set $nocache 1;
if ( $http_user_agent ~* (bot|crawler) ) {
set $nocache 0;
}
location /content {
proxy_no_cache $nocache;
proxy_cache_bypass $nocache;
proxy_cache zone1;
proxy_cache_valid any 60m;
proxy_pass http://localhost:81;
break;
}
}
server {
listen 81;
server_name _;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/access81.log;
error_log /var/log/nginx/error81.log;
}
html을 업데이트합니다.
$ sed -i 's/Hello/Bye/' content/index.html
$ cat content/index.html
<html>
<body>
Bye, 俺
</body>
</html>
그리고 Docker-compose restart하여 재확인
$ curl http://192.168.99.100:8080/content/
<html>
<body>
Bye,俺
</body>
</html>
캐시가 아닌 것이 돌아왔다.
그래서, bot의 경우는 · ·
$ curl http://192.168.99.100:8080/content/ -H "User-Agent: hogehoge-bo
t (http://hogehoge)"
<html>
<body>
Hello,俺
</body>
</html>
캐시가 돌아왔다!
갔다.
시도에 캐시 지우자.
$ rm -rf ./cache/*
$ curl http://192.168.99.100:8080/content/ -H "User-Agent: hogehoge-bot (http://hogehoge)"
<html>
<body>
Bye,俺
</body>
</html>
당연하지만 최신 데이터가 돌아온다.
갔다!
이것 (proxy_no_cache) 사용하면 좋겠네요.
htp // w w2. 마츠에 ct. 아 c. jp / 칭찬 / 가나야마 / xt / ngin x / 65. HTML
Reference
이 문제에 관하여(nginx에서 bot에 대해 캐시를 보이고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ikegam1/items/3ce6a138d254324e69cc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)