Angular 如何在Kubernetes中使用ngnix连接后端和前端
我在Kubernetes(at)中部署了一个后端服务和一个前端angular 6应用程序,其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
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访问