Netlifyでリバースプロキシを設定する
Netlifyで作った2つのサイトを1つのドメインで運用するために、リバースプロキシを設定しました。 背景 仕事の方で以下のような構成を作る必要ができました。 example.com/ -> Netlifyでホストしてい […]
目次
Netlifyで作った2つのサイトを1つのドメインで運用するために、リバースプロキシを設定しました。
背景
仕事の方で以下のような構成を作る必要ができました。
- example.com/ -> NetlifyでホストしているReact SPA 1
- example.com/sub-service -> React SPA 2
既存のReact SPA内に実装しても問題はないのですが、サービスの性質上別のSPAとして実装することになりました。
Netlifyの2サイトを1ドメインで管理する
git submoduleで1サイト内で2 SPAをビルドする方法も考えたのですが、時間がかかりすぎる懸念がありました。
そこでNetlifyのサイトを2つ作成し、リバースプロキシ的にリダイレクトをかけることで1ドメインに納める方法を検討することになりました。
Netlifyでのリバースプロキシ
Netlifyでは_redirects
ファイルでリダイレクトを設定できます。このファイルを使うことで、リバースプロキシ的なリダイレクトができます。
_redirects
sub-service* https://second-react-app.netlify.com/:splat 200
Gatsbyで_redirects
ファイルを作成する
Gatsbyを利用している場合、以下のような手順で_redirects
ファイルを生成できます。
$ yarn add -D gatsby-plugin-netlify
$ vim gatsby-config.js
...
plugins: [
"gatsby-plugin-typescript",
{
resolve: `gatsby-plugin-netlify`
},
...
$ vim gatsby-node.js
exports.createPages = ({ graphql, actions }) => {
const { createRedirect } = actions
createRedirect({
fromPath: 'sub-service*',
toPath: 'https://second-react-app.netlify.com/:splat',
statusCode: 200
})
}
あとは_redirects
ファイルを含めた形でNetlify上にデプロイできればOKです。
wgetで動きを確認する
念の為wgetで動作を確認します。
$ wget -S --spider https://first-react-app.netlify.com/sub-service | pbcopy
Spider mode enabled. Check if remote file exists.
--2020-01-07 19:33:30-- https://first-react-app.netlify.com/sub-service
Resolving first-react-app.netlify.com... 178.128.17.49, 2400:6180:0:d1::575:a001
Connecting to practice-gatsby.netlify.com|178.128.17.49|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Cache-Control: public, max-age=0, must-revalidate
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Tue, 07 Jan 2020 10:33:21 GMT
Referrer-Policy: same-origin
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Xss-Protection: 1; mode=block
Age: 0
Connection: keep-alive
Server: Netlify
Length: 0 [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.
メインのアプリの方のドメインでアクセスできていることがわかります。
おわりに
正直なところ、これがよい運用方法かどうかは自信がありません。リバースプロキシした先のアプリでcookieやheaderなどを使いたいとなると、その値についても渡してやる必要があるかと思いますし、その設定コストに見合うメリットがあるのかなども検討する必要がありそうではあります。
が、とりあえずReact SPA -> React SPAでは問題なさそうに見えますので、ここまでを忘備録として残します。