在Fedora上运行的Apache,PHP,Nodejs,根据所选域

时间:2015-08-02 12:08:24

标签: php node.js apache fedora

我使用数字海洋液滴(也许它可以帮助解决我的问题)。

我的配置是:

  • Fedora 22 [link]
  • Apache 2.4 [link]
  • PHP 5.6.11 [link]
  • MariaDB 10.0.20 [link]
  • phpMyAdmin 4.4.12 [link]
  • 节点0.12.7 [link]

以上所有应用程序都是默认设置"安装后#34;状态。

目前PHP正在端口80上运行,nodejs正在端口3000上运行。所以我必须输入:

  • mydomain.com for php
  • mydomain.com:3000 for nodejs

我想要做的是:

如果我输入someDomainForPhp.com/,我会转到php默认位置/var/www/html/

如果我输入otherDomainforNode.com/,我会转到节点默认位置/root/

因此,根据我的理解,apache必须进行一些内部端口重新路由才能完成此任务。

我一直关注互联网上的许多指南,描述如何做到这一点,但我认为他们是针对那些对这个主题有一些基本知识的人。我是一个非常新的"绿色"对此,我正在与它斗争。

如果有人愿意提供帮助,我可以使用以下信息:

  • 要编辑的文件
  • 他们在哪里
  • 如何编辑
  • 如果需要安装任何其他模块,它们的名称是什么

编辑03.08.2015

我用Google搜索并尝试了以下方式:

<VirtualHost 109.74.199.47:80> # server ip address or *
    ServerAdmin davy.brion@thatextramile.be # any email address
    ServerName thatextramile.be # domain name
    ServerAlias www.thatextramile.be # any domain alias

    ProxyRequests off

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

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

我把它放在最底层的/etc/httpd/conf/httpd.conf文件中。许多人报告说这种方法适用于他们但是如果我尝试了,我在访问域时获得了503 error。所以我用Google搜索了这个503错误,我发现有些人有类似的问题,他声称他通过以下方式调整Location标签使其工作:

<Location /path/of/my/project> # for me it would be /root/
    ProxyPass http://localhost:3000/ 
    ProxyPassReverse http://localhost:3000/
</Location>

当我尝试这样做时,服务器的行为就像根本没有虚拟主机指令一样,通过访问域我使用来自apache的常规/var/www/html/index.php文件,没有代理,没有端口更改。

我还读到localhost是不好的方式,它应该是127.0.0.1,但是这并没有改变任何东西。

我没有更改任何默认配置,我只将virtualhost指令添加到httpd conf。我也确定所有需要的模块如mod代理都已启用,我搜索了fedora 20文档并检查了服务器状态,它们默认包含并启用。这真的很奇怪,对于某些人来说,只需添加上面的行就足够了。对我来说,没有一个工作,我要么面临503错误,不知道如何解决它或根本没有代理。我希望有人能够帮助初学者,帮助他们;)

编辑04.08.2015

我正在做研究,我发现有些人遇到了与chmod设置相关的问题,这些设置放在作为php和nodejs根目录的目录上。这对我来说似乎不太合乎逻辑,但无论如何我都尝试了它,我已经改变了(为了测试目的)chmods&#34;允许所有&#34;与两个应用程序相关的所有目录的配置。它根本没用。

我也读过博客,有人声称问题可能是我只包括到端口3000的代理路由,而且我没有创建常规php显示的规则。教程显示,除了为nodejs创建的规则外,它还应该包含:

<VirtualHost 109.74.199.47:80> # server ip address or *
    ServerAdmin davy.brion@thatextramile.be # any email address
    ServerName thatextramile.be # domain name
    ServerAlias www.thatextramile.be # any domain alias
    DocumentRoot /var/www/html/
</VirtualHost>

所以第一个规则是为nodejs路由到端口3000,这个是为php工作。问题是,当我实现这个规则时,我有无限循环,服务器永远不会加载。所以当我输入为nodejs准备的域时我有503错误,当我尝试访问域的php时我有502错误。

阅读完之后,我认为我可以指出问题可能出在哪里,但我仍然可以使用有关精确解决方案的帮助。

  • 可能是linux防火墙阻塞端口,然后80(在这种情况下为3000)并且可能在添加一些异常后防火墙问题将得到解决
  • 可能是我的nodejs server.js脚本有问题

这是用于测试的server.js文件。它是使用node forever模块无限启动的:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.send('Hello World!');
});

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);
});

1 个答案:

答案 0 :(得分:0)

前几句解释:

  1. 在声明<VirtualHost>指令之前,您需要添加NameVirtualHost *。而不是*,您可以精确定义您指的是哪个域/ IP。 *当然会起作用,但它被认为不那么安全和慢。

  2. 为了允许代理被传递 - 您需要定义指令<Proxy>,并且您定义的唯一问题是Allow from all。这个语法适用于apache 2.2,你使用apache 2.4所以根据upgreading docs这应该用Require all granted

  3. 您的案例中的
  4. <Location>标记应该与开头时一样,只有一个斜杠<Location />。原因是您not通过额外的命名空间访问您的应用程序,您通过输入直接域名来访问它。

  5. 如果要使用80访问端口phpdomain.com上的php文件,使用3000访问端口nodejsdomain.com上的node.js服务器,那么您应该{{ 1}}创建2个虚拟主机。您只创建了一个,以防您输入not将打开一个端口3000.只有当您使用更多node.js服务器或其他平台时,才需要第二个和更多虚拟主机。由于你创建了它,你最终陷入了无限循环。

  6. 代理不起作用的nodejsdomain.com原因是因为端口3000默认情况下在main上被阻止。首先运行此命令SELinux。 (如果您在上述语法之前未以root类型semanage port -a -t http_port_t -p tcp 3000登录)。

    然后使用虚拟主机指令:

    sudo