反向代理(Reverse Proxy)就是把收到的请求转给别人,它也是一种 Web 服务器,使用 Nginx 可以配置这种反向代理服务器。其实我们用 Node.js 开发的应用本身就带着 Web 服务,不过因为 Nginx 比 Node.js 更擅长接待请求,所以我们可以用 Nginx 给应用配置一个反向代理服务器,这个服务器会把收到的请求再转给我们的这个 Node.js 应用,应用处理了请求以后,会把结果交给反向代理,这个反向代理会把响应的东西再发给客户端。
我提前准备好了一个反向代理的配置,你可以在这个代码仓库里找到,打开这个 reverse-proxy.conf ,然后复制一下这个文件里的内容。
回到远程登录到云服务器的终端标签,确定一下当前的位置,是在 /etc/nginx/conf.d 这个目录,这个目录里有个 demo.conf 文件,可以重命名一下这个文件,把它命名为 demo.bak ,这样这个文件里的内容就不会作为 nginx 的配置了。
在这个目录里新建一个配置文件, sudo vi 文件是 xb2-node-api.ninghao.net.conf , 按下小 i 打开编辑模式,然后把刚才复制的配置文件里的内容粘贴到这里。
你要根据自己的实际情况修改一下这个配置文件,比如要改一下 ssl 证书还有密钥文件的位置,服务器的 server_name 等等。
这个配置比之前你看到的那个支持 HTTPS 协议访问的配置差不多,只不过这里多了一个 location 区块,在这个区块里,最关键的是用了一个 proxy_pass 设置了一个代理要转发到的位置,这里就是 http://127.0.0.1:3000 。这里的 127.0.0.1 指的是本地主机,一会儿我们的应用会在 3000 这个端口运行。
这样这个 Nginx 服务器就会把它收到的请求转发给我们的应用。
按下 esc 退出编辑模式,再输入 :wq ,按下回车,保存并退出。 执行一下 sudo nginx -t 测试一下 nginx 的配置文件, 确定没有问题,再重载一下 nginx,执行 sudo systemctl reload nginx 。
完成以后,回到用域名访问的这个浏览器标签,刷新一下,现在你看到的是 Nginx 提供的一个错误页面,响应的状态码是 502,表示 Bad Gateway。这是因为现在访问 xb2-node-api.ninghao.net 这个地址的时候,接待请求的是一个 Nginx 反向代理服务器,这个反向代理会把请求转发给 127.0.0.1:3000,目前在这台云服务器上还没有任何服务使用 3000 这个端口,所以这个反向代理也就没法给客户端做出正常的响应,它只能做出一个异常响应,也就是你看到的这个 502 Bad Gateway。