0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cloudflare workersでリバースプロキシしたメモ

Posted at

ドメインをcloudflareで購入した
github pagesからcloudflare pagesに移行した
ここで、github pagesはリポジトリをサブディレクトリとしてホストするのに対して、cloudflare pagesはサブドメインとしてホストする
これによりそのままリポジトリを紐付けるだけでは移行ができなかった

cloudflare workers 1つでこれを解決した

新規cloudflare workersを作成し、カスタムドメインとして購入したドメインのルートをサブドメイン無しで紐付ける
コードは以下の通り

const
d={
  'petit.mcbeeringi.dev':'/petit',
  'dotfiles.mcbeeringi.dev':'/dotfiles',
  'mcbeeringi.github.io':'/ghp',
  'pages.mcbeeringi.dev':''
};

export default{
  fetch:req=>(async(
    r2u=x=>new URL(x.url),r=r2u(req),rp=r.pathname,li=Object.entries(d),
    rd=(x,{le='',tr='',q=x})=>new Response(null,{status:301,headers:{Location:le+x.pathname+tr+q.search+q.hash}})
  )=>li.reduce((a,[,x])=>a||x==rp,0)?rd(r,{tr:'/'}):
    (x=>x.redirected?rd(x=r2u(x),{le:d[x.hostname],q:r}):x)(await fetch(new Request(
      li.reduce((a,[i,x])=>a||new RegExp(`^${x}/`).test(rp)&&'https://'+i+rp.slice(x.length),''),{...req}
    )))
  )()
};

プロキシしたいディレクトリと宛先を定義、
合致した場合は宛先にリクエストを飛ばしてそのレスポンスを横流しする
リクエストがディレクトリそのものを指定かつ末尾に/が無い場合は/をつけるリダイレクトを返す(これが無いとurlの整合が取れない)
宛先にてリダイレクトが発生した場合はリダイレクト先を301で返す
searchやhashはリクエストそのままをレスポンスにつける

かれこれ1ヶ月ほど問題なく動作している
参考までに

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?