在 Google Cloud Run 上使用 uwsgi 重写 Django 子域

Jan*_*sen 6 regex django uwsgi google-cloud-dns google-cloud-run

我正在将 Django 网站迁移到 GCP 并首次使用 Google Cloud Run。体验很棒。我对域映射功能也非常满意,但我在将 www 子域转发到裸域 URL 时遇到问题。为了实现一致的页面分析,我希望浏览的访问者被https://www.mycooldomainname.com301 重定向到https://mycooldomainname.com(真实域编辑)

DNS设置

我将 bare 和 www 子域添加到 Cloud Run 自定义域:

GCR

并在我的注册商处添加了所需的 A、AAA 和 CNAME 记录:

登记员

传播完所有内容后,我可以访问我的网站 和https://mycooldomainname.comhttps://www.mycooldomainname.com但如何配置转发/重写?

从我读到的其他帖子中,人们使用 Google Cloud DNS 实现了这一点,看起来他们使用了别名来进行转发。

在这种情况下,我尝试通过 uwsgi 进行转发:

网络服务器设置

django 应用程序通过 uwsgi 使用此配置提供服务 - 请注意重定向规则:

[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-uri = ^(.*)\/\/www\.(.*)$ redirect-301:$1//$2
hook-master-start = unix_signal:15 gracefully_kill_them_all
http-socket = 0.0.0.0:8000
cheaper = 1
cheaper-algo = backlog
workers = 3
master = true
enable-threads = true
threads = 12
offload-threads = 12
harakiri = 300
http-harakiri = 300
logformat = %(var.HTTP_X_REAL_IP) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)\" %(msecs)ms
static-map = /=webroot
static-gzip-all = true
module = app.wsgi
Run Code Online (Sandbox Code Playgroud)

实际的重定向在 url 的其他部分上运行良好,例如,如果我包含以下重定向测试规则:

route-uri = ^(.*)est(.*)$ redirect-301:$1ust$2
Run Code Online (Sandbox Code Playgroud)

浏览https://www.mycooldomainname.com/test/正确重定向到https://www.mycooldomainname.com/tust/

因此,目前我不确定重定向已验证域的部分内容是否存在 GCP 限制,或者我的正则表达式是否错误。

Jan*_*sen 2

感谢所有的建议!这是我学到的:

  1. DNS 记录不能用于重定向,特别是当 GCP 使用子域的 CNAME 时
  2. Google Cloud Run 不以任何方式限制 URL 重定向
  3. uWSGI具有强大的功能,但很难发现
  4. 以下重定向规则对我有用:
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-host = ^www.mycooldomainname.com$ redirect-permanent:https://mycooldomainname.com${REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

我需要在我的基础映像中安装以下内容才能使用内部重写和插件:

FROM $PYTHON_IMAGE as base 

RUN apt-get update \
    && \
    apt-get install --no-install-recommends -y \
    libpcre3-dev zlib1g-dev \
    uwsgi-core \
    && \
    apt-get clean && rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)