如何配置NGINX反向代理ASP.NET Core应用实现类似IIS的子路径访问
调整后可实现需求的完整Nginx配置
server { listen 80 default_server; listen [::]:80 default_server; # 匹配所有主机头,支持localhost、本地IP、域名等所有访问方式 server_name _; index index; # 匹配子路径前缀,^~ 标识优先匹配该规则,不走其他正则匹配 location ^~ /name.of.app/ { # 末尾加斜杠,Nginx会自动把/name.of.app/前缀去掉后转发给后端 proxy_pass http://127.0.0.1:5000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
修改逻辑说明
- 把
server_name从appname.*改为_,匹配所有请求的主机头,不管是通过localhost还是192.168.x.x访问都能命中该 server 块,解决无法对外暴露的问题。如果需要限制仅特定域名/IP访问,把_替换为对应的IP或域名即可。 - 把原来的根路径匹配
location /改为location ^~ /name.of.app/,只有请求路径前缀为/name.of.app/的流量才会转发到你的ASP.NET Core应用,和IIS的子路径访问逻辑一致。 proxy_pass末尾新增斜杠/,Nginx转发时会自动去除/name.of.app/前缀,比如访问http://192.168.x.x/name.of.app/home,转发到5000端口的路径就是/home,符合后端应用的路径预期。
后端ASP.NET Core应用适配
你需要在应用启动配置中添加路径基址配置,避免应用内部生成的链接错误:
在Startup.cs的Configure方法最开头添加以下代码即可:
app.UsePathBase("/name.of.app");
配置完成后重新发布启动应用。
所有配置修改完成后执行nginx -s reload重载Nginx配置即可生效,之后就可以通过http://localhost/name.of.app/和http://192.168.x.x/name.of.app/访问应用,和IIS的访问效果完全一致。
内容的提问来源于stack exchange,提问作者Joao Dot Neto
相关产品推荐
相关产品推荐

