我有一个托管在App Engine中的站点(A)需要由另一个站点(B)托管在其他地方的proxy_pass访问。
以前这个站点(A)是在Kubernetes中托管的,入口配置看起来像这样,它运行得很好:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webapp
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: my-webapp.com
http:
paths:
- path: /
backend:
serviceName: webapp
servicePort: 80
- host: www.remote-server.com
http:
paths:
- path: /
backend:
serviceName: webapp
servicePort: 80
这样,通过将www.remote-server.com添加到主机列表中,允许www.remote-server.com通过nginx proxy_pass呈现my-webapp.com。
现在我的问题是我们如何在App Engine灵活环境(nodejs运行时)中配置相同的东西?目前这是我们在没有任何特殊配置的情况下在App Engine中尝试此操作时获得的:
这是因为远程服务器(在这种情况下它是用于测试的localhost)不允许代理到App Engine服务(这是我的假设)。
作为参考,这是我在本地用于测试的nginx配置:
server {
listen 8080;
server_name localhost;
root /path/to/folder/;
location / {
index index.html index.htm;
}
location /shopping {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://url-to-my-appengine-app.appspot.com;
proxy_redirect default;
}
}
我希望这是有道理的。
我不相信App Engine灵活环境中的Node.js运行时的underlying Docker image使用NGINX作为Web服务器,因此即使您在本地工作,也可能在部署时寻求无法工作的路径。
我相信在您的情况下启用CORS支持,您将不得不在应用程序的代码中而不是在配置文件中设置Access-Control-Allow-Origin
头。