好久不发博文了,debug了一天的Nginx部署,必须得记录一下踩过的坑。
项目背景
前端有两个页面、后端有一个服务,需要把前端访问转发到后端去读数据库。
服务器用的Centos 8
。
遇到的问题
问题一:无法转发
采用proxy_pass
转发到local,始终没反应,返回502
,log显示(13: Permission denied)
,服务器curl localhost有反应。
结果是linux的http设置问题
解决方法
1 | setsebool -P httpd_can_network_connect 1 |
问题二:部分图片加载一半就结束
有的图片莫名不能加载出来,浏览器的console报错net::ERR_CONTENT_LENGTH_MISMATCH
,log显示(13: Permission denied)
。
这是真的没权限,因为访问速度较慢,nginx创建了temp文件夹做缓存,结果用户权限不够。
解决方法
在nginx的配置下把user改成root(或者其它有权限访问temp文件夹的用户)
问题三:转发到另一nginx端口无效
因为有两个前端,设了不同的端口,结果转发失败(后端转发成功),log显示bind() to 0.0.0.0:**** failed
。
端口没有注册,需要在系统中加入这个端口。
解决方法
1 | sudo semanage port -a -t http_port_t -p tcp xxxx # xxxx is port number |
问题四:修改文件后无法加载
把前端的静态文件重新编译部署了以下,就出现了这个问题,返回403
,log显示(13: Permission denied)
,一直以为是没权限,但用户是root,并且给了777。
结果是nginx的问题,盲猜缓存的锅?
解决方法
手动重新启动,不能用reload
1 | nginx -s stop |
崩溃的总结
linux系统也各种坑呀,一半都是系统设置的问题,一开始还没找到error的log完全不知道发生了什么。
今天以后我也是用过nginx的人了