그누보드5에 어울리는 Caddy 2 설정파일입니다. > 서버관리자

서버관리자

서버관리자 모임 게시판 입니다.

그누보드5에 어울리는 Caddy 2 설정파일입니다. 정보

그누보드5에 어울리는 Caddy 2 설정파일입니다.

본문

링크에 설치부터 설명까지 다 적어뒀습니다!

 

우분투 20.04에서 Caddy 2를 설치했을 때 기준입니다.

 

설정 수정하기

 


nano /etc/caddy/Caddyfile

 

이제 밑 코드를 그대로 넣으면 됩니다.

 


# http3를 실험적으로 사용하시려면 밑 옵션을 쓰시면 됩니다. 필요없다면 지워도 됩니다.
{
experimental_http3
}
 
# www를 non-www로 리다이렉트, 반드시 자신의 주소로 변경하기
 
www.example.com {
redir https://example.com{uri}
}
 
# 도메인 네임 지정하기 및 해당 도메인 설정 시작, 반드시 자신의 주소로 변경하기
 
example.com {
 
# 인코딩 방법 지정
 
encode zstd gzip
 
# 사이트 디렉토리 설정 : 자신의 설정으로 변경하세요.
 
root * /var/www/gnuboard
 
# 정적파일 이용가능하게하는 설정
 
file_server
 
# php7.4-fpm 연결
 
php_fastcgi unix//run/php/php7.4-fpm.sock
 
# 로그 설정 DEBUG나 INFO를 선택해서 쓰시면 됩니다.
log {
output file /var/log/caddy/caddy.log {
roll_size 2MiB
}
format json
level DEBUG
}
 
# 보안 헤더 넣기
 
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-XSS-Protection "1; mode=block"
X-Frame-Options SAMEORIGIN
X-Content-Type-Options nosniff
}
 
# 캐시 컨트롤 지정(해당 확장자에 5184000 캐시 컨트롤 지정)
 
@static {
  file
  path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2
}
header @static Cache-Control max-age=5184000
 
# 이미지 불펌 방지 - 반드시 자신의 도메인으로 바꾸세요.
 
