如何在 Apache 网站中托管 ASP.NET 核心网络应用程序?
How to host ASP.NET Core web-app inside an Apache website?
我有一个旧的 php
应用程序是使用 Yii2
框架开发的,该框架托管在路径 /var/www/html
的 Centos
服务器上。此应用程序可在 http://somedomain.com/
.
访问
我正在使用 ASP.NET MVC Core
开发新的 API 项目,需要在 http://somedomain.com/v2/
.
访问
那么,是否可以在 Apache
站点内托管 dotnet core
应用程序并让它们同时工作?如果是,我该如何完成?
您可以添加一个反向代理来做到这一点。假设您的 ASP.NET Core
应用程序在 http://127.0.0.1:5000/
上运行:
dotnet run --urls=http://localhost:5000
如果请求以 http://somedomain.com/v2/
开头,则代理到 ASP.NET Core App
。
+-------+
| +----------------------------------------+
| | |
| | PHP module |
| | |
| +----------------------------------------+
|Apache2|
| |
| (80) | +--------------------+
| | start with /v2/ | |
| | | Asp.Net Core App |
| +-------------------> |
| | | (5000) |
| | reverse proxy | |
+-------+ +--------------------+
首先,通过取消注释httpd.conf
中的这些行来配置代理模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http2_module modules/mod_proxy_http2.so
然后为以/v2/
开头的请求添加以下反向代理设置:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /v2/ http://127.0.0.1:5000/
ProxyPassReverse / http://somedomain.com/
ServerName somedomain.com
ErrorLog ${APACHE_LOG_DIR}webapp1-error.log
CustomLog ${APACHE_LOG_DIR}webapp1-access.log common
</VirtualHost>
现在它应该可以正常工作了。
一个工作演示
这是一个监听 8089
而不是 80
的演示:
我有一个旧的 php
应用程序是使用 Yii2
框架开发的,该框架托管在路径 /var/www/html
的 Centos
服务器上。此应用程序可在 http://somedomain.com/
.
我正在使用 ASP.NET MVC Core
开发新的 API 项目,需要在 http://somedomain.com/v2/
.
那么,是否可以在 Apache
站点内托管 dotnet core
应用程序并让它们同时工作?如果是,我该如何完成?
您可以添加一个反向代理来做到这一点。假设您的 ASP.NET Core
应用程序在 http://127.0.0.1:5000/
上运行:
dotnet run --urls=http://localhost:5000
如果请求以 http://somedomain.com/v2/
开头,则代理到 ASP.NET Core App
。
+-------+
| +----------------------------------------+
| | |
| | PHP module |
| | |
| +----------------------------------------+
|Apache2|
| |
| (80) | +--------------------+
| | start with /v2/ | |
| | | Asp.Net Core App |
| +-------------------> |
| | | (5000) |
| | reverse proxy | |
+-------+ +--------------------+
首先,通过取消注释httpd.conf
中的这些行来配置代理模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http2_module modules/mod_proxy_http2.so
然后为以/v2/
开头的请求添加以下反向代理设置:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /v2/ http://127.0.0.1:5000/
ProxyPassReverse / http://somedomain.com/
ServerName somedomain.com
ErrorLog ${APACHE_LOG_DIR}webapp1-error.log
CustomLog ${APACHE_LOG_DIR}webapp1-access.log common
</VirtualHost>
现在它应该可以正常工作了。
一个工作演示
这是一个监听 8089
而不是 80
的演示: