当前位置: 首页 > 知识库问答 >
问题:

linux - 网站和接口在同一个服务器接口无法访问nginx该如何配置?

熊朝
2024-03-06

前端和服务端都部署在同一个服务器上,使用nginx进行转发接口的请求,但是报错,

[error] 15880#15880: *57 connect() failed (111: Connection refused) while connecting to upstream, client: 172.8.203.147, server: , request: "GET /v1/user/list?pageIndex=0&pageSize=18&text= HTTP/1.1", upstream: "https://127.0.0.1:3000/v1", host: "www.test.cn", referrer: "https://www.test.cn/"

我请求的连接是如下

https://www.test.cn/v1/user/list?pageIndex=0&pageSize=18&text=

我想的是,通过test.cn域名会访问到服务器默认端口上,然后让nginx转发到对应的服务端口上,比如我的配置是转到了3000端口上

location \v1{ proxy_pass "https://127.0.0.1:300/v1";}

结果就报上面的错误,这个该如何解决,或者我这种部署方式咋弄比价好呢?


我的配置如下:

location ~* /v1/ {                         set $backend "https://127.0.0.1:3100/v1";   # 默认的后端服务器地址                         if ($scheme = http) {                      # 判断请求的协议为 HTTP                                set $backend "http://127.0.0.1:3100/v1";       # 将$backend设置为对应的后端服务器地址                        }                        proxy_pass $backend;     # 使用$backend作为proxy_pass的参数                        # add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";                        add_header Content-Type "application/json";                }

共有2个答案

汪茂
2024-03-06

proxy这么改:

location ^~/v1/ {        proxy_pass https://127.0.0.1:300/v1/;        proxy_set_header  Host $host;        proxy_set_header  X-Real-IP $remote_addr;        proxy_set_header  X-Forwarded-Proto https;        proxy_set_header  X-NginX-Proxy true;        proxy_buffers 256 4k;        proxy_max_temp_file_size 0k;        proxy_connect_timeout 30;        proxy_send_timeout 60;        proxy_read_timeout 60;        proxy_next_upstream error timeout invalid_header http_502;                }

Nginx - proxy_pass路径的唯一拼接规则

龙高超
2024-03-06

根据你的问题描述和错误日志,看起来nginx无法连接到你的后端服务,这可能是由于后端服务并未在你预期的端口(这里是3000端口)上运行,或者nginx没有权限访问这个端口。

首先,你需要确认你的后端服务(可能是Node.js、Python Flask、Django等)确实在3000端口上运行。你可以使用如下命令来检查:

netstat -tuln | grep 3000

如果这个命令没有返回任何结果,那就说明你的后端服务并未在3000端口上运行。你需要启动你的后端服务,并确保它在正确的端口上运行。

如果后端服务确实在3000端口上运行,那么问题可能出在nginx的权限上。nginx可能没有足够的权限去访问这个端口。你可以尝试以root权限运行nginx,或者更改nginx的用户权限,使其有足够的权限去访问3000端口。

此外,你的nginx配置也有些许问题。在你的location块中,你应该使用~~*来匹配URI,而不是\\~用于区分大小写的匹配,而\~*用于不区分大小写的匹配。同时,proxy_pass的URL中不应该包含被匹配的部分。所以你的配置应该改为:

location ~* ^/v1/ {    proxy_pass "https://127.0.0.1:3000/";}

这样,任何以/v1/开头的请求都会被转发到https://127.0.0.1:3000/

最后,确保你的nginx已经重新加载或重启,以应用新的配置。你可以使用如下命令来重新加载nginx配置:

sudo nginx -s reload

如果以上步骤都无法解决问题,你可能需要更深入地检查你的后端服务和nginx的配置,看看是否有其他的问题。

 类似资料:
  • 内网搭建后 加入端口访问 不可行吗 公司要求必须加入端口访问内网,然而现在目前再用的网站做迁移的时候发现很多端口 我批量开启后 测试无法访问 路由器映射 已经完成 公司用的专线 有动态公网地址 外网中可以访问面板地址也可以正常操作 唯独部署的 项目端口无法访问 ng的80端口 没动 创建的空间端口 8080 1070 这种 也无法访问 折腾不来

  • 问题内容: 我打算在两个响应结构的标头和主体中同时使用HTTP状态代码。不要在没有设置状态码的情况下将其设置为功能参数的两倍,并再次为结构设置以避免冗余。 该参数的是允许两个结构被接受的接口。编译器将引发以下异常: 因为响应字段必须没有状态属性。是否有另一种方法可以避免两次设置状态代码? 问题答案: 键入的是。在Go中,您需要显式声明基础结构的类型,然后访问该字段: 但是,更好的方法是为响应定义一

  • 现在使用 ip 访问前端页面发起的请求代理转发到 http://localhost:3000 时访问不到后端接口服务,是方法错了吗?还有什么更好得方案? 希望同时在linux服务器上运行前端项目(80端口)和Node接口服务(3000端口)。 并且使用公网 ip 访问前端项目时接口能够正常访问。 接口部分 Linux 上本地运行 node app.js 运行接口服务到 3000 端口 前端部分 编

  • 在我的应用程序中有一个对象树。要构成该树,每个对象都有一个父引用。由于某些对象类型可以是多个父对象类型的子对象,所有潜在的父对象类型都通过实现公共接口来统一。我尽可能地缩小了问题的范围(JAXB抱怨父成员变量(注释为@XmlIDREF和@xmldattribute)是一个接口): 这是我在尝试运行它时得到的例外: com.sun.xml.internal.bind.v2.runtime.非法注释异

  • 问题内容: 尝试部署应用程序时,似乎出现以下异常: 我的代码运行良好,直到将返回类型从List更改为List > 这是部分Web服务: 我也尝试过通过删除@SOAPBinding并尝试使用默认值,但是会出现相同的结果。 感谢任何帮助 更新 我要注意一些事情。我将所有List更改为ArrayList,然后进行编译。我之所以说编译但不起作用是因为它的行为很奇怪。我得到一个类型为Object的对象:Re

  • 本文向大家介绍Python 搭建Web站点之Web服务器网关接口,包括了Python 搭建Web站点之Web服务器网关接口的使用技巧和注意事项,需要的朋友参考一下 在 Python 搭建Web站点之Web服务器与Web框架 中我们弄清楚了Web 服务器、Web 应用程序、Web框架的概念。对于 Python 来说,越来越多的 Web 框架面世,在给我们更多选择机会的同时,也限制了我们对于 Web