node.js - Nginx 反向代理到节点应用程序 API
问题描述
我的服务器上有一个 NGINX 反向代理来处理http://apcompdoc.com的请求。它监听 80 端口,并且可以成功返回 Vue Dist,但是,我有一个后端节点 API 在端口 8081 上运行,另一个节点进程在端口 8082 上运行。用户从不直接在 8082 上请求任何内容,而是在 8081 上请求进程有时会在 8082 上请求进程,所以我假设我根本不需要将它暴露给 Nginx,但我不太确定。但是,主要问题是我相信从未达到过 API。我有它,所以当你点击端点http://apcompdoc.com/api/ * 它应该代理到节点进程。我正在使用 PM2 来保持进程处于活动状态并对其进行监控,并确保它正在运行。这是我的 NGINX apcompdoc.com 配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name: apcompdoc.com www.apcompdoc.com;
charset utf-8;
root /var/www/apcompdoc/dist;
index index.html index.htm;
# Always serve index.html for any request;
location / {
root /var/www/apcompdoc/dist;
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://localhost:8081;
}
error_log /var/log/nginx/vue-app-error.log;
access_log /var/log/nginx/vue-app-access.log;
}
我试图在 /api/* 处获取对我的 API 的所有请求,以重定向到 localhost:8081 处的 API,然后返回给用户。我看到了一些关于将代理重定向回来的东西,我必须这样做吗?我也不知道我是否必须/api/*
在 NGINX 配置文件中做。我对 NGINX 真的很陌生,但我只想将对http://apcompdoc.com/api/ * 的请求重定向到端口 8081 上的节点进程。
解决方案
不好还是好的做法,我不确定,但我总是将我的后端定义为upstream
. 例如,您的文件将如下所示:
upstream nodeprocess {
server localhost:8081;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name: apcompdoc.com www.apcompdoc.com;
charset utf-8;
root /var/www/apcompdoc/dist;
index index.html index.htm;
# Always serve index.html for any request;
location / {
root /var/www/apcompdoc/dist;
try_files $uri /index.html;
}
location ^~ /api {
proxy_pass http://nodeprocess;
}
error_log /var/log/nginx/vue-app-error.log;
access_log /var/log/nginx/vue-app-access.log;
}
请注意我^~
在 api 的位置添加并删除了尾随 /
推荐阅读
- javascript - 如何创建自定义 javascript 分页?
- azure - Azure 媒体服务:如何更改容器的命名约定
- ceph - 在保留 osd id 的同时更换磁盘
- sql - 如果下一行数据等于特定值,则检索数据
- division - 使用 cognos Report Studio 中的列表汇总字段计算除法
- cognos - 如何修改 Cognos 可视化中的最小 5 秒限制?
- python - python - print(*generator,
) - javascript - 在 property1 值通过条件后,如何检查同一项目中的 property2 值?
- github-actions - SFDX 和 Github 操作 - 警告:force:auth:sfdxurl:store 不是 sfdx 命令
- amazon-web-services - 如何将条件放入 serverless.yml 文件中?