gpt4 book ai didi

php - 在Fedora上运行的Apache,PHP,Nodejs,根据所选域同时路由到php和nodejs

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:19 25 4
gpt4 key购买 nike

我使用Digital Ocean液滴(也许可以作为解决我的问题的有用信息)。

我的配置是这样的:


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]


以上所有应用程序均处于默认的“安装后”状态。

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


mydomain.com用于php
mydomain.com:3000用于nodejs


我想做的是这样的:

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

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

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

我一直在遵循互联网上的许多指南来描述如何执行此操作,但是我认为这些指南适用于对该主题具有一些基本知识的人们。我对此非常陌生且“绿色”,并且对此感到挣扎。

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


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




编辑03.08.2015

我用谷歌搜索并尝试了以下方法:

<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。因此,我用谷歌搜索了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,但这并没有改变任何内容。

我没有更改任何默认配置,只在httpd conf中添加了virtualhost指令。我还确保已启用所有必需的模块(如mod proxy),我在fedora 20文档中进行了搜索并检查了服务器状态,默认情况下已包含并启用了它们。对于某些人来说,仅添加上述行就足够了,这确实很奇怪。对我来说,这些都不起作用,我要么遇到503错误,不知道如何解决它,要么根本没有代理。我希望有人会帮助需要帮助的初学者;)



编辑04.08.2015

我正在做研究,发现有些人遇到了与 chmod设置有关的问题,这些设置位于php和nodejs的根目录中。在我看来,这似乎不是很合逻辑,但无论如何我还是尝试了一下,我将chmods(出于测试目的)更改为“允许所有”与两个应用程序相关的目录的配置。它根本没有帮助。

我也读过博客,有人声称这个问题可能是我只包括到端口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>


因此,第一个规则是将节点js路由到端口3000,而这个规则适用于php。问题是,当我实现此规则时,我会遇到无限循环,并且服务器永远不会加载。因此,当我输入为nodejs准备的域时出现503错误,而当我尝试为php访问域时出现502错误。

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


可能是Linux防火墙阻止了80以外的其他端口(在这种情况下为3000),也许在为防火墙问题添加了一些例外之后就可以解决
可能是我的nodejs server.js脚本有故障


这是用于测试的server.js文件。它使用永远节点模块无限启动:

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);
});

最佳答案

前几句话的解释:


在声明<VirtualHost>指令之前,您需要添加NameVirtualHost *。代替*,您可以精确定义要引用的域/ ip。 *当然可以,但是它的安全性和速度较慢。
为了允许代理传递-您需要定义指令<Proxy>,而定义的唯一问题是Allow from all。该语法适用于apache 2.2,您使用的是apache 2.4,因此根据upgreading docs,应改为使用Require all granted
您的情况下的<Location>标记应与开始时一样,只有一个斜杠<Location />。原因是您正在not通过额外的名称空间访问应用程序,而您是通过输入直接域名来访问它的。
如果要使用80访问端口phpdomain.com上的php文件,而使用3000访问端口nodejsdomain.com上的node.js服务器,则应not创建2个虚拟主机。您只创建一个,以防万一您输入nodejsdomain.com将打开端口3000。仅当您使用更多的node.js服务器或其他平台时,才需要第二个和更多的虚拟主机。由于创建它的事实,您最终陷入了无限循环。


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

然后使用虚拟主机指令:

NameVirtualHost *
<VirtualHost *:80>
ServerName nodejsdomain.com

ProxyRequests off

<Proxy *>
Require all granted
</Proxy>

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

</VirtualHost>

关于php - 在Fedora上运行的Apache,PHP,Nodejs,根据所选域同时路由到php和nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com