Apache 阿帕奇&x2B;Node.js+;mod_代理。如何将一个域路由到:3000,将另一个域路由到:80

Apache 阿帕奇&x2B;Node.js+;mod_代理。如何将一个域路由到:3000,将另一个域路由到:80,apache,node.js,mod-proxy,Apache,Node.js,Mod Proxy,问题:我需要在不同域的同一台服务器上托管一个节点应用程序和一个php应用程序 example.com应正常使用端口80,但node-example.com应路由到端口3000 使用mod_代理将所有流量从端口80路由到3000可以正常工作,因此: <VirtualHost *:80> ServerAdmin info@node-example.com ServerName node-example.com ServerAlias www.node-examp

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

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

使用mod_代理将所有流量从端口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>

服务器管理员info@node-example.com
ServerName node-example.com
ServerAlias www.node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:3000/
ProxyPassReversehttp://localhost:3000/
然而,这使得example.com和node-example.com都指向localhost:3000并运行节点应用程序

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

例如,也可以将.com/old-admin指向端口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>

服务器管理员info@node-example.com
服务器名www.node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:3000/
ProxyPassReversehttp://localhost:3000/
服务器管理员info@node-example.com
ServerName node-example.com
代理请求关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:80/
ProxyPassReversehttp://localhost:80/
应该是这样的;)


或者,如果您的
localhost:80
应用程序不是节点,您可以删除该目标的
&
标记,并将其替换为
DocumentRoot/var/www/node example.com
-您的index.html的静态路径我建议您为两个域创建两个不同的虚拟主机配置文件。这将使您能够独立地配置它们,并且在扩展不同时将它们移动到不同的服务器

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

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


服务器名www.example1.com
服务器管理员webmaster@example1.com
选项-索引+FollowSymLinks
允许超越所有
要求所有授权
DirectoryIndex.html
选项-索引+FollowSymLinks
允许超越所有
要求所有授权
DirectoryIndex.html
代理请求关闭
代理主机
ProxyPass/api/“http://localhost:30007/"
ProxyPassReverse/“http://localhost:30007/"
ErrorLog${APACHE\u LOG\u DIR}/example1/example1.LOG
CustomLog${APACHE\u LOG\u DIR}/example1/example1.LOG组合
在可用站点中创建另一个文件
www.example2.com.conf
,并复制上述配置,将example1替换为example2

对于子域,将文件名和内部配置中的
www
替换为子域,例如:
api

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

a2ensite www.example1.com.conf

然后使用命令重新加载apache2

sudo systemctl重新加载apache2

在重新加载APACHE之前,请确保已在APACHE_LOG_DIR中创建了目录
example1
example2


就这样。在域注册器或CDN中使用服务器IP地址配置域的A记录,无论您正在使用什么,您都可以使用。

我以前尝试过使用两个virtualhost标记,但它不起作用。。。结果我忘了设置“NameVirtualHost*”。谢谢你的回答!哇!你把我从iptables和它的隐形规则中救了出来:)效果很好。tnx mate。如果仍然无法正常工作,请确保在apache配置中启用了
mod_proxy
mod_proxy\u http
,然后重新启动服务器。@drinchev是否需要将“ProxyRequests off”添加到我的所有apache站点文件中?来自:如果使用转发代理,严格限制访问是必不可少的(使用ProxyRequests指令)。否则,任何客户端都可以使用服务器访问任意主机,同时隐藏其真实身份。这对您的网络和整个Internet都是危险的。使用反向代理时(在关闭ProxyRequests的情况下使用ProxyPass指令),访问控制不那么重要,因为客户端只能联系您专门配置的主机。
<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>