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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

서버관리자

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

그누보드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


로그에는

[10/Jul/2020:03:29:45 +0000] \"GET /free/write?w=u&wr_id=7&page= HTTP/2.0\" 200 5975"

그냥 이렇게 출력이 되네요. 흠...
입력된 것만 찍히네요.  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 설치하는 방법에 대해서 글을 올려봐야겠습니다.
전체 637 |RSS
서버관리자 내용 검색

회원로그인

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