![](/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.