【问题标题】:Run multiple dotnet api's project in the same EC2 on linux and apache在 Linux 和 apache 上的同一个 EC2 中运行多个 dotnet api 的项目
【发布时间】:2018-01-28 07:47:16
【问题描述】:

我有两个在 Linux EC2 AWS 实例上发布的 dotnet 项目,第一个项目在端口 5000 上,另一个在 50003 端口上。 我在第一个 conf.d 文件夹中创建了两个文件:

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /var/log/httpd/hellomvc-error.log
CustomLog /var/log/httpd/hellomvc-access.log common

和其他:

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5003/
ProxyPassReverse / http://127.0.0.1:5003/
ErrorLog /var/log/httpd/hellomvc-error.log
CustomLog /var/log/httpd/hellomvc-access.log common

第二个只是一个 API。

我的问题是我可以毫无问题地在浏览器上打开第一个项目,但我无法访问第二个项目的 API,即使我可以使用 curl http://localhost:5003/api/Home 在本地访问它

【问题讨论】:

  • 当您打开第一个项目时,您在浏览器地址栏中究竟输入了什么?尝试打开第二个项目时又输入了什么?
  • 第一个我只输入IP,例如34.65.22.102,第二个我输入34.65.22.102/api/Home
  • Apache 需要一些准确的方法来决定服务于哪个站点。在您的情况下,它可以是(子)域名(例如 www.example.comapi.example.com)或 URI 路径(例如,将 /api/* 发送到项目 2,将其他所有内容发送到项目 1。您想要哪种方式是吗?
  • 我是新手,你能告诉我第二个项目配置文件应该是什么样子才能使用 URI 正确调用 API

标签: .net linux apache amazon-web-services amazon-ec2


【解决方案1】:

除非第一个项目和第二个项目有两个不同的域名,否则你可以尝试只使用一个虚拟主机:

<VirtualHost *:80>
ProxyPreserveHost On

# send /api paths to project2
ProxyPass /api http://127.0.0.1:5003/api
ProxyPassReverse /api http://127.0.0.1:5003/api

# and everything else to project1
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/

ErrorLog /var/log/httpd/hellomvc-error.log
CustomLog /var/log/httpd/hellomvc-access.log common
</VirtualHost>

例如,如果您有两个使用 sam 路径 (/api) 的后端服务,您将不得不使用不同的主机名和多个虚拟主机:

<VirtualHost *:80>
  ServerName project1.example.com

  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:5000/
  ProxyPassReverse /api http://127.0.0.1:5000/

  ErrorLog /var/log/httpd/project1-error.log
  CustomLog /var/log/httpd/project1-access.log common
</VirtualHost>

<VirtualHost *:80>
  ServerName api1.example.com

  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:5003/
  ProxyPassReverse /api http://127.0.0.1:5003/

  ErrorLog /var/log/httpd/api1-error.log
  CustomLog /var/log/httpd/api1-access.log common
</VirtualHost>

<VirtualHost *:80>
  ServerName api2.example.com

  ProxyPreserveHost On  
  ProxyPass / http://127.0.0.1:5004/
  ProxyPassReverse /api http://127.0.0.1:5004/

  ErrorLog /var/log/httpd/api2-error.log
  CustomLog /var/log/httpd/api2-access.log common
</VirtualHost>

当然,project1.example.com、api1.example.com 和 api2.example.com 需要解析到你的服务器的 ip 地址

【讨论】:

  • 非常感谢另一个问题,如果我想运行更多 API 项目,例如 3d 项目,我必须做什么
  • 我不得不问与上面相同的问题:对 api1 和 api2 的请求有何不同?
  • 这是两个项目都以 api 开头的问题/我在想也许我们可以使用项目名称
  • 主机名可以是我想要的任何东西吗?或者它应该是我拥有子域的域?因为我没有域名。以及我应该如何通过 api2.example.com/Home 调用我的 api 项目?
  • 如果您希望它可以公开解析并可供任何人访问,您需要购买一个域名。如果您只是想测试,您可以选择任何一个(例如我在示例中使用的确切名称),但您需要 use a hosts file 将这些名称指向您服务器的 IP 地址
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2023-04-02
相关资源
最近更新 更多