【问题标题】:Host multiple asp.net core web application under a single linux server在单个 linux 服务器下托管多个 asp.net core web 应用程序
【发布时间】:2019-08-18 05:06:20
【问题描述】:

我是 asp.net 核心的新手。我阅读了整个 Microsoft 官方文档并能够在 Linux Apache 服务器中托管应用程序。但我想在一个 IP 地址下托管多个 asp.net 核心 Web 应用程序。拜托,任何人都在这里发布解决方案。

提前致谢

【问题讨论】:

    标签: linux apache asp.net-core-2.0


    【解决方案1】:

    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 应用程序:

    1. 第一个被称为WebApp1 并在0.0.0.0:5000 上侦听。
    2. 另一个叫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>
    

    【讨论】:

    • 是的,它对我有用。但如果没有 www 扩展,它默认转到 5001 端口
    • @saswatsaubhagya 如果您使用的是https 而不是http,则默认端口为5001。无论如何,根据需要自定义此配置:)
    • 谢谢,kestrel 服务文件呢,我需要为每个运行 asp.net core 的网站准备 1 个文件吗?
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多