我有一个docker架构,包括一个nginx反向代理,一个rails应用程序和一个swagger-ui图像的实例,我在不同的容器上提供。
我在docker-compose中的设置如下:
web:
restart: always
...
swagger-ui:
image: swaggerapi/swagger-ui
ports:
- '8080:8080'
...
和我的nginx conf文件如下:
upstream web-app {
server web:80 weight=10 max_fails=3 fail_timeout=30s;
}
upstream swagger-ui {
server swagger-ui:8080 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
listen [::]:80;
server_name www.servername.de servername.de;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name servername.de;
ssl on;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/cert.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location /swagger {
proxy_pass http://swagger-ui;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
proxy_pass http://web-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
一切都适用于rails应用程序; 我可以通过443端口访问它,没有问题。
我的问题是我也想以同样的方式访问/ swagger / path,但这次访问swagger容器中运行的swagger-ui实例 - 到目前为止我一直在尝试的东西似乎没有工作正常,因为我得到了404 - 我想知道是否我错过了让他们两个同时工作的东西?
如果我暂时将招摇位置设置为/并注释掉网络应用代理,它会正确指向我的swagger-ui容器......
提前多多感谢!
答案 0 :(得分:1)
你的问题应该通过重写来解决!
现在您尝试加载http://swagger-ui:8080/swagger
之类的网址所以你应该添加到你的位置:
rewrite /swagger/(.*) /$1 break;
它会从你的路径中移除/招摇,并且应该加载你需要的东西。