如何使用自定义域强制使用Google App Engine的HTTPS流量?

时间:2018-02-12 17:55:24

标签: google-app-engine ssl google-domains

我在Google Domains(www.example.com)上有一个网站,它是由Gcloud托管的。我按照此处列出的说明设置了SSL和https:https://cloud.google.com/appengine/docs/standard/python/securing-custom-domains-with-ssl

基本上,我刚刚运行了gcloud beta app domain-mappings update example.com --certificate-management='AUTOMATIC'

现在我确实可以访问https://example.comhttps://www.example.com。但我也可以访问这些域的不安全的http版本。

如何设置我的Google域以始终使用https?如果有人输入http://example.com,我希望它转到https网站。

记录: 我的裸域(example.com)有4条A记录和4条AAAA记录。

我的www.example.com域名中包含1条带有alias = www。

的CNAME记录

5 个答案:

答案 0 :(得分:2)

您是否尝试在secure: always

中的处理程序中设置app.yaml
handlers:
- url: /youraccount/.*
  script: accounts.app
  login: required
  secure: always
  总是

     

请求与此处理程序不匹配的URL   HTTPS会自动重定向到HTTPS URL   路径。查询参数将保留用于重定向

https://cloud.google.com/appengine/docs/standard/python/config/appref#handlers_element

答案 1 :(得分:1)

不确定您使用的是哪种后端语言,但是您可以通过检查请求标头然后重定向来强制执行ssl。例如:

if request.environ.get('HTTPS') == 'off':
    return redirect('https://www.example.com' + request.environ.get('PATH_INFO'), 301)

答案 2 :(得分:1)

Alex的回答(见评论)让我走上了正确的道路。

首先meteor add gadicohen:headers添加headers信息。

在我的路由器逻辑(Meteor中的铁路由器)的前钩子中,我检查x-forwarded-proto是否为http。如果是,请将http替换为https,然后转到该网址。我确保我也不在本地主机上,以便我可以开发网站

Router.onBeforeAction(function () {
    <some other logic>
    // Redirect http to https
    if (headers.get('x-forwarded-host') !== "localhost:3000") {
        if (headers.get('x-forwarded-proto') === "http") {
            window.location = window.location.href.replace('http', 'https')
        }
    }
});

答案 3 :(得分:0)

secure: always仍可在所有标准环境中使用,但所有灵活环境see documentation here或{{3}中的安全选项已已弃用 }}

如果您在当前环境中需要此功能,建议的解决方案需要更改您的应用程序代码。使用自定义HTTP标头X-Forwarded-Proto将HTTP流量重定向到HTTPS,或使用here for Node.js

答案 4 :(得分:0)

对于具有默认Tomcat的Java和Spring Boot,以下设置适用于Google App Engine flex:

 <ImgWrap>
       <Img src={homeObjOne.img} alt={alt} />
 </ImgWrap>