【问题标题】:Apache + Node.js + mod_proxy. How to route one domain to :3000 and another to :80Apache + Node.js + mod_proxy。如何将一个域路由到:3000,将另一个域路由到:80
【发布时间】:2012-12-24 22:09:05
【问题描述】:

问题:我需要在不同域的同一台服务器上托管一个节点应用程序和一个 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。

【问题讨论】:

    标签: apache node.js mod-proxy


    【解决方案1】:

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

    对于默认安装位置的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>
    

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

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

    一旦你创建了 conf 文件,你必须使用命令来启用它们

    a2ensite www.example1.com.conf

    然后用命令重新加载 apache2

    sudo systemctl reload apache2

    确保在重新加载 apache 之前已在 APACHE_LOG_DIR 中创建了目录 example1example2

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

    【讨论】:

      【解决方案2】:

      只需制作两个&lt;VirtualHost *:80&gt; 标签

      <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 应用程序不是节点,您可以删除该目标的 &lt;Proxy *&gt;&lt;Location /&gt; 标记并将其替换为 DocumentRoot /var/www/node-example.com - 您的 index.html 的静态路径

      【讨论】:

      • 我之前尝试过使用两个虚拟主机标签,但它不起作用......原来我忘记设置“NameVirtualHost *”。不过感谢您的回答!
      • 哇!你把我从 iptables 和它的隐形规则中救了出来 :) 效果很好。 tnx 伴侣。
      • 如果仍然无法正常工作,请确保您已在 apache 配置中启用 mod_proxymod_proxy_http 并重新启动服务器。
      • @dinchev 我是否需要将“ProxyRequests off”添加到我所有的 apache 站点文件中?
      • 来自docs :如果您使用转发代理(使用 ProxyRequests 指令),则严格限制访问是必不可少的。否则,任何客户端都可以使用您的服务器访问任意主机,同时隐藏其真实身份。这对您的网络和整个 Internet 都是危险的。使用反向代理时(使用 ProxyPass 指令并关闭 ProxyRequests),访问控制不太重要,因为客户端只能联系您专门配置的主机。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2019-10-23
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      相关资源
      最近更新 更多