디지털오션 워드프레스 varnish

Digitalocean에서 자동으로 설정해주는 워드프레스는 한달 10달러 부터 시작이 가능하다. 5달러로도 가상서버를 만들 수 는 있지만 워드프레스를 설치하려면 직접 설치를 해줘야 한다. 또한 RAM이 부족해 금방 에러가 뜨며 접속이 불가능해진다.
error establishing a database connection
라는 에러가 자주 뜨는 데 이는 램이 부족해 mysql을 꺼주기 떄문에 일어나는 현상이다. 물론 수시로 mysql을 켜주는 것도 가능하나 매우 귀찮고 직접 실험해보면 알 수 있겠지만 F5를 5번만 연타해줘도 다시 같은 에러가 뜨면서 접속이 불가능해진다.

이는 Varnish라는 걸 서버에 설치해줘 해결이 가능하다. 그럼 워드프레스가 설치되어있다고 가정하고 varnish를 설치하고 설정하는 법을 알아보자.

1. 설치 준비

설치하는 과정은 복사 붙혀넣기가 자주 이루어지기 때문에 디지털오션 기본 콘솔로는 설치가 까다롭고 귀찮다. 따라서 Putty를 설치해 이를 통해서 서버에 접속해보자.

링크 이 링크에 접속을 한뒤 putty.exe를 설치해주고 실행을 시켜보자.

캡처

캡처

당연히 위에 IP는 자신의 IP 또는 도메인을 입력하고 아래 Open을 누르자
그 이외의 것들은 그대로 나두어도 된다. 이후 유저 아이디와 비밀번호 (디지털오션 콘솔에 접속할때 사용하는 것과 동일)를 입력한다. 그럼 접속이 되었다.
참고로 붙혀넣기는 컨트롤 V가 아니라 마우스 오른쪽 클릭이다.

2. Varnish 설치하기

콘솔에 다음과 같은 라인을 차례대로 입력해준다.

apt-get install apt-transport-https

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | apt-key add –

echo “deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0” >> /etc/apt/sources.list.d/varnish-cache.list

apt-get update

apt-get install varnish

이렇게 5개의 줄을 차례대로 입력하고 아무런 에러가 뜨지 않았다면 varnish가 설치가 된 것이다.

3. Plugin 설치

워드프레스 대시보드에 들어가서 ‘Varnish HTTP Purge’이라는 플러그인을 하나 설치해준다.

4. Custom Permalinks

원본 글에 따르면 permalink를 바꾸어 주어야 위 플러그인이 사용가능 하다는데 확인은 하지 못했다. 그냥 해주자.

setting -> Permalink로 들어가서 ‘Custom Structure;에 /%year%/%monthnum%/%post_id%를 입력해주고 저장을 누른다. 그 다음 콘솔창에

a2enmod rewrite

를 쳐주자.

5. Apache 이동

파일 2개를 수정해주어야한다.

sudo nano /etc/apache2/ports.conf

를 쳐서 파일을 연뒤 맨 위를 수정을 해야된다.
각 라인중에 #으로 시작하는 것은 주석이므로 상관 안 해되 된다.

Listen 80

Listen 8080으로 바꾸어 주자.
저장을 할때는 컨트롤+X를 누른뒤 y를 치고 엔터를 한번 더 쳐주면 된다.  만약 저장이 되었는지 확인해보고 싶으면 다시 nano로 들어가 보아도 된다. 참고로 콘솔에 전에 친 라인을 다시 치고 싶으면 화살표 위키를 눌러서 찾으면 된다.

sudo nano /etc/apache2/sites-enabled/000-default.conf
로도 들어가서 맨위의
<VirtualHost *:80><VirtualHost *:8080> 로 바꾸어 주자. 똑같이 저장을 해주자.

6. Serve from Varnish

sudo nano /etc/default/varnish

로 들어가 주자. 화살표 키로 쭉 내려가보면 DAEMON어쩌구로 시작하는 부분이 있다. 거기 첫줄의 6081을 80으로 바꾸어 주자. 즉 마지막을 이렇게 바꾸어 주면 된다.

DAEMON_OPTS=”-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m”

7. 나머지

이제 하나만 더 수정하면 된다.

sudo nano /etc/varnish/default.vcl

로 들어간뒤 모든 줄을 지워주자. 그리고 아래 코드를 붙혀넣기 하자.

 

#
# This is an example VCL file for Varnish.
#
# It does not do anything by default, delegating control to the
# builtin VCL. The builtin VCL is called when there is no explicit
# return statement.
#
# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/
# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples.

# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;

# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
acl purge {

"localhost";

"000.000.000.000";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.

if (req.method == "PURGE") {
if (client.ip !~ purge) {

return (synth(405));

}

if (req.http.X-Purge-Method == "regex") {

ban("req.url ~ " + req.url + " &amp;&amp; req.http.host ~ " + req.http.host);

return (synth(200, "Banned."));

} else {
return (purge);
}
}
set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", "");

set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", "");

set req.http.cookie = regsuball(req.http.cookie, "wordpress_test_cookie=[^;]+(; )?", "");

if (req.http.cookie == "") {

unset req.http.cookie;
}
if (req.url ~ "wp-admin|wp-login") {
return (pass);
}
}

sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
if (beresp.ttl == 120s) {

set beresp.ttl = 1h;

}
}

sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}

참!고!로! 중간에 000.000.000.000에 서버 ip를 집어넣자. 주소창에 치면 바로 웹사이트로 보내지는 그 ip

8. 마무리

sudo service varnish start

sudo service apache2 restart

sudo service varnish reload

차례대로 콘솔에 처주면 이제 웹사이트로 들어가 질꺼다.

admin으로 로그인 한뒤 맨 위에 Purge Varnish 한번 눌러주자.

예전에는 F5 3~4번만 연타해도 사이트가 터지는걸 이젠 몇십번을 연타해도 터지지가 않는다. 끝

어딘가 잘 안되면 링크 에서 직접 확인좀