【发布时间】:2019-08-18 05:06:20
【问题描述】:
我是 asp.net 核心的新手。我阅读了整个 Microsoft 官方文档并能够在 Linux Apache 服务器中托管应用程序。但我想在一个 IP 地址下托管多个 asp.net 核心 Web 应用程序。拜托,任何人都在这里发布解决方案。
提前致谢
【问题讨论】:
标签: linux apache asp.net-core-2.0
我是 asp.net 核心的新手。我阅读了整个 Microsoft 官方文档并能够在 Linux Apache 服务器中托管应用程序。但我想在一个 IP 地址下托管多个 asp.net 核心 Web 应用程序。拜托,任何人都在这里发布解决方案。
提前致谢
【问题讨论】:
标签: linux apache asp.net-core-2.0
official document 向我们展示了一种使用 Apache 作为反向代理的方法:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.example.com
ServerAlias *.example.com
ErrorLog ${APACHE_LOG_DIR}helloapp-error.log
CustomLog ${APACHE_LOG_DIR}helloapp-access.log common
</VirtualHost>
基本上,此配置将使 Apache 侦听 *:80 并将任何 ServerName 等于 www.example.com 的 HttpRequest 代理到 http://127.0.0.1:5000/。
这就是 Apache 用作 ASP.NET Core 代理的工作原理。
至于你的问题,假设你有两个 asp.net core web 应用程序:
WebApp1 并在0.0.0.0:5000 上侦听。 WebApp2,监听0.0.0.0:6000。 您的 Apache 服务器侦听 0.0.0.0:80。对于任何传入的 http 请求,
Host等于www.webapp1.org时,将此请求代理到0.0.0.0:5000
Host等于www.webapp2.org时,将此请求代理到0.0.0.0:6000
所以你可以添加两个代理:
代理 1:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.webapp1.org
ServerAlias *.webapp1.org
ErrorLog ${APACHE_LOG_DIR}webapp1-error.log
CustomLog ${APACHE_LOG_DIR}webapp1-access.log common
</VirtualHost>
代理 2:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:6000/
ProxyPassReverse / http://127.0.0.1:6000/
ServerName www.webapp2.org
ServerAlias *.webapp2.org
ErrorLog ${APACHE_LOG_DIR}webapp1-error.log
CustomLog ${APACHE_LOG_DIR}webapp2-access.log common
</VirtualHost>
【讨论】:
https 而不是http,则默认端口为5001。无论如何,根据需要自定义此配置:)