ApacheポートフォワーディングでNuxt×Golang

掲載日
更新日

はじめに

このサイトはフロント側をNuxt4、バックエンド側をGolang(Gin)で作成しています。

(ポートフォリオサイトの方にGitHubへのコードも載せています。)

本当はApacheではなくNginxなどを使った方がいいんだと思いますが、今回自分の構成ではApache上にそれぞれデプロイしていきます。

そのため、同じドメインで以下のように振り分けたくなりました。

  • フロント(Nuxt)をポート3000で起動し、example.comにアクセスしたらポート3000に転送
  • API(Gin)をポート3001で起動し、example.com/api/XXX にアクセスしたらポート3001に転送

ポートフォワーディングを使って振り分ける

上記のような振り分けをする時に便利なのがポートフォワーディング(ポート転送)という機能。
 sslで対応する場合はssl.confに以下のように記載します。

RewriteEngine On

ProxyPass /api http://localhost:3001/api
ProxyPassReverse /api http://localhost:3001/api

ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/

解説

まず、RewriteEngine OnでApacheのmod_rewriteモジュールを有効にします。
(※ このモジュールを使用することで、ポートフォワーディング以外にも正規表現を使ったリダイレクトなどが行える等汎用性が高いので、現場によっては既に設定が入っている可能性もあります。
場合によっては設定が重複しないようあらかじめファイル内を検索した上で追記してください。)

ProxyPass 転送元 転送先 とProxyPassReverse 転送元 転送先を記載することで、指定のURLでアクセスした際に、転送先のポートに遷移させることが可能になります。
(今回なら、http://example.com/api/XXXへのアクセスをhttp://localhost:3001/apiに遷移させます。)

注意点

地味な詰みポイントとして、Apacheの ProxyPassは記述した上から順に実行されます。
以下のようにルートパスを最初に書いてしまうと、すべてのページがNuxt側に転送されてしまい/apiにアクセスしてもGolang側に転送されません。(1敗)

ProxyPass / http://localhost:3000/

そのため、URLのパスが深いものから順番に記述していくように気を付ける必要があります。

 

    • BlueSkyで共有する
    • Hatenaで共有する
記事の作成者のW.Aのアイコン

この記事を書いた人

W.A
茨城県在住Webエンジニアです。 PHP、PostgreSQL、Linuxなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。
  • GitHubのリンク

Comment

関連記事

  • SSLエラーで一部の環境のみ表示されない原因と対応のサムネイル画像

    SSLエラーで一部の環境のみ表示されない原因と対応

    掲載

    アクセスする環境(PC)によってサイトのSSL対応状況が異なっている(ブラウザの鍵マークが赤くなるPCと赤くならないPCがある)トラブルの原因が「中間証明書の期限切れ」だった時の備忘録。opensslコマンドを使った調査方法をまとめました。

  • Windows11、Apacheでの自己証明書(オレオレ証明書)のやり方メモのサムネイル画像

    Windows11、Apacheでの自己証明書(オレオレ証明書)のやり方メモ

    掲載

    Windows+Apache環境で、Chromeブラウザで警告が出ない「独自SSL証明書(オレオレ証明書)」を作成・導入する手順を解説します。Service Workerやクリップボードへのコピーなど、HTTPSが必須となるローカル開発環境の構築に役立つ備忘録です。

  • 複数ドメイン管理でindex.htmlを省略リダイレクトするのサムネイル画像

    複数ドメイン管理でindex.htmlを省略リダイレクトする

    掲載

    一つのサーバーで複数のドメインのサイトを管理している場合に、全てのサイトで「index.html」へのアクセスを「index.html」が無いURLにリダイレクトさせたい時、一サイトずつ設定すると手間と維持のコストがかかります。そこで、Apacheの「HTTP_HOST」変数を使ってまとめてリダイレクトする方法の解説をしています。

check コピーしました!