事情是这样的 …
自己用 SpringBoot 写了一个服务端,然后前端 React 部分,为了避免跨域,使用了 express-http-proxy
。
结果:
1 | // port 3000 |
加上这个之后始终访问 localhost:3000/api/*
报 404 。
然而,proxy 换任何地址都可以,比如 https://www.baidu.com
,就唯独 http://localhost:8080/api/v1
这个就是 404。
一度以为 express-http-proxy
对 localhost 的处理出现了 bug。
两个晚上之后,突然想到了电脑上后台跑着 nginx , 8080
端口的请求可能又被代理了。一看 nginx.config
, 果然如此。
想着关了 nginx
吧。
然后就 sudo nginx -s stop
1 | nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) |
上网搜了一下,大概是 nginx
在启动的时候会创建 nginx.pid
,在重启和关闭的时候都会检测 nginx.pid
是否存在。关闭时删除。
碰到这个问题,一般只需要 sudo nginx
再启动一下 nginx
就行了。结果执行后,又出现了这个问题:
1 | nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use) |
但是没仔细看,不就是端口被占用吗,然后找了半天的 48 端口,NM,这和 nginx
有啥关系。
后来发现是 8080
被 SpringBoot 的内置 tomcat 占用,导致启动的时候,nginx
不能绑定 8080
端口。
论认真严谨的重要性。