因为只有一个服务器,所以把前端后后端api都放在一个服务器里面,然后nginx只代理了80端口,但是ajax直接请求127.0.0.1:5000,但是都出现net::err_connection_refused。
然后我通过postman访问ip+端口就可以成功调用api,只是程序无法调用api,然后我换成localhost:5000或者0.0.0.0:5000都不行,是什么原因?
用postman可以,程序不行,应该不可能
用fiddler看一下,两个有啥区别
我在我电脑上用postman是外网ip访问的,程序是直接在服务器上访问127.0.0.1
应该不用设置什么吧
@灬丶: 你只开放了80端口,为什么要用5000访问呢? 你用5000映射到80端口了吗?
@不知道风往哪儿吹: 为啥要映射,都在同一个服务器上需要映射吗?
@灬丶: 你在服务器能ping 通127.0.0.1:5000这个地址吗
@不知道风往哪儿吹:
@不知道风往哪儿吹: 错了
。。不熟,但是改成ip呢,看你控制台打印,http://127.0.00.1 这不是变成访问本地了吗。。
什么意思
@灬丶: 。你看下你服务器host,配置127和localhost没,没配置就加上或者直接用ip多好。
@WMG-Eight: 对centos不是很熟悉
@灬丶: ...你在服务器上 curl http://127.0.0.1:5000/auth/token
看有结果吗。有的话那应该是nginx配置的问题。
@WMG-Eight: 有结果,但是我本地访问本地的端口也必须通过nginx吗?
@灬丶: 。。看你前台和nginx咋写的啊,一般都是前台不固定ip和端口,给后台url不一样,nginx拦截到这个url转发到对应的ip,当然你也可以前台就写死ip,但是,你在前台写死的话,就要写服务器的那个ip,不能用127,你浏览器打开的是在客户端,客户端的127访问的是客户端的本地,不是服务器。
@灬丶:
你是自己写的前台台自己玩的吗?。。。理解了没。。给你举个例子:
比如你现在服务器ip100,nginx代理80,通过80访问前台,这个时候你访问页面页面的请求类似:
http://192.168.0.100/index.html....
发送到后台的请求其实是
http://192.168.0.100/code/auth
http://192.168.0.100/user/getuserList
类似这样,但是这样和你前台页面请求不好区分,所以一般发送后台的会多加一段:
http://192.168.0.100/test/code/auth
http://192.168.0.100/test/user/getuserList
这样,nginx可以配置拦截 /test请求,转发到其它端口。
在server里面增加
location /test/ {
proxy_pass http://127.0.0.1:5000/;
}
@WMG-Eight: 是的,我前台访问80会代理到我的前端页面,然后里面的ajax调用本地的接口,地址写死的127.0.0.1,但是我刚设置了代理还是不行,404了
@灬丶:
斜杠位置的重要性
@WMG-Eight: 斜杠看不出来问题
location /gateway/ {
proxy_pass http://127.0.0.1:5000;
} 也不行
@灬丶:
location /gateway/ {
proxy_pass http://127.0.0.1:5000;
}
实际是:http://127.0.0.1:5000/gateway/auth/code
proxy_pass http://127.0.0.1:5000/;
@灬丶:
上面location的斜杠,影响的是拼接的时候带不带。
比如:
location /gateway/ {
proxy_pass http://127.0.0.1:5000/;
}
实际是:http://127.0.0.1:5000/auth/code
location /gateway {
proxy_pass http://127.0.0.1:5000/;
}
实际应该是:http://127.0.0.1:5000//auth/code
你试验下。
前端是上了docker吗?然后前端请求了127.0.0.1:5000?
如果是这样,建议你换成内网地址
127.0.0.1:5000指的可能是你前端容器内的5000端口
如果不是在docker里面,那就当我没说
不是docker