33

问题:我需要在不同域的同一台服务器上托管一个节点应用程序和一个 php 应用程序。

example.com 应该正常使用端口 80,但 node-example.com 应该路由到端口 3000。

使用 mod_proxy 将所有流量从端口 80 路由到 3000 工作正常,因此:

<VirtualHost *:80>
    ServerAdmin info@node-example.com
    ServerName  node-example.com
    ServerAlias www.node-example.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:3000/
            ProxyPassReverse http://localhost:3000/
    </Location>

</VirtualHost>

然而,这使得 example.com 和 node-example.com 都指向 localhost:3000 并运行 Node-app。

有没有办法让 example.com 指向端口 80?

example.com/old-admin 也可以指向端口 80。

4

2 回答 2

39

只做两个<VirtualHost *:80>标签

<VirtualHost *:80>
    ServerAdmin info@node-example.com
    ServerName www.node-example.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:3000/
            ProxyPassReverse http://localhost:3000/
    </Location>

</VirtualHost>
<VirtualHost *:80>
    ServerAdmin info@node-example.com
    ServerName  node-example.com    

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:80/
            ProxyPassReverse http://localhost:80/
    </Location>

</VirtualHost>

它应该这样工作;)

或者,如果您的localhost:80应用不是节点,您可以删除该目标的<Proxy *>&<Location />标签并将其替换为DocumentRoot /var/www/node-example.com- 您的 index.html 的静态路径

于 2013-01-10T14:21:16.407 回答
5

我建议您为两个域创建两个不同的虚拟主机配置文件。除了在缩放不同时将它们移动到不同的服务器之外,这将使您能够独立配置它们。

对于具有默认安装位置的 apache2,

在 /etc/apache2/sites-available/www.example1.com.conf 中创建一个文件

<VirtualHost *:80>
        ServerName  www.example1.com
        ServerAdmin webmaster@example1.com

        <Directory /home/example1/api/admin/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        <Directory /home/example1/api/mobile/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass /api/         "http://localhost:30007/"
        ProxyPassReverse /      "http://localhost:30007/"

        ErrorLog ${APACHE_LOG_DIR}/example1/example1.log
        CustomLog ${APACHE_LOG_DIR}/example1/example1.log combined

</VirtualHost>

www.example2.com.conf在其中创建另一个文件sites-available并复制上述配置,将 example1 替换为 example2。

对于子域,www用您的子域替换文件名和内部配置,例如:api.

创建 conf 文件后,您必须使用命令启用它们

a2ensite www.example1.com.conf

然后用命令重新加载 apache2

sudo systemctl reload apache2

确保在重新加载 apache 之前创建了目录example1并在 APACHE_LOG_DIR 中创建。example2

而已。在您的域名注册商或 CDN 中使用服务器 IP 地址配置您的域的 A 记录,无论您使用什么,都应该一切顺利。

于 2018-09-05T12:41:25.097 回答