一、背景
当前,前后端分离以及微服务化已经是趋势。因此,后端通常会有多个webapi应用。为访问多个应用,可以采用多个域名/IP或者单个域名/IP加不同端口的方式。但通常域名或者IP有限,而不同端口要采用非80/443等默认端口,也会导致不便。因此,单域名/IP+默认端口+二级目录就成为一种比较友好和方便的方式。
二、环境
- asp.net core 3.1 (3.1.8)
- CentOS 8.2
- nginx/1.14.1
- Swashbuckle.AspNetCore 5.5.1
三、实现方式
1.Nginx配置
直接上Nginx.conf配置:
server {
# Nginx服务的Banner隐藏状态
server_tokens off;
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 反向代理webapi应用
location /sms/ {
# 注意"localhost:8080"后面的"/"
proxy_pass http://localhost:8080/;
}
# 其他路径默认访问网站
# 错误页
error_page 404 /404.html;
location = /40x.html {}
error_page 500 502 503 504 /50x.html;
location = /50x.html {}
}
2.Swagger相关代码和配置调整
2.1 Swagger的问题
按照上述方式,能正常访问应用。但Swagger里却可能无法正常运行。
可以看到,在swagger中已经有了二级目录/sms/:
但在swagger中执行时,没有包括二级目录:
2.2 Swagger相关代码和配置调整
重点是Swagger的Json文件以及API路径需要增加二级目录位置
string vPath = Configuration["virtualPath"];
// 添加Swagger有关中间件
app.UseSwagger(c =>
{