![](/img/trans.png)
[英]Kubernetes nginx ingress path-based routing of HTTPS in AWS
[英]Nginx in Docker Swarm to implement path based Routing
我试图通过使用基于路径的路由来使用 nginx 作为两个 Swarm 服务(称为 service1 和 service2)的代理。
这是服务的运行方式:
docker service create --name service1 -p 8080:80 --replicas 3 --network mynet httpd
docker service create --name service2 -p 8081:80 --replicas 3 --network mynet nginx
mynet 是一个覆盖网络。
这是我的 dockerfile。
FROM nginx
RUN rm /etc/nginx/conf.d/*
COPY backend.conf /etc/nginx/conf.d/
EXPOSE 80
这是 backend.conf。
upstream service1 {
server service1;
}
upstream service2 {
server service2;
}
server {
listen 8000;
location / {
proxy_pass http://service1;
}
location /service2 {
proxy_pass http://service2;
}
}
这个镜像是使用标准的 dockerbuilt 命令构建的,这个镜像被称为 nginxelb。
docker build -t nginxelb .
这就是我运行代理服务的方式。
docker service create --name nginx-app -p 80:8000 --replicas 3 --network mynet nginxelb
该服务按我的预期运行了 3 个副本。
当我运行 curl localhost 时,我得到以下输出:
<html><body><h1>It works!</h1></body></html>
这很棒。
但是当我运行 curl localhost/service2 时,输出是
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.19.2</center>
</body>
</html>
我试图不硬编码主机的 IP 地址并使用服务名称作为 DNS 解析器。 它似乎适用于根路径,但不适用于其他路径。
我的应用程序在我手动安装了 docker 的 Amazon Linux 2 上运行。 Docker 版本为 Docker 版本 19.03.2,构建 6a30dfc。
我究竟做错了什么?
在对 backend.conf 文件进行调整后得到了这个工作。 添加了这行代码:
rewrite ^/service2(.*) /$1 break;
这是基于另一篇文章。
更新后的 backend.conf 文件如下所示:
upstream service1 {
server service1;
}
upstream service2 {
server service2;
}
server {
listen 8000;
location / {
proxy_pass http://service1;
}
location /service2 {
rewrite ^/service2(.*) /$1 break;
proxy_pass http://service2;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.