테스트 사이트 - 개발 중인 베타 버전입니다

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

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

 

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

 

설정 수정하기

 

[code]

nano /etc/caddy/Caddyfile

[/code]

 

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

 

[code]

# 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}

 

# 설정 마지막

}

[/code]

 

https://ball.ml

 

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

 

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

 

 

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

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 58개

우성짱님 대단해요. 전 서버가 너무 약해서...
우님 서버에서 ./history 던가... 사용한 명령어 목록 다운받으면 그게 바로 보물일듯요.
@만수킴 수박 겉핥기 지식입니다. ㅎㅎ

그래도 하나씩 성공하면 기분이 좋더라구요~
adm 접속도 바로 되나요?
@마젠토 넵 관리자 페이지 접속에 아무 문제없었습니다.

메뉴 생성도 잘 되고, 글 작성도 됩니다.
@마젠토 짧은 주소 추가했습니다.

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가 붙은채로)

이 문제는 어떻게 해결할 수 있을까요? ㅠㅠ
@우성짱 test 아이디라도
@마젠토

짧은 주소 글쓰기 - 게시판 목록에서 글쓰기 버튼 누르면 주소 붙은채로 홈페이지로 돌아감
짧은 주소 설정시 - 글 수정 버튼 누르면 홈페이지로 돌아감 (주소는 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= 이게 안먹는 것 같습니다.
https://n.wsgvet.com/bbs/write.php?w=u&bo_table=free&wr_id=28&page= 이 형태가

https://n.wsgvet.com/free/write?w=u&wr_id=28&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
@마젠토 음 안되네요. 다른 형태로 도전해볼게요!
@우성짱 {re.write.1}?{re.write.2} 넣어서 한번..
@마젠토 똑같이 새글로 가네요 ㅠㅠ
@우성짱 멘션을 댓글에서 수정 넣으면 가나요?
@마젠토 댓글을 수정해도 가는 같습니다!
@우성짱 ? & 가 바뀌었네요

그룹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

@modify path_regexp modify ^/([0-9a-zA-Z_]+)/write?w=u&wr_id=([0-9]+)&page=$
rewrite @modify /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
@마젠토 음.. 일단 여전히 새글쓰기로 나옵니다.

로그 찍어볼게요!
@우성짱 caddy 2에 로그에는 안 나오나요?
https://caddyserver.com/docs/caddyfile/directives/log
@마젠토 이제 밥 먹고 와서요 ㅎㅎ

바로 볼게요!
@마젠토

로그에는

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

그냥 이렇게 출력이 되네요. 흠...
방금은

[10/Jul/2020:03:30:07 +0000] \"GET /free/write?w=u&wr_id=6&page= HTTP/2.0\" 200 5769

이렇게 찍히기도 하네요!
@우성짱 입력된 것만 찍히네요. 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도 몰라서 어렵네요 ㅠㅠ
@우성짱 그렇다면 옵션이 두번 넘어가지 않을까요?
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에서 옵션이 넘어가는 부분이 그부분 밖에 없다고 보고, 코드에서 옵션을 찾았습니다. (캐디서버 매뉴얼이 너무 개떡 같아서..)
@마젠토 대박이네요. 캐디 서버 매뉴얼 최악인거 인정합니다.

정말 대단하십니다. ㅎㅎ 덕분에 마무리 했네요!
@우성짱 가능하면 싹 정리해서 새로 올려주세요. 다른 분들도 사용가능하게..
@마젠토

제 설정파일을 그대로 올리고, 해당 부분에 대한 설명을 추가하였습니다. ㅎㅎ
@우성짱 감사합니다. 제 블로그에도 옮겨 놓겠습니다. rewrite=1을 모두 바꿔야 될 것 같습니다.
@마젠토 넵 필요한 부분들 정리하면서 넣어뒀습니다.

불펌방지, 보안헤더 등등
@마젠토

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 설치하는 방법에 대해서 글을 올려봐야겠습니다.
@마젠토 링크에 설치 방법까지 올렸습니다. ㅎㅎ

게시판 목록

서버관리자

서버관리자 모임 게시판 입니다.
글쓰기
🐛 버그신고