0

パブリック動的 IP にある自宅の PC でホストされている Web サービスがあります。また、Google ドメインによってホストされているドメイン名も持っています (この投稿では www.example.com と呼びます)。

Google App Engine 経由で動的 IP を memcache に保存できます。クライアントが myhome サブドメインを指すと、ホスト IP にリダイレクトされます (例: myhome.example.com -> 111.111.1.100)。

App Engine で実行する Python コードは次のとおりです。

import json
from webapp2 import RequestHandler, WSGIApplication
from google.appengine.api import memcache

class MainPage(RequestHandler):
    # Memcache keys
    key_my_current_ip = "my_current_ip"

    def get(self):
        response_text = "example.com is online!"
        # MyHome request
        if (self.request.host.lower().startswith('myhome.example.com') or
            self.request.host.lower().startswith('myhome-xyz.appspot.com')):
            my_current_ip = memcache.get(self.key_my_current_ip)
            if my_current_ip:
                url = self.request.url.replace(self.request.host, my_current_ip)
                # move to https
                if url.startswith("http://"):
                    url = url.replace("http://", "https://")
                return self.redirect(url, True)
            response_text = "myhome is offline!"
        # Default site
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write(response_text)

    def post(self):
        try:
            # Store request remote ip
            body = json.loads(self.request.body)
            command = body['command']
            if command == 'ping':
                memcache.set(key=self.key_my_current_ip, value=self.request.remote_addr)
        except:
            raise Exception("bad request!")

app = WSGIApplication([('/.*', MainPage),], debug=True)

私が見つけたのは、「A」ドメイン レコードを追加することで、myhome.example.com がリダイレクトせずにその IP を直接指すようになることです。

ここに画像の説明を入力

Google App Engine またはドメイン API を使用して「A」ドメイン レコードを更新する方法はありますか?

def post(self):
    try:
        # Store request remote ip
        body = json.loads(self.request.body)
        command = body['command']
        if command == 'ping':
            **--> UPDATE "A" Record with this IP: <self.request.remote_addr>**
    except:
        raise Exception("bad request!")
4

1 に答える 1