VPS 또는 전용 서버에서 Nginx로 FastCGI 캐싱을 설정하는 방법

Nginx에는 FastCGI 모듈이 있습니다. 이 모듈에는 지시문이 포함되어 있습니다. PHP 백엔드에서 제공되는 동적 컨텐츠는이를 사용하여 캐시하거나 저장할 수 있습니다. 이렇게하면 문제가 해결되며 추가 페이지 캐싱 솔루션 및 응용 프로그램 별 플러그인으로 문제를 해결할 필요가 없습니다..


VPS에서 FastCGI 캐싱 설정

우선, VPS에서 PHP로 Nginx를 설정하고 구성해야합니다. 이제 캐싱을 활성화해야하는 가상 호스트 구성 파일을 편집해야합니다..

나노 / etc / nginx / sites-enabled / vhost

특별 참고 사항 : 전문가 및 사용자 리뷰를 포함하여이 범주의 주요 웹 호스트를 찾으려면 HostAdvice의 최고의 VPS 호스팅 페이지를 참조하십시오.

외부 서버 {}  지시문에서 파일의 맨 위에 다음 행을 추가해야합니다.

fastcgi_cache_path / etc / nginx / cache levels = 1 : 2 keys_zone = FASTCACHE : 100m 비활성 = 60m;
fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri";

캐시 위치, 크기, 메모리 영역 이름, 서브 디렉토리 레벨 및 비활성 타이머를 나타내는“fastcachepath”지시문이 표시됩니다..

하드 디스크의 어느 위치에서나 자유롭게 사용할 수 있지만 크기를 선택할 때 매우주의해야하지만 크기는 vps의 RAM 및 스왑 결합 RAM보다 작아야합니다. 크기가이 기준을 초과하면 ‘메모리를 할당 할 수 없습니다’라는 오류가 표시됩니다. 퍼지 섹션의 레벨 옵션을 확인해야합니다. – Nginx는 ‘비활성’옵션으로 지정된 시간 동안 캐시에 액세스하지 않으면 캐시를 제거합니다..

캐시 파일 이름의 해시는 ‘fastcgicachekey’지시문에 의해 명시됩니다. 지시문에 따라 액세스 된 파일은 Nginx에 의해 MD5로 암호화됩니다..

이제 PHP 요청을 전달하는 위치 지시문을 php5-fpm으로 이동해야합니다. “location ~ .php $ {}”에 다음 줄을 추가해야합니다.

fastcgi_cache FASTCACHE;
fastcgi_cache_valid 200 60m;

위의 행에서‘fastcgi_cache’는‘fastcgicache_path’지시문에서 이미 언급 한 메모리 영역 이름을 나타내며 캐시도이 영역에 저장됩니다.

캐시 된 객체는 기본적으로 여기에 제공된 헤더 중 하나에 의해 지정된 기간 동안 Nginx에 의해 저장됩니다 : X-Accel-Expires, Expires, Cache-Control.

이러한 헤더가 누락 된 경우 기본 캐시 수명은 위 줄에있는 ‘fastcgicachevalid’지시문으로 지정됩니다. 위 라인의 구성에 따라 캐싱은 상태 코드 200을 갖는 응답 만 수행됩니다..

구성 테스트

이제 구성 테스트가 수행됩니다.

서비스 nginx 구성 테스트

모든 것이 정상이면 Nginx를 다시로드하십시오.

서비스 nginx 재로드

이제 다음과 같은 vhost 파일이 나타납니다.

fastcgi_cache_path / etc / nginx / cache levels = 1 : 2 keys_zone = FASTCACHE : 100m 비활성 = 60m;
fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri";
서버 {
듣고 80;
루트 / usr / share / nginx / html;
인덱스 index.php index.html index.htm;
server_name yourdomainname.com;

위치 / {
try_files $ uri $ uri / /index.html;
}
위치 ~ \ .php $ {
try_files $ uri = 404;
fastcgi_pass 유닉스 : /var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_params 포함;
fastcgi_cache FASTCACHE;
fastcgi_cache_valid 200 60m;
}
}

VPS에서 FastCGI 캐싱 테스트

먼저 UNIX 시간 탭을 출력하는 PHP 파일을 만들어야합니다.

/usr/share/nginx/html/test.php

그런 다음 다음을 삽입하십시오.

<?PHP
에코 시간 ();
?>

웹 브라우저를 사용하거나이 파일을 여러 번 요청하려면 curl.

root @ server : ~ # curl http : //localhost/test.php; echo
1372986152
root @ server : ~ # curl http : //localhost/test.php; echo
1372986152
root @ server : ~ # curl http : //localhost/test.php; echo
1372986152

모든 요청에서 동일한 타임 스탬프를 볼 수있을 정도로 운이 좋으면 캐싱이 적절한 방식으로 작동합니다..

다음으로, 캐시 위치의 재귀 목록을 수행하여이 요청의 캐시를 찾아야합니다..

root @ vps : ~ # ls -lR / etc / nginx / cache /
/ etc / nginx / cache / :
총 0
drwx —— 3 www-data www-data 60 10 월 28 일 18:53 e

/ etc / nginx / cache / e :
총 0
drwx —— 2 www-data www-data 60 10 월 28 일 18:53 18

/ etc / nginx / cache / e / 18 :
총 4
-rw ——- 1 www-data www-data 117 10 월 28 일 18:53 b777c8adab3ec92cd43756226caf618e

응답에 ‘X-Cache’헤더를 추가하려면 Nginx의 도움을 받아이를 수행 할 수 있습니다. 캐시가 누락되었는지 또는 적중되었는지를 나타냅니다..

이것은 위에 추가해야합니다 서버 {} 지령:

add_header X-Cache $ upstream_cache_status;

이제 Nginx 서비스를 다시로드하고 curl로 자세한 요청을 수행하여 새 헤더를 확인하십시오..