@fontPirate {
path /data/*
not header Referer https://example.com*
}
respond @fontPirate "Access denied" 403 {
close
}
 
# 그누보드 짧은 주소 리라이트
 
@content path_regexp content ^/content/([0-9a-zA-Z_]+)$
rewrite @content /bbs/content.php?co_id={re.content.1}&{query}
@title path_regexp title ^/content/([^/]+)/$
rewrite @title /bbs/content.php?co_seo_title={re.title.1}&{query}
@rss path_regexp rss ^rss/([0-9a-zA-Z_]+)$
rewrite @rss /bbs/rss.php?bo_table={re.rss.1}
@board path_regexp board ^/([0-9a-zA-Z_]+)$
rewrite @board /bbs/board.php?bo_table={re.board.1}&{query}
@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&{query}
@seo path_regexp seo ^/([0-9a-zA-Z_]+)/([^/]+)/$
rewrite @seo /bbs/board.php?bo_table={re.seo.1}&wr_seo_title={re.seo.2}&{query}
@id path_regexp id ^/([0-9a-zA-Z_]+)/([0-9]+)$
rewrite @id /bbs/board.php?bo_table={re.id.1}&wr_id={re.id.2}&{query}
 
# 설정 마지막
}

 

https://ball.ml

 

여기에 Caddy 2로 돌아가는 그누보드를 볼 수 있습니다.

 

테스트 서버라서 금방 없어질 수 있습니다.

 

 

짧은 주소도 완벽하게 작동합니다.

공감
1

댓글 58개

우성짱님 대단해요. 전 서버가 너무 약해서...
우님 서버에서 ./history 던가... 사용한 명령어 목록 다운받으면  그게 바로 보물일듯요.
짧은 주소 추가했습니다.

https://caddy.community/t/rewrite-apache-nginx-rewrite-block-to-caddy/9009

여기에 캐디 관리자들과 대화가 있습니다.

정확하게 짧은 주소를 표현해주고 있습니다. 그런데 내용관리 내용물의 경우

기존 주소로는 정확하게 연결이 되는데, 짧은주소로 설정시 연결이 안되고 홈 화면으로 돌아오거나 없는 게시판이라고 뜹니다 ㅠㅠㅠ

이것만 해결하면 WIKI에 올려준다고 하는데 ㅠㅠ 한번 봐주시겠어요? ㅠㅠ
짧은 주소는 안 써봤지만, 지금 보니 정규식이네요..  요즘 정규식 조금씩 보고 있는데.. ㅎㅎ

현재:
@content path_regexp content ^content/([0-9a-zA-Z_]+)$
rewrite @content /bbs/content.php?co_id={re.content.1}&rewrite=1

아마도 / 가 content앞에 빠지지 않았을까 생각됨.
@content path_regexp content ^/content/([0-9a-zA-Z_]+)$
rewrite @content /bbs/content.php?co_id={re.content.1}&rewrite=1
짧은주소를 숫자로 표기할때는 내용관리의 경우 영문으로 짧은주소가 되는데 이때는 홈페이지로 가고,

짧은주소를 한글표기 그대로 할때는 없는 게시판이라고 뜨네요 ㅠㅠ

https://ball.ml/

현재 숫자로 표기되게 했습니다.

밑에 내용관리 부분 회사소개 등을 누르면 홈 화면으로 갑니다 ㅠㅠ
대단하십니다.  아직 짧은 주소 이런것에는 관심이 없어서, 별로 생각을 안해 봤는데...

아래 부분만 처리하면 되는 것이네요
정규식에서 한글이 포함되어 있어야 될듯 합니다.
예시에 숫자는 마지막에 /가 없는데..  한글은 /가 들어가 있네요..

일단 없는 것으로 만들어 보면..

https://docker.apachezone.com/free/안녕하세요
로 가정하면

@board path_regexp board ^/([가-힝0-9a-zA-Z_]+)$
rewrite @board /bbs/board.php?bo_table={re.board.1}&rewrite=1

https://docker.apachezone.com/free/안녕하세요/
로 생각한다면

@board path_regexp board ^/([가-힝0-9a-zA-Z_]+)/$
rewrite @board /bbs/board.php?bo_table={re.board.1}&rewrite=1

로 테스트 부탁드립니다.


짧은 주소 글쓰기 - 게시판 목록에서 글쓰기 버튼 누르면 주소 붙은채로 홈페이지로 돌아감
짧은 주소 설정시 - 글 수정 버튼 누르면 홈페이지로 돌아감 (주소는 write가 붙은채로)

이 문제는 어떻게 해결할 수 있을까요? ㅠㅠ


짧은 주소 글쓰기 - 게시판 목록에서 글쓰기 버튼 누르면 주소 붙은채로 홈페이지로 돌아감
짧은 주소 설정시 - 글 수정 버튼 누르면 홈페이지로 돌아감 (주소는 write가 붙은채로)

이 문제는 어떻게 해결할 수 있을까요? ㅠㅠ

-------자답-------

@write path_regexp write ^/([0-9a-zA-Z_]+)$
rewrite @write /bbs/board.php?bo_table={re.write.1}&rewrite=1



@write path_regexp write ^/([0-9a-zA-Z_]+)$
rewrite @write /bbs/write.php?bo_table={re.write.1}&rewrite=1

이렇게 바꾸면 되겠네요!!

잠결에 적다보니 잘못적었나봐요.
예. 막 글을 수정하고 있었는데..  댓글이 달렸다고 글이 안되네요..

board.php가 아니라 write.php가 아닐까요

@write path_regexp write ^/([0-9a-zA-Z_]+)$
rewrite @write /bbs/board.php?bo_table={re.write.1}&rewrite=1


그렇게 빨리 댓글 다실 줄은 몰랐습니다 .ㅎㅎ

방금 수정했는데 똑같은데요 흠.. 왜 그럴까요?

test01/test01

테스트 부탁드립니다 .ㅠㅠ
  역시 정규식은 밝은 대낮에 하셔야..

@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&rewrite=1
아 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

아직도 잠이 덜깼네요 ㅋㅋㅋ 3시간 자고 출근했더니 ㅠㅠ

감사합니다. 도전해볼게요!
이제 글 쓰기는 잘되는데...

문제는 글 수정을 눌러도 새글쓰기로 되네요 ㅠㅠ

https://ball.ml/free/write?w=u&wr_id=3&page=

이 형태에서 뒤에 ?w=u&wr_id=3&page= 이게 안먹는 것 같습니다.
이것 하나로 될 것 같습니다.  테스트 부탁.. 그룹2가 ? 이것이 포함되는지 안되는지 모르겠습니다.

@write path_regexp write ^/([0-9a-zA-Z_]+)/write?(.*)$
rewrite @write /bbs/write.php?bo_table={re.write.1}{re.write.2}&rewrite=1
  ? & 가 바뀌었네요

그룹1이 free 가 되어야 되고
그룹2가 ?w=u&wr_id=6&page= 
가 되니
/bbs/write.php?w=u&wr_id=6&page=&bo_table=free
가 되면 될 것 같습니다.

rewrite @write /bbs/write.php{re.write.2}&bo_table={re.write.1}&rewrite=1


완전히 새로운 형태로 글쓰기와 글수정을 분리해서 적용해보려고 했는데 ㅠㅠㅠㅠㅠㅠ

@write path_regexp write ^/([0-9a-zA-Z_]+)/write$
rewrite @write /bbs/write.php?bo_table={re.write.1}&rewrite=1

path_regexp modify ^/([0-9a-zA-Z_]+)/write?w=u&wr_id=([0-9]+)&page=$
rewrite /bbs/write.php?w=u&bo_table={re.modify.1}&wr_id={re.modify.2}&rewrite=1


이렇게 만들어도 안되네요 크흐흐흐흑 ㅠㅠㅠ
또 틀렸네요..


직접 들어 오는 것을 console.log 로 찍어 볼수 없을 까요?

이번에는 ^/([0-9a-zA-Z_]+)/write\??(.*)$

그룹1은 free
그룹2는 ?가 빠집니다.  원래는 / 앞에도 \가 들어가야 되는데  \?가 먹을지 모르겠네요.

rewrite @write /bbs/write.php?bo_table={re.write.1}&{re.write.2}&rewrite=1
입력된 것만 찍히네요.  rewrite된 것을 확인해야 되는데..  이론적으로 수정이 되어야 되는데..
혹시 caddy server에 들어가 있는 config 한번 체크해 주세요.
로그 레벨을

log {
output file /var/log/caddy/caddy.log {
roll_size 2MiB
}
format json
}

이렇게 했거든요.

https://caddyserver.com/docs/caddyfile/directives/log

여기 있는대로 했는데... 흠.. 리라이트된 것이 안찍히네요.
  궁금점이 갑자기 생기네요..

아래는 아파치인데..  어떻게 옵션이 넘어 갈까요?
rewrite=1의 의미가 뭐죠?  이 의미가 옵션을 넘겨준다면 말이 되겠죠?


RewriteRule ^([0-9a-zA-Z_]+)/write$  bbs/write.php?bo_table=$1&rewrite=1    [QSA,L]
그렇다면 옵션이 두번 넘어가지 않을까요?
1. caddy에서도 rewrite=1 이 옵션인데 제대로 안넘어감.
2. 그래서 아래처럼 빼고...

3. bbs/write.php에서 bo_table은 넘어가니 글쓰기가 되겠죠?  그런데 $w 와 $wr_id 값이 안넘어 오는 것 같습니다.

rewrite @write /bbs/write.php?bo_table={re.write.1}&{re.write.2}
아까

@write path_regexp write ^/([0-9a-zA-Z_]+)/write\??(.*)$
rewrite @write /bbs/write.php?bo_table={re.write.1}&{re.write.2}&rewrite=1

이걸하니 댓글과 글이 안써지더라구요. w값이 넘어오지 않았습니다, 토큰값이 정상이 아닙니다? 이런 것이 나왔습니다.

캐디2 커뮤니티에도 질문을 올렸습니다. 여기 질게에도 내용을 정리해서 올려두었습니다. ㅎㅎ

$w 와 $wr_id 값이 안넘어가는게 가장 큰 핵심인 것 같습니다.
  캐디서버 코드도 보고 있습니다. ㅠㅠ
옵션에 debug를 넣으면 rewrite된 것도 로그가 되는 것 같습니다.
https://caddyserver.com/docs/caddyfile/options#global-options


방금 DEBUG로 수정 후 봤는데 같네요 ㅠㅠ

"common_log": "xxx.xxx.xxx.xxx - - [10/Jul/2020:04:26:50 +0000] \"GET /free/write?w=u&wr_id=7&page= HTTP/2.0\" 200 5974",
  "duration": 0.016856924,
  "size": 5974,
  "status": 200,
  "resp_headers": {
    "Content-Type": [
      "text/html; charset=utf-8"
    ],
    "Expires": [
      "0"
    ],
    "Vary": [
      "Accept-Encoding"
    ],
    "Server": [
      "Caddy"
    ],
    "Alt-Svc": [
      "h3-29=\":443\"; ma=2592000"
    ],
    "X-Xss-Protection": [
      "0;"
    ],
    "Set-Cookie": [
      "e1192aefb64683cc97abb83c71057733=ZnJlZQ%3D%3D; expires=Sat, 11-Jul-2020 04:26:50 GMT; Max-Age=86400; path=/"
    ],
    "Cache-Control": [
      "pre-check=0, post-check=0, max-age=0"
    ],
    "X-Content-Type-Options": [
      "nosniff;"
    ],
    "X-Frame-Options": [
      "SAMEORIGIN;"
    ],
    "Strict-Transport-Security": [
      "max-age=31536000;"
    ],
    "P3p": [
      "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""
    ],
    "Last-Modified": [
      "Fri, 10 Jul 2020 04:26:50 GMT"
    ],
    "Pragma": [
      "no-cache"
    ],
    "Content-Encoding": [
      "gzip"
    ]
  }
}

이렇게 나옵니다 ㅠㅠ
깃헙 코드 열심히 보고 있는데 Q&A 올리셔서..  ㅎㅎ
결국은 &rewrite=1이 들어가면서 write.php가 거부한것 같습니다.
아파치나 nginx에서 열심히 rewrite=1, rewrite=2 이것에 대한 의미를 못찾아서..

저는 이것을 thisgun님한테 물어 볼려고 했죠..

그런데 아파치나 nginx에서 옵션이 넘어가는 부분이 그부분 밖에 없다고 보고,  코드에서 옵션을 찾았습니다.  (캐디서버 매뉴얼이 너무 개떡 같아서..)


https://caddyserver.com/docs/caddyfile/concepts#placeholders

여기보니 {http.request.uri.query} 를 {query} 로 바꿀 수 있네요!!! 더 간단해졌어요 ㅎ
혼자 하는 것 보다 확실히 빠르게 만들수 있어서 좋네요.
위의 다른 곳도 &rewrite=1 로 되어 있는 곳을 &{query}로 변경해 주세요
&rewrite=1이 주소에서 query문을 담당하는 것이라고 하면 caddy에서 맞는 것으로 변경해 주어야 겠죠..  그런데 검색을 해도 이 의미를 잘 모르겠습니다.
rewrite=1 도 있고, rewrite=2도 있고..  <= 이것을 Q/A 물어 볼려고 했었죠.
전부 {query}로 바꿔도 같은 효과가 있네요!!

그런데 RSS를 보다보니 게시판 RSS link 주소가 각 게시물 링크가 생성이 안되고 그냥 게시판 링크로만 나오더라구요.

그누보드 5.3에서는 게시물 링크로 잘 나오는데, 5.4버전의 버그로 보입니다. 그래서 버그 제보했어요. ㅎㅎ

정리해서 Caddy2 설치하는 방법에 대해서 글을 올려봐야겠습니다.
전체 654 |RSS
서버관리자 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT