Javascript 如何从静态网页链接到node.js应用程序,该应用程序在80以外的端口上侦听?

Javascript 如何从静态网页链接到node.js应用程序,该应用程序在80以外的端口上侦听?,javascript,node.js,apache,Javascript,Node.js,Apache,我正在学习web开发,我想知道如何将一些不同的技术集成在一起。假设我有一个静态网页,托管在Apache服务器上。我还有一个node.js应用程序在该服务器上运行,监听端口9091。我希望能够在静态页面上有一个链接,向node.js应用程序上的某个路由发送get请求,并显示返回的html。当然,Apache正在监听端口80 我所描述的可能吗?这是做我想做的事情的最好方式吗?我知道我可以完全取消Apache,只让node.js应用程序为静态页面服务,但有人告诉我这是一种糟糕的做法,因为node.js

我正在学习web开发,我想知道如何将一些不同的技术集成在一起。假设我有一个静态网页,托管在Apache服务器上。我还有一个node.js应用程序在该服务器上运行,监听端口9091。我希望能够在静态页面上有一个链接,向node.js应用程序上的某个路由发送get请求,并显示返回的html。当然,Apache正在监听端口80

我所描述的可能吗?这是做我想做的事情的最好方式吗?我知道我可以完全取消Apache,只让node.js应用程序为静态页面服务,但有人告诉我这是一种糟糕的做法,因为node.js托管静态页面的效率要低得多


谢谢

您只需将端口号放入URL中,即可链接到服务器上特定端口号的URL:

浏览器将在该端口上与该主机联系并向其发送http请求


但是,您可能不想这样做,因为如果静态页面在URL中显示一个端口号,而动态页面显示另一个端口号,那么您的站点看起来会很混乱,这可能会使站点的维护变得非常复杂

首先,在您实际证明自己需要静态页面之前,您可能不应该使用单独的服务器来提供静态页面。在提供静态资源方面,Express肯定会被NGINX的Apache打败,但这并不可怕,因此除非您已经将Express服务器的容量最大化,否则我不建议在证明您需要它之前增加复杂性。您可以在以后添加额外的比例,而无需进行重大的架构更改

其次,处理静态资源的更好方法是在web服务器前面放置一个代理(NGINX通常与node.js一起使用)。然后,将代理放在端口80上。它检查URL,如果它是URL中表示静态资源的模式,那么它接受请求并为静态资源提供服务。如果没有,它会将请求转发给处理它的Express服务器。Express服务器将运行在不同的主机上,或者(如果没有,则运行在与代理相同的主机上),然后运行在不同的端口上。但是,外部世界看不到Express服务器的端口,只有代理及其端口80对外部世界可见。所有内容都将从代理服务器上的端口80发送到/发送到端口80。又好又简单


从一开始,您应该做的一件事是确保URL中有一个可识别的模式,指示资源是静态的还是动态的。无论是使用NGINX作为代理,还是使用
express.static()
从express为静态文件提供服务,这都是正确的。一个常见的技巧是对所有静态资源使用一个或多个路径前缀,例如
/img
/css
/font
/script
,等等。。。或者将所有内容放在一个前缀后面,例如
/static
,这样,就可以很容易地为将来的代理配置一个确切的URL,该代理应该为静态资源获取哪些URL,以及应该将哪些URL转发到Express server。

只需将端口号放在URL中,就可以将URL链接到服务器上的特定端口号:

浏览器将在该端口上与该主机联系并向其发送http请求


但是,您可能不想这样做,因为如果静态页面在URL中显示一个端口号,而动态页面显示另一个端口号,那么您的站点看起来会很混乱,这可能会使站点的维护变得非常复杂

首先,在您实际证明自己需要静态页面之前,您可能不应该使用单独的服务器来提供静态页面。在提供静态资源方面,Express肯定会被NGINX的Apache打败,但这并不可怕,因此除非您已经将Express服务器的容量最大化,否则我不建议在证明您需要它之前增加复杂性。您可以在以后添加额外的比例,而无需进行重大的架构更改

其次,处理静态资源的更好方法是在web服务器前面放置一个代理(NGINX通常与node.js一起使用)。然后,将代理放在端口80上。它检查URL,如果它是URL中表示静态资源的模式,那么它接受请求并为静态资源提供服务。如果没有,它会将请求转发给处理它的Express服务器。Express服务器将运行在不同的主机上,或者(如果没有,则运行在与代理相同的主机上),然后运行在不同的端口上。但是,外部世界看不到Express服务器的端口,只有代理及其端口80对外部世界可见。所有内容都将从代理服务器上的端口80发送到/发送到端口80。又好又简单


从一开始,您应该做的一件事是确保URL中有一个可识别的模式,指示资源是静态的还是动态的。无论是使用NGINX作为代理,还是使用
express.static()
从express为静态文件提供服务,这都是正确的。一个常见的技巧是对所有静态资源使用一个或多个路径前缀,例如
/img
/css
/font
/script
,等等。。。或者将所有内容放在一个前缀后面,例如
/static
,这样,就可以很容易地为将来的代理配置一个URL,它应该为静态资源获取哪些URL,以及应该将哪些URL转发到Express server。

非常感谢您提供了非常有帮助、深入的答案。我有一个简短的问题:你知道有一个很好的参考资料,我可以在那里阅读到使用NGINX的代理配置,就像你描述的那样?我找不到什么东西,可能我不确定要使用的搜索词是否正确。再次感谢@约瑟夫摩根-我只是在谷歌上搜索了一下自己:然后。更多