Nginx WP Super Cache rewrite rule 설정

WP Super Cache 플러그인을 사용하고자 한다면, 전에 만들었던 고유주소 사용을 위한 설정 파일을 수정해야 합니다. 만약 WP Super Cache 플러그인을 사용하지 않는다면 이 과정은 넘어가시면 되겠죠.

$ sudo su -

password:

매번 명령어를 넣을 때마다 앞에 sudo를 붙이는게 귀찮다면 위와 같이 입력하여 root 계정으로 전환한 후 작업하면 편합니다. 만약 sudo 붙이고 비밀번호 입력하는 과정이 전혀 불편하지 않다면, 위 과정은 넘어가시고, 모든 명령어 앞에 sudo 를 붙이시면 됩니다.

vi /usr/local/etc/nginx/conf.d/########-####-####-####-############/user.conf.custom

# 으로 되어 있는 부분이 기억이 나지 않는다면 아래와 같이 다시 확인할 수 있습니다.

$ more /etc/nginx/app.d/server.webstation-vhost.conf

cat 명령어로 파일 내용을 확인해도 되겠지만, 내용이 한 페이지를 넘어가는 경우에는 적합하지 않습니다. more 명령어를 사용하면 한 화면을 넘어가는 경우 한 화면 씩 볼 수가 있기 때문에 매우 편리합니다.

텍스트 파일을 보는 중에 사용할 수 있는 키
Return 한 줄 아래로
Space bar 한 페이지 아래로
b 한 페이지 위로
v 현재 파일 vi 로 편집하기
:f 파일명과 화면 마지막 줄번호 보이기
q 종료
h 도움말 보기

more 명령어에 대해 더 알아보고 싶으시면 도움말을 보시거나 아래 링크를 이용해 주세요.
레퍼런스: more command in Linux with Examples
https://www.geeksforgeeks.org/more-command-in-linux-with-examples/

만약 줄번호도 같이 보고 싶다면, 아래와 같이 cat 과 함께 쓰면 됩니다. -n 옵션은 비어있는 줄에도 번호를 메기는 것이고, -f 옵션은 비어있는 줄에는 번호를 메기지 않는 옵션입니다.

$ cat -n /etc/nginx/app.d/server.webstation-vhost.conf | more
$ cat -f /etc/nginx/app.d/server.webstation-vhost.conf | more

파일 보기를 하셨으면 다음과 같은 내용을 찾으셔야 합니다. 가상호스트를 여러개 만들어 놓았다면 server { … } 가 여러개 있을 것입니다. 여기서 현재 설정하고자 하는 서버이름을 찾습니다. 그러면 중괄호로 같이 묶여 있는 내용 중에서 경로를 확인할 수 있습니다.

server {
    listen      80;
    listen      [::]:80;
    listen      443 ssl http2;
    listen      [::]:443 ssl http2;
    server_name intellify.me;
…
    include /usr/local/etc/nginx/conf.d/########-####-####-####-############/user.conf*;
}

여기서 server.webstation-vhost.conf 파일을 직접 수정하지 않는 이유는, 시놀로지 NAS가 재부팅되면 설정파일이 수정 전으로 복구 되기 때문입니다. 때문에 시놀로지 NAS에는 재시작 후에도 원래대로 돌아가지 않는 사용자 설정 파일을 넣어둘 수 있는 공간을 제공하고 있습니다. 자, 이제 경로를 알았으니 파일을 수정해 봅시다.

vi /usr/local/etc/nginx/conf.d/########-####-####-####-############/user.conf.custom

고유주소 사용을 위해 만들어 놓은 내용이 보입니다.

location / {
try_files $uri $uri/ /index.php?$args;
}

dd 명령어로 한 줄 씩 내용을 지우거나 dG 명령어로 한 번에 싹 지웁니다.
i 를 눌러 입력모드로 두고 아래 내용을 붙여넣기 합니다.

# WP Super Cache rules
set $cache_uri $request_uri;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $cache_uri 'null cache';
}

if ($query_string != "") {
set $cache_uri 'null cache';
}

# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $cache_uri 'null cache';
}

# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $cache_uri 'null cache';
}

# Use cached or actual file if they exists, otherwise pass request to WordPress
location / {
try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args;
}

저는 Web Station의 가상 호스트 설정에서 HSTS (HTTP Strict Transport Security)를 활성화 해 두었습니다. 따라서 접속 시 HTTPS 만 사용하도록 되어 있기 때문입니다. 웹사이트 방문자가 HTTPS로 접속(https://로 시작하는 주소)하는 경우 WP Super Cache 에 의해 생성되는 캐시 파일명은 index-https.html 입니다. 만약 방문자가 HTTP로 접속(http://로 시작하는 주소)하는 경우에는 index.html 이라는 캐시 파일이 생성됩니다. 따라서 HTTPS를 사용하지 않는다면 location 부분에서 index-https.html을 index.html 로 수정해야 합니다.
이제 esc 키를 누르고 :wq 명령어를 통해 저장 후 종료합니다.
Nginx 웹서버 설정을 수정했으니, 수정 내용을 적용시키기 위해 재시작을 해줘야겠죠?

$ synoservice --restart nginx

레퍼런스: Nginx – WordPress.org

(서버 이전 준비 중이기 때문에 생각 나는대로 막 써놓는 중. 서버 이전 후 워드프레스 테마도 바꿀 예정이라 추후 내용도 다듬고 테마에 맞게 수정할 예정)
예사높임, 존댓말로 글을 쓰는게 나으려나, 어차피 아무도 안 오는 곳 그냥 반말로 찍찍 쓰는게 나으려나 고민 중… 서버 옮기고 테마 바꾸고 나면 둘 중 하나 정해서 다 수정해야겠….

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.