阿帕奇+ Node.js的+ mod_proxy的。 如何路由一个域名:3000,另一个是:80

2019-07-18 02:17发布

问题:我需要承载节点的应用程序,并在不同的域在同一台服务器上的PHP应用程序。

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

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

<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,运行节点的应用程序。

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

这也将是好为example.com/old-admin指向端口80。

Answer 1:

只要做两个<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



Answer 2:

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

对于默认安装位置的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.confsites-available并复制上面的配置与例题更换例1。

对于子域,更换www :在文件名,里面有你的子域名,如配置api

一旦你创建了conf文件,你有一个命令,让他们

a2ensite www.example1.com.conf

然后重新加载的apache2与命令

sudo systemctl reload apache2

请确保您有目录example1example2创建重新加载Apache之前在APACHE_LOG_DIR创建。

而已。 配置与服务器IP地址域的A记录域名注册机构或CDN,无论您使用的,你应该是好去。



文章来源: Apache + Node.js + mod_proxy. How to route one domain to :3000 and another to :80