在 Google Cloud 运行 上使用 uwsgi 重写 Django 子域
Django subdomain rewrite using uwsgi on Google Cloud Run
我正在将 Django 站点移动到 GCP 并首次使用 Google Cloud 运行。体验很棒。我对域映射功能也很满意,但是我在将 www 子域转发到裸域 URL 时遇到了问题。对于一致的页面分析,我希望浏览到 https://www.mycooldomainname.com
的访问者被 301 重定向到 https://mycooldomainname.com
(真实域已编辑)
DNS 设置
我将 naked 和 www 子域添加到 Cloud 运行 自定义域:
并在我的注册商处添加了所需的 A、AAA 和 CNAME 记录:
传播完所有内容后,我可以在 https://mycooldomainname.com
和 https://www.mycooldomainname.com
访问我的站点,但是如何配置 forwarding/rewriting?
来自 我读过人们使用 Google Cloud DNS 实现此目的的地方,看起来他们使用别名进行转发。
在这种情况下,我尝试通过 uwsgi 进行转发:
网络服务器设置
django 应用程序通过 uwsgi 使用此配置提供服务 - 注意重定向规则:
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-uri = ^(.*)\/\/www\.(.*)$ redirect-301://
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
实际重定向在 url 的其他部分工作正常,例如,如果我包含以下重定向测试规则:
route-uri = ^(.*)est(.*)$ redirect-301:ust
浏览到 https://www.mycooldomainname.com/test/
正确重定向到 https://www.mycooldomainname.com/tust/
因此,此时我不确定是否存在 GCP 对重定向已验证域的部分内容的限制,或者我的正则表达式有误。
我相信您应该能够使用 Google 负载均衡器进行配置。
参见:
和
注意不要按照上面的第二个答案包含 http/https。
还有一个有用的 Medium walkthough,前后增加了很多步骤:
谢谢大家的建议!这是我学到的:
- DNS 记录不能用于重定向,尤其是当 GCP 使用子域的 CNAME 时
- Google云运行不限制URL以任何方式重定向
- uWSGI 具有强大的功能,但很难被发现
- 以下重定向规则对我有用:
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-host = ^www.mycooldomainname.com$ redirect-permanent:https://mycooldomainname.com${REQUEST_URI}
而且我需要在我的基本映像中安装以下内容才能使内部重写和插件可用:
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/*
我正在将 Django 站点移动到 GCP 并首次使用 Google Cloud 运行。体验很棒。我对域映射功能也很满意,但是我在将 www 子域转发到裸域 URL 时遇到了问题。对于一致的页面分析,我希望浏览到 https://www.mycooldomainname.com
的访问者被 301 重定向到 https://mycooldomainname.com
(真实域已编辑)
DNS 设置
我将 naked 和 www 子域添加到 Cloud 运行 自定义域:
并在我的注册商处添加了所需的 A、AAA 和 CNAME 记录:
传播完所有内容后,我可以在 https://mycooldomainname.com
和 https://www.mycooldomainname.com
访问我的站点,但是如何配置 forwarding/rewriting?
来自
在这种情况下,我尝试通过 uwsgi 进行转发:
网络服务器设置
django 应用程序通过 uwsgi 使用此配置提供服务 - 注意重定向规则:
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-uri = ^(.*)\/\/www\.(.*)$ redirect-301://
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
实际重定向在 url 的其他部分工作正常,例如,如果我包含以下重定向测试规则:
route-uri = ^(.*)est(.*)$ redirect-301:ust
浏览到 https://www.mycooldomainname.com/test/
正确重定向到 https://www.mycooldomainname.com/tust/
因此,此时我不确定是否存在 GCP 对重定向已验证域的部分内容的限制,或者我的正则表达式有误。
我相信您应该能够使用 Google 负载均衡器进行配置。
参见:
和
注意不要按照上面的第二个答案包含 http/https。
还有一个有用的 Medium walkthough,前后增加了很多步骤:
谢谢大家的建议!这是我学到的:
- DNS 记录不能用于重定向,尤其是当 GCP 使用子域的 CNAME 时
- Google云运行不限制URL以任何方式重定向
- uWSGI 具有强大的功能,但很难被发现
- 以下重定向规则对我有用:
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugins = router_uwsgi
route-host = ^www.mycooldomainname.com$ redirect-permanent:https://mycooldomainname.com${REQUEST_URI}
而且我需要在我的基本映像中安装以下内容才能使内部重写和插件可用:
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/*