Node.js 如何在NodeJs/Angular应用程序Google应用程序引擎中强制SSL
我想在Google App Engine上启动一个web应用程序 它是一个带有前端和后端的NodeJs/Angular应用程序,我按照以下指南将其作为单独的服务部署:使用client.yml部署前端,使用api.yml部署后端,使用dispatch.yml将所有请求路由到/api到后端服务 我还向应用程序添加了一个自定义子域,并由谷歌管理SSL证书 现在唯一要做的就是强制使用SSL,所以当我访问时,我会自动重定向到。在谷歌创建的标准appspot域名上,一切正常 现在我尝试了很多方法来解决这个问题,我不知道这个应用程序是在标准环境还是flex环境下运行,所以我尝试了所有我发现的方法 文档说,对于标准环境,您应该使用app.yml中的Node.js 如何在NodeJs/Angular应用程序Google应用程序引擎中强制SSL,node.js,angular,google-app-engine,ssl,Node.js,Angular,Google App Engine,Ssl,我想在Google App Engine上启动一个web应用程序 它是一个带有前端和后端的NodeJs/Angular应用程序,我按照以下指南将其作为单独的服务部署:使用client.yml部署前端,使用api.yml部署后端,使用dispatch.yml将所有请求路由到/api到后端服务 我还向应用程序添加了一个自定义子域,并由谷歌管理SSL证书 现在唯一要做的就是强制使用SSL,所以当我访问时,我会自动重定向到。在谷歌创建的标准appspot域名上,一切正常 现在我尝试了很多方法来解决这个问
secure:always
,就像这个问题一样。它不起作用,我就是这样配置的:
runtime: python27
api_version: 1
threadsafe: true
service: default
handlers:
- url: /
static_files: immocheck/index.html
upload: immocheck/index.html
- url: /
static_dir: immocheck
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
然后,我尝试按照以下答案配置nginx-app.conf,但没有成功:
set $test "";
if ($http_x_forwarded_proto = 'http') {
set $test "http";
}
if ($test = 'http') {
return 301 https://$host$request_uri;
}
然后我想也许我在一个灵活的环境中,即使我认为我是标准的。因此,我在文档中找到了一些关于使用头盔包的信息,并遵循以下非常详细的答案来实现它:
不幸的是,这也不起作用,现在我将感谢你的帮助
提前感谢您的第一个
/
处理程序匹配,并且永远不会到达安全:始终
指令。尝试:
handlers:
- url: /
static_files: immocheck/index.html
upload: immocheck/index.html
secure: always
- url: / # <-- this url will never get hit, as it already matched above, so try this:
- url: /(.*\.(html|gif|png|jpg|js|css))$
static_files: immocheck/\1
upload: immocheck/.*\.(html|gif|png|jpg|js|css)$
secure: always
- url: /.*
redirect_http_response_code: 301
script: auto
secure: always
处理程序:
-网址:/
静态_文件:immocheck/index.html
上传:immocheck/index.html
安全:总是
-url:/#您的第一个/
处理程序匹配,并且永远不会到达安全:始终
指令。尝试:
handlers:
- url: /
static_files: immocheck/index.html
upload: immocheck/index.html
secure: always
- url: / # <-- this url will never get hit, as it already matched above, so try this:
- url: /(.*\.(html|gif|png|jpg|js|css))$
static_files: immocheck/\1
upload: immocheck/.*\.(html|gif|png|jpg|js|css)$
secure: always
- url: /.*
redirect_http_response_code: 301
script: auto
secure: always
处理程序:
-网址:/
静态_文件:immocheck/index.html
上传:immocheck/index.html
安全:总是
-url:/#您提到您编写了一个NodeJS/Angular应用程序,但从yaml文件中我看到该应用程序是Python 2.7。为了定义正确的运行时,请使用以下内容更改运行时
元素:
runtime: nodejs12
您可以找到有关yaml配置文件及其元素的所有必要信息
你还提到:
我不知道该应用程序是以标准版还是flex版运行
环境
如果未定义env
元素,则应用程序将部署在app Engine Standard上。您可以通过以下方式进行确认:
导航菜单>应用程序引擎>版本
在当前版本的“环境”选项卡下进行检查
正如您正确提到的,要强制应用程序使用HTTPS,请为app.yaml中的每个处理程序指定secure:always
元素
要将自定义域的所有连接重定向到使用HTTPS,您必须先设置,然后在响应中设置。请记住,您可以在谷歌管理或使用您自己的证书之间进行选择
我还建议您查看,并查看,以便更深入地了解如何设置您的环境和设计您的应用程序。您提到您编写了一个NodeJS/Angular应用程序,但从yaml文件中,我看到该应用程序采用Python 2.7。为了定义正确的运行时,请使用以下内容更改运行时
元素:
runtime: nodejs12
您可以找到有关yaml配置文件及其元素的所有必要信息
你还提到:
我不知道该应用程序是以标准版还是flex版运行
环境
如果未定义env
元素,则应用程序将部署在app Engine Standard上。您可以通过以下方式进行确认:
导航菜单>应用程序引擎>版本
在当前版本的“环境”选项卡下进行检查
正如您正确提到的,要强制应用程序使用HTTPS,请为app.yaml中的每个处理程序指定secure:always
元素
要将自定义域的所有连接重定向到使用HTTPS,您必须先设置,然后在响应中设置。请记住,您可以在谷歌管理或使用您自己的证书之间进行选择
我还建议您查看并查看,以便更深入地了解如何设置环境和设计应用程序。这解决了我的问题:
runtime: python27
api_version: 1
threadsafe: true
service: default
handlers:
- url: /
static_files: immocheck/index.html
upload: immocheck/index.html
secure: always
redirect_http_response_code: 301
- url: /
secure: always
redirect_http_response_code: 301
static_dir: immocheck
谢谢你带我上路@GAEfan。这解决了我的问题:
runtime: python27
api_version: 1
threadsafe: true
service: default
handlers:
- url: /
static_files: immocheck/index.html
upload: immocheck/index.html
secure: always
redirect_http_response_code: 301
- url: /
secure: always
redirect_http_response_code: 301
static_dir: immocheck
谢谢你带我上路@GAEfan。谢谢你澄清这一点。我用正则表达式实现了你的建议。在那之后,我可以像以前一样访问https,但在尝试直接导航到http时遇到了404。谢谢,谢谢你澄清这一点。我用正则表达式实现了你的建议。在那之后,我可以像以前一样访问https,但在尝试直接导航到http时遇到了404。谢谢。谢谢你让我知道如何找到我正在运行的环境。这实际上是标准的。至于运行时:我在部署该服务时遵循了这一中篇文章,它很快就工作了。我从未质疑过运行时应该是python27,因为我只提供dist文件夹中的编译文件。这应该不会是一个问题,因为应用程序部署在一个标准的env中。我应该能够配置app.yaml文件中的所有内容,不是吗?SSL cerfificates(谷歌管理)已经安装。在app.yaml中设置严格传输安全标头,如soStrict Transport Security:max age=31536000;includeSubDomains
破坏了一切,导致http和https上都出现404。感谢您让我知道如何找到我正在运行的环境。这实际上是标准的。至于运行时:我在部署该服务并使其正常工作后遵循了这一中篇文章