XE를 위한 Nginx rewite 설정하기

이 페이지에서는 Nginx에 XE를 설치할 경우, rewrite 설정 방법에 대하여 설명합니다.

개요

XE에서는 짧은주소의 사용을 위하여 rewrite rule을 사용하고 있습니다. 웹서버로 apache를 사용할 경우, apache의 rewrite_mod와 .htaccess 파일을 사용하여 rewrite를 구동시킵니다. 하지만 웹서버가 Nginx일 경우에는, rewrite를 위하여 별도의 설정이 필요합니다.

설정 방법

설정방법은 크게 두가지 과정을 거칩니다.

  1. xe를 위한 rewrite rule이 기록된 xe_rewrite.conf 파일을 작성
  2. nginx의 설정파일인 nginx.conf 파일에 새로 작성한 xe_rewrite.conf 파일을 include하기

xe_rewrite.conf 작성하기

nginx의 conf 디렉토리로 이동합니다.
(NGINX_DIR은 실제 자신의 서버에 nginx가 설치된 디렉토리 경로로 치환해야 합니다.)

# cd NGINX_DIR/conf

xe_rewrite.conf 파일을 새로 작성합니다.

# pwd
NGINX_DIR/conf
# vi xe_rewrite.conf

xe_rewrite.conf 파일의 편집기에서 아래의 내용을 붙여넣습니다.

# reserve XE Layout Template Source File (*.html)
rewrite ^/(layouts|m.layouts)/(.+)/(.+).html$ /index.php last;

# conf, query, schema
rewrite ^/(modules|addons|widgets)/(.+)/(conf|queries|schemas)/(.+).xml$ /index.php last;

# static files
rewrite ^/(.+)/files/(member_extra_info|attach|cache|faceOff)/(.*) /files/$2/$3 last;
rewrite ^/(.+)/(files|modules|widgets|widgetstyles|layouts|m.layouts|addons)/(.*) /$2/$3 last;

# rss, blogAPI
rewrite ^/(rss|atom)$ /index.php?module=rss&act=$1 last;
rewrite ^/([a-zA-Z0-9_]+)/(rss|atom|api)$ /index.php?mid=$1&act=$2 last;
rewrite ^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)$ /index.php?vid=$1&mid=$2&act=$3 last;

# trackback
rewrite ^/([0-9]+)/(.+)/trackback$ /index.php?document_srl=$1&key=$2&act=trackback last;
rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ /index.php?vid=$1&document_srl=$2&key=$3&act=trackback last;

# administrator page
rewrite ^/admin/?$ /index.php?module=admin last;

# document permanent link
rewrite ^/([0-9]+)$ /index.php?document_srl=$1 last;

# mid link
rewrite ^/([a-zA-Z0-9_]+)/?$ /index.php?mid=$1 last;

# mid + document link
rewrite ^/([a-zA-Z0-9_]+)/([0-9]+)$ /index.php?mid=$1&document_srl=$2 last;

# vid + mid link
rewrite ^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/?$ /index.php?vid=$1&mid=$2 last;

# vid + mid + document link
rewrite ^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)$ /index.php?vid=$1&mid=$2&document_srl=$3 last;

# mid + entry title
rewrite ^/([a-zA-Z0-9_]+)/entry/(.+)$ /index.php?mid=$1&entry=$2 last;

# vid + mid + entry title
rewrite ^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)$ /index.php?vid=$1&mid=$2&entry=$3 last;

nginx.conf 수정하기

(가상서버 기능을 사용하는 경우에는 가상서버 설정파일을 수정해야 합니다.)

nginx.conf 파일을 편집기로 엽니다.

# pwd
NGINX_DIR/conf
# vi nginx.conf

nginx.conf를 아래와 같이 수정합니다.

http {
    include       mime.types;
    default_type  application/octet-stream;

    ....중략....

    server {
        listen      80;
        server_name  www.mydomain.com;
        root /home/public_html;
        index index.php;

        ....중략 ....

        # xe rewrite 적용하기
        include xe_rewrite.conf;
    }
}

위의 코드에서 봐야할 설정은 include xe-rewrite.conf입니다. xe 사이트에 대해 설정되어 있는 server 항목 안에 include xe-rewrite.conf; 코드가 위치하면 됩니다.

nginx 재시작

nginx를 재시작합니다.

# sudo service nginx restart

다시 XE를 설치를 진행합니다. 설치 진행 과정에서 짧은 주소에 관한 안내가 나타나지 않는다면, 짧은 주소를 정상적으로 사용할 수 있습니다.

출처 : https://github.com/xpressengine/xe-core/wiki/Nginx-rewite-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

4 댓글

  1. 핑백: - Begin's Blog

  2. 양주식 응답

    먼저 댓글에 친절하신 답글 감사드리구요 ^^
    쪼금 개념이 안잡히는데 위에 글 내용은 putty로 접속하셔서 vi편집기로 작성한다는 것인가요?

  3. Begin 글쓴이응답

    저같은 경우는 그냥 Windows환경에서 Editplus 프로그램을 이용해서 내용을 작성했구요.
    시놀로지에선 nginx의 설정을 수정하는것이 아니라(수정해도 재부팅하면 원래대로 돌아옵니다.)
    Web Station에서 vhost를 생성해서 WinSCP나 putty를 통해 맞는 경로를 찾아가야합니다.

    https://blog.beginms.com/307/의 글의 내용을 잘 읽어보시면 아시겠지만 이 곳은 단지 본문에 있는 xe_rewrite.conf의 내용만을 작성하기 위해 글에서 연결한것 뿐이죠.

    쉽게 설명하면 여기서 xe_rewrite.conf 파일을 Windows 환경에서 그냥 작성하셔서 만드시고
    (반드시 ANSI 인코딩으로)
    시놀로지를 root계정으로 WinSCP에 접속하신 후에
    /usr/local/etc/nginx/conf.d/(이부분부터 다름)a592a945-23a2-493e-93a6-fab3719090c0
    위 경로 같이 가상호스트를 만들면서 생긴 경로를 찾아가셔서 작성하신 xe_rewrite.conf를 업로드하시면 되겠습니다.

    • 양주식 응답

      한가지만 더 질문으 드려도 될까요?
      이 부분이 정말 이해가 안가서요;;;
      nginx의 conf 디렉토리로 이동합니다.
      (NGINX_DIR은 실제 자신의 서버에 nginx가 설치된 디렉토리 경로로 치환해야 합니다.)
      시놀로지 서버를 아무리 찼아봐도 “NGINX DIR “이란 디텍토리는 없던데 경호인가요? 아니면 어떤 지시자 인가요?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다