使用永久在虚拟机上永久运行节点服务器,如果不像在URL中那样显式添加端口,则无法使应用程序运行:URL.com:8080 如果我不使用URL中的端口,则会加载应用程序的文件结构。
重现步骤:我有一个create-react-app应用程序。在虚拟服务器上,我运行“ npm run build”以确保有可用的构建。然后,我永远在应用程序的根目录上运行。
下面的代码应提供所有必要的详细信息。如果您需要,我可以提供更多。
我花了很多时间来调整.conf文件,以尝试不同的配置,但我似乎无法理解。我正在使用它,并且成功托管了两个静态html网站,但没有成功托管此节点应用程序。
Package.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。
答案 0 :(得分:0)
Apache和NodeJS是两个不同且独立的应用程序。 您可以通过向他们正在侦听的端口发送请求来与他们进行交互。对于您的情况,
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)
希望这会为您指明正确的方向。
答案 1 :(得分:0)
最终有效的配置是如此简单:
<VirtualHost *:80>
ServerName yourdomain.com
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
</VirtualHost>
好像我在尝试创建复杂的代理程序时使它过于复杂,但是解决方案只是将其添加到节点应用程序的配置中,然后运行sudo systemctl restart apache2,一切正常。