Angular 如何在Kubernetes中使用ngnix连接后端和前端

Angular 如何在Kubernetes中使用ngnix连接后端和前端,angular,nginx,kubernetes,nginx-reverse-proxy,nginx-config,Angular,Nginx,Kubernetes,Nginx Reverse Proxy,Nginx Config,我在Kubernetes(at)中部署了一个后端服务和一个前端angular 6应用程序,其nginx.confas upstream purser { server purser.default.svc.cluster.local:3030; } server { listen 4200; location / { proxy_pass http://purser; root /usr/share/nginx/html/appDApp; index index

我在Kubernetes(at)中部署了一个后端服务和一个前端angular 6应用程序,其
nginx.conf
as

upstream purser {
  server purser.default.svc.cluster.local:3030;
}

server {
  listen 4200;

  location / {
   proxy_pass http://purser;
   root /usr/share/nginx/html/appDApp;
   index index.html index.htm;
   try_files $uri $uri/ /index.html =404;
  }
}
在angular代码中,我们使用的是
http.get('http://purser.default.svc.cluster.local:3030“,{observe:'body',responseType:'json'})

案例1:通过在
nginx.conf
中设置
proxy\u pass
,当我们点击ui服务时,它会重定向到后端,并直接从后端提供
json
输出

案例2:没有
proxy\u pass
当我们点击前端服务时,它显示UI,但没有来自后端的数据,即浏览器无法理解
http://purser.default.svc.cluster.local:3030


使用这个
nginx.conf

upstream purser {
  server purser.default.svc.cluster.local:3030;
}

server {
  listen 4200;

  location /api {
    proxy_pass http://purser;
  }

  location / {
    root /usr/share/nginx/html/purser;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
} 
使用
backend\u URL=window.location.protocol+'/'+window.location.host+'/api/'

说明:
前端当需要来自后端的数据时,nginx会在路径
/api
上调用自身,nginx会找到该路径,并根据配置将其转发给后端kubernetes服务
purser.default.svc.cluster.local:3030
使用
代理传递
@Kaladin您的方法就快到了,但我认为缺少了一些东西

我所做的是

upstream gateway {
  server gateway-cip-service:3000;
}

server {
  listen 80;

  location /api {
    rewrite /api/(.*) /$1 break;
    proxy_pass http://gateway;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
} 
最让人头疼的是发现代理头的升级,这样的痛苦


考虑到在我的后端,我的路由没有“api”前缀,这就是为什么我使用“rewrite/api/(.*)/$1 break;”来只获取/api/之后的内容,否则,您可以避免这一行代码。

我希望您不要试图在没有中间件的情况下直接将前端连接到后端。是的,我们正在使用。您可以在这里查看:如果我们将nginx和nginx都放在同一个pod中,那么一切都可以正常工作,即都可以使用localhost访问