root @ vps : ~ # curl -v http : //localhost/test.php
* localhost 포트 80 (# 0)에 연결하려고합니다.
* 127.0.0.1 시도…
* 연결
* 로컬 호스트 (127.0.0.1) 포트 80 (# 0)에 연결
> GET /test.php HTTP / 1.1
> 사용자 에이전트 : curl / 7.26.0
> 호스트 : localhost
> 동의하기: */*
>
* 지속적인 연결을 통한 HTTP 1.1 이상, 파이프 라이닝 지원
< HTTP / 1.1 200 OK
< 서버 : nginx
< 날짜 : 2017 년 4 월 27 일 화요일 09:10:45 GMT
< 콘텐츠 유형 : text / html
< 전송 인코딩 : 청크
< 연결 : 연결 유지
< X- 캐시 : 히트
<
* 로컬 호스트를 호스트하기위한 연결 # 0은 그대로 유지
1373035828 * 결산 연결 # 0

캐시 예외 설정

인증과 같은 일부 경우에는 페이지를 캐시하지 않아도됩니다. ‘requesturi’,‘rquestmethod’및‘http_cookie’와 같은 변수를 기반으로 이러한 콘텐츠를 캐시에서 제외 할 수 있습니다.

다음은 사용해야하는 구성의 예입니다. 서버 {}문맥:

$ no_cache를 0으로 설정;
if ($ request_method = POST)
{
$ no_cache 1을 설정;
}
if ($ query_string! = "")
{
$ no_cache 1을 설정;
}
if ($ request_uri ~ * "/ (관리자 /|login.php)")
{
$ no_cache 1을 설정;
}
($ http_cookie = "PHPSESSID")
{
$ no_cache 1을 설정;
}

다음 줄을 입력해야합니다  위치 ~ .php $ {} ‘$ no_cache’변수를 적절한 파생 상품에 적용하려면 :

fastcgi_cache_bypass $ no_cache;
fastcgi_no_cache $ no_cache;

위에 명시된 조건과 관련된 요청에 대한 기존 캐시는 ‘factcgicachebypass’지시문에 의해 무시되는 반면, 명시된 요구 사항이 충족되면 ‘fastcginocache’는 요청 캐시를 중지합니다..

캐시 제거

‘fastcgicachekey’파생물에 대해 설정 한 변수는 캐시의 명명 규칙을 기반으로합니다..

fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri";

이 변수에 따라, 우리가“http : // localhost / time / php”를 요청했을 때의 값은 다음과 같습니다.

fastcgi_cache_key "httpGETlocalhost / test.php";

이 문자열이 MD5 해싱을 통과하면 다음 문자열이 출력됩니다.

9552f2a3f53b52db6409e47b57ff63c0

캐시의 파일 이름이 이것에 의해 형성됩니다. 서브 디렉토리에 대해 “levels = 1 : 2″를 설정 했으므로 디렉토리의 첫 번째 레벨은이 MD5 문자열의 마지막에서 첫 번째 문자로 이름이 지정되고 두 번째 레벨은 첫 번째 레벨 다음에서 마지막 두 문자를 갖습니다..

따라서이 캐시 인 경우 다음은 전체 디렉토리 구조입니다.

/ etc / nginx / cache / e / 18 / 9552f2a3f53b52db6409e47b57ff63c0

이제이 캐시를 기반으로 원하는 언어로 제거 스크립트를 개발하기 만하면됩니다. POST 된 URL의 캐시를 제거하기 위해 아래에 PHP 스크립트가 제공됩니다..

/usr/share/nginx/html/purge.php

끼워 넣다

<?PHP
$ cache_path = ‘/ etc / nginx / cache /’;
$ url = parse_url ($ _ POST [ ‘url’]);
if (! $ url)
{
echo ‘잘못된 URL을 입력했습니다’;
주사위();
}
$ scheme = $ url [ ‘scheme’];
$ host = $ url [ ‘호스트’];
$ requesturi = $ url [ ‘경로’];
$ hash = md5 ($ scheme.’GET ‘. $ host. $ requesturi);
var_dump (unlink ($ cache_path. substr ($ hash, -1). ‘/’. substr ($ hash, -3,2). ‘/’. $ hash));
?>

이제 제거 할 URL과 함께이 파일에 POST 요청을 보내야합니다..

curl -d ‘url = http : //www.yourwesitename.com/test.php’http://yourwebsitename.com/purge.php

이제 캐시가 제거되었는지 여부를 나타내는 스크립트 출력이 True 또는 False로 표시됩니다. 액세스를 제한하고이 스크립트가 캐시되지 않도록 배제해야합니다..

상위 3 개의 VPS 서비스를 확인하십시오.

A2 호스팅

시작 가격 :
$ 5.00


신뢰할 수 있음
9.3


가격
9.0


사용자 친화적
9.3


지원하다
9.3


풍모
9.3

리뷰 읽기

A2 호스팅 방문

스칼라 호스팅

시작 가격 :
$ 12.00


신뢰할 수 있음
9.4


가격
9.5


사용자 친화적
9.5


지원하다
9.5


풍모
9.4

리뷰 읽기

ScalaHosting 방문

주인공

시작 가격 :
$ 3.95


신뢰할 수 있음
9.3


가격
9.3


사용자 친화적
9.4


지원하다
9.4


풍모
9.2

리뷰 읽기

Hostinger 방문

관련 사용법 기사

  • Ubuntu 18.04 VPS 또는 전용 서버에 LEMP (Linux, Nginx, MySQL, PHP) 스택을 설치하는 방법
    중급
  • 동일한 Ubuntu VPS 또는 전용 서버에서 Nginx와 Apache를 함께 구성하는 방법
    중급
  • Ubuntu 18.04 VPS 또는 전용 서버에서 Nginx로 암호화를 설정하는 방법
    중급
  • CentOS 7 가상 서버 또는 전용 서버에서 Nginx 웹 서버를 강화하는 방법
    전문가
  • Nginx로 WordPress를 설치하는 방법 & 레디 스
    초보자
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me