GCP上でのGoとNginx構成における独自ドメインでのアクセス

公開日:2019-05-19
最終更新:2019-05-19

私が行ったGoとNginxの構成で独自ドメインを利用してのアクセスについて
誰かの役に立てばと思い、書いてみました。環境は以下です。

  • 独自ドメインで、アクセス。
  • GCPでGCEとCloudDNSを使用。
  • 作成したインスタンスのOSはCentOS7。
  • GoへのhttpのリクエストはNginxを経由。

独自ドメインの取得

  • お名前.comやムームードメインで取得できます。

GCPの無料トライアル

  • 無料トライアルが可能なので、お勧めです。
  • 無料トライアルについては情報が豊富なので、割愛します。

GCEのインスタンス作成

  • 無料トライアルでクレジットの消費を避けたいなら、GCEのインスタンスはf1-microの利用となります。
  • OSはCentOS7でインスタンスを作成します。
  • インスタンスの作成は手動やTerraformを使用します。
  • インスタンスの作成後にある外部IPはCloudDNSで必要になります。

CloudDNSの設定

  • 独自ドメインと紐付けるための設定をします。
  • GCPの管理画面からネットワーキング→ネツトワークサービス→CloudDNSを行います。

  • ゾーンを作成し、ネームサーバとAレコードの作成をします。

  • Aレコードには独自ドメインとwww付きの独自ドメインの両方を作成しておきます。
  • example.co.jpなら、example.co.jpwww.example.co.jpになります。

  • また、Aレコードには作成したインスタンスの外部IPを設定します。

  • この時、独自ドメインとwww付きの独自ドメインのAレコードには 同じ外部IPを設定します。

  • NSレコードにデータには4つのネームサーバがあります。

  • お名前.comやムームードメインなどで、独自ドメインを取得しているなら、NSレコードにあるネームサーバを登録する必要があります。

ネームサーバの登録

  • 独自ドメインにCloudDNSにあるネームサーバを設定します。
  • 設定の仕方は独自ドメインを取得したレジストラなどのサポートなどで確認してください。

GoとNginxのインストール

  • 作成したインスタンスにはSSHで接続します。
  • GCEのインスタンスへのSSHの接続はついては情報が豊富なので、割愛します。

  • 作成したインスタンスにGoとNginxのインストールを行います。

  • インストールについては手動やAnsibleを使用します。

httpとhttpsの許可

  • GCPの管理画面からCompute Engine→VMインスタンス→作成したインスタンスを選択→編集を行います。
  • ファイアウォールの項目にあるHTTP トラフィックを許可するとHTTPs トラフィックを許可するにチェックを入れて保存します。

/etc/hostsの修正

  • 作成したインスタンスの/etc/hostsに以下のように自分自身を指すアドレスに独自ドメインを追加しておきます。
  • example.co.jpを例にすると以下のようになります。
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 example.co.jp  
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 example.co.jp  

Goのリクエスト待ち

package main  

import (  
        "fmt"  
        "net/http"  
       )  

func handler(writer http.ResponseWriter, request *http.Request) {  
    fmt.Fprintf(writer, "My Domain Access Success %s", request.URL.Path[1:])  
}  

func main () {  
    http.HandleFunc("/", handler)  
    http.ListenAndServe(":9090", nil)  
}  
  • 上記の内容で、main.goを作成します。
  • なお、main.goの保存場所はNginxのドキュメントルートになります。
  • go run main.goを実行して9090のポートで、httpのリクエストを待ちます。

Nginxの設定

    server {  
        listen       80;  
        server_name  www.example.co.jp;  
        return       301 http://example.co.jp$request_uri;  
    }  

    server {  
        listen       80 default_server;  
        listen       [::]:80 default_server;  
        server_name  example.co.jp;  

        # Load configuration files for the default server block.  
        include /etc/nginx/default.d/*.conf;  

        location / {  
            root         /home/example/go/src/www/html/public_html/web;  
            proxy_pass   http://example.co.jp:9090;  
        }  

        error_page 404 /404.html;  
            location = /40x.html {  
        }  

        error_page 500 502 503 504 /50x.html;  
            location = /50x.html {  
        }  
    }  
  • 上記のようにnginx.confに複数のserverコンテキストを設定します。
  • www付きの独自ドメインはwwwがない独自ドメインへとリダイレクトします。
  • example.co.jpですとhttp://www.example.co.jphttp://example.co.jpにリダイレクトします。

  • ドキュメントルート上で、Goは起動していますので、 proxy_passで、httpのリクエストをGoの9090のポートへ渡します。

  • nginx.confに間違いがないなら、nginxを起動します。

独自ドメインでのアクセス

Webブラウザで独自ドメインでアクセスします。example.co.jpだとhttp://example.co.jpになります。
WebブラウザにMy Domain Access Successの表示を確認します。

処理や設定などについてはもう少し、より良くできますが、
ひとまず、検証などで独自ドメインでのアクセスしたい
ということを優先にしています。

記事が少しでもいいなと思ったらクラップを送ってみよう!
49
+1
@fubukiの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする