在 Apache 2.4 上运行两个 Web 应用程序

在 Apache 2.4 上运行两个 Web 应用程序

我正在尝试在我的 Linux apache 服务器上运行两个应用程序:

  • 开放项目
  • pgAdmin(WSGI 应用程序)

并且,为了从远程计算机连接它们,我使用了这些httpd配置文件:

对于 OpenProject:

Include /etc/openproject/addons/apache2/includes/server/*.conf

<VirtualHost *:80>
  ServerName 198.162.12.13
  DocumentRoot /opt/openproject/public

  ProxyRequests off

  Include /etc/openproject/addons/apache2/includes/vhost/*.conf

  # Can't use Location block since it would overshadow all the other proxypass directives on CentOS
  ProxyPass /openproject/ http://127.0.0.1:6000/openproject/ retry=0
  ProxyPassReverse /openproject/ http://127.0.0.1:6000/openproject/
</VirtualHost>

对于 pgAdmin:

<VirtualHost *:80>

    ServerName 198.162.214.23
    WSGIScriptAlias /pgadmin4 /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.wsgi
    WSGIDaemonProcess pgadmin processes=1 threads=25

    <Directory /usr/lib/python2.7/site-packages/pgadmin4-web/>
        WSGIProcessGroup pgadmin
        WSGIApplicationGroup %{GLOBAL}
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>

</VirtualHost>

现在,对我来说,魔法开始了,我的问题在于:

查看两个文件中的服务器名称,pgAdmin 包含我的实际 IP 地址,而 OpenProject 有一些随机 IP 地址。

通过该设置,pgAdmin 可以工作,但 OpenProject 却不工作。

一般来说,如果不对 pgAdmin 进行配置,OpenProject 可以使用任何 IP 地址,这对我来说很奇怪,所以我的第一个问题是:为什么???

总结一下:

如果我在两个文件中都设置了我的实际 IP 地址,那么 OpenProject 就可以工作,而 pgAdmin 则不能。

如果我在两个文件中设置一些随机 IP 地址,那么 OpenProject 可以工作,但 pgAdmin 则不可以。

如果我为 OpenProject 设置实际 IP,为 pgAdmin 设置随机 IP,那么 OpenProject 可以工作,而 pgAdmin 则不工作。

如果我为 OpenProject 设置随机 IP,为 pgAdmin 设置实际 IP,那么 OpenProject 将无法工作,但 pgAdmin 可以工作。

为什么这么混乱?如何配置这些文件才能使两个应用程序都按预期工作?

答案1

使用 DNS 创建两个名称(例如openproject.examplepgadmin.example),指向服务器的实际地址(显然是 198.162.12.13)。在相应的设置中配置这些名称ServerName,然后使用http://openproject.examplehttp://pgadmin.example来访问它们。

答案2

要在单个 IP 地址上运行多个独立的网站/应用程序,大致有三个选择:

  • 您可以在不同的 URL 路径中安装每个应用程序,即$(hostname)/app1/app2

如果两个应用程序都需要安装在根目录中,则/您的选择是

  • 在不同的端口号上运行多个虚拟 Web 服务器,http://$(hostname):81/将显示一个应用程序,也http://$(hostname):82/可以显示不同的应用程序

  • 在不同的主机名下运行多个虚拟 Web 服务器并执行基于名称的虚拟主机。然后http://app1.example.com/可以显示一个应用程序并http://app2.example.com/显示另一个

您的配置似乎尝试使用最后一个选项,但由于两个 VirtualHost 定义都配置了相同的ServerNameApache,因此无法区分它们。

相关内容