【问题标题】:Proxy a node/react application in an apache server在 apache 服务器中代理节点/反应应用程序
【发布时间】:2019-05-31 02:31:06
【问题描述】:

使用 forever 在虚拟机上永久运行节点服务器,如果不明确在 url 中添加端口,我无法让应用程序运行,如下所示:URL.com:8080 如果我不使用 URL 中的端口,我会加载应用程序的文件结构。

重现步骤:我有一个 create-react-app 应用程序。在虚拟服务器上,我运行“npm run build”以确保我有一个构建服务。然后我在应用程序的根目录上运行永远启动。

下面的代码应该提供所有必要的细节。如果您需要,我可以提供更多。

我花了很多时间调整 .conf 文件以尝试不同的配置,但我似乎无法理解。我正在使用它并成功托管了两个静态 html 网站,但没有托管此节点应用程序。

包.json:

...
"main":"server/index.js",
"proxy":"http://localhost:8080"
...

Apache url.conf:

<VirtualHost *:80>
    ServerName URL.com
    ServerAlias URL.com:8080/
    DocumentRoot /var/www/nameOfApp/
<Directory />
    Options -Indexes +FollowSymLinks
    AllowOverride All
</Directory>
<Directory /var/www/nameOfApp/public>
    Options +Indexes +FollowSymLinks +MultiViews
    AllowOverride All
</Directory>
</VirtualHost>

使用 express 的节点服务器文件:

app.use(express.static(`${__dirname}/../build`));

我还确保启用了允许代理的模块。所以我认为本质上,我需要的是请求这个站点,而不是最后需要 :8080。

【问题讨论】:

  • 您为 Apache 启用了代理模块,但您是否正确设置了它?类似于stackoverflow.com/questions/9831594/…
  • 我只使用 a2en... 来启用它们。这不是正确的方法吗?我需要修改其他配置吗? @jimmy5312
  • 我浏览了您发送给我的链接,并在我的 proxy.conf 文件中添加了 ProxyPass 行,并确保启用了两个 LoadModule。然后我在 /var/www 中添加了一个“节点”文件夹,并将 site.conf 中的 DocumentRoot 更改为指向该文件夹,但我仍然遇到同样的问题

标签: node.js reactjs apache reverse-proxy


【解决方案1】:

最终成功的配置就这么简单:

<VirtualHost *:80>
    ServerName yourdomain.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
</VirtualHost>

看起来我试图创建一个复杂的代理过于复杂,但解决方案非常简单地将其添加到节点应用程序的配置中,然后运行 ​​sudo systemctl restart apache2 并且一切正常。

【讨论】:

    【解决方案2】:

    Apache 和 NodeJS 是 2 个不同且独立的应用程序。 您通过向他们正在侦听的端口发送请求来与他们进行交互。在您的情况下,

    Apache 正在监听 80 端口

    您的 NodeJS 应用程序正在侦听端口 8080

    所以对端口 80 的所有请求都将由 Apache 处理,并且由于您没有 index.html,Apache 将默认仅列出文件和目录(选项索引)。到目前为止,您的节点应用程序对您的请求一无所知。

    所以你需要做的是定义一些端点,比如 url.com/node,并告诉 Apache 将该端点的所有请求转发到端口 8080 并让你的节点应用程序来完成这项工作。

    如何做到这一点?

    http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

    Best practices when running Node.js with port 80 (Ubuntu / Linode)

    Node.js + Nginx - What now?

    希望这会为您指明正确的方向。

    【讨论】:

    • 我会试试的。谢谢!
    • 我能够得到前端渲染。但是每次对服务器的调用都返回 404。所以如果我手动添加端口:8080,它会正确捕获请求,但只有这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2018-01-16
    • 2019-06-20
    • 2017-03-21
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多