![Apache 和 Node 应用的 nginx 反向代理](https://linux22.com/image/678737/Apache%20%E5%92%8C%20Node%20%E5%BA%94%E7%94%A8%E7%9A%84%20nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.png)
我有一个 CentOS VPS,运行 Apache。以前我只是用它来托管一堆 PHP 和静态 HTML 网站,在不同的域名下,一切运行正常。
然后我开发了一个简单的 Node.js 应用程序。我将其发布到我的 VPS 上,只要在 IP 后面加上 :3000,就可以访问它。
我研究了如何使我的 Node 应用在新域名下可访问,同时保持 Apache 配置与原先类似。解决方案似乎是使用 Nginx 进行反向代理。
我最终想要的是:
- 我所有的旧网站都是 PHP 和 HTML 应用程序,并且在 Apache 上运行,仍然可以通过 Apache(端口:8081)上的常用域进行访问
- 我的 Node 应用程序(在端口 3000 上运行)只需通过其新域名即可访问,无需端口号
我目前拥有的:
nginx.conf
user asykes;
error_log /var/log/nginx/error.log warn;
worker_rlimit_nofile 20480;
events {
worker_connections 5120; # increase for busier servers
use epoll; # you should use epoll here for Linux kernels 2.6.x
}
http{
include "/etc/nginx/sites-enabled/*";
}
对于我的 Node 应用程序配置,sites-available/sentiment-sweep.conf (带有指向 site-enabled 的符号链接)
server {
listen 80;
server_name sentiment-sweep.com;
location / {
proxy_pass http://localhost:3000;
}
}
目前的作用
我的服务器上的所有域名都解析到端口 3000 上的节点应用程序
我只需要http://sentiment-sweep.com/解析到 localhost:3000,其他的都转到 revisionquizzes.co.uk:8081/ 上的 Apache 版本,然后http://computerscience.as93.net:8081/等等...
我花了几个小时研究 nginx 配置,为 Apache 端口添加了 server{location{}},但似乎毫无进展。我最接近的一次是它呈现 Apache Sorry 页面时。
任何建议或帮助都将不胜感激,提前致谢
答案1
您必须指定代理的位置。假设您的域名是http://example.com。
访问它们时,请查看下面的 URL 路由。
http://example.com --> http://localhost:3000
http://example.com/revisionquizzes --> revisionquizzes.co.uk:8081
http://example.com/computerscience --> http://computerscience.as93.net:8081
仅为示例配置,只需在 nginx 配置中定义位置:
server {
listen 80;
server_name default_server;
location / {
proxy_pass http://localhost:3000;
}
location /revisionquizzes {
proxy_pass revisionquizzes.co.uk:8081;
}
location /computerscience {
proxy_pass http://computerscience.as93.net:8081;
}
}