0%

服务器部署Nginx的坑

好久不发博文了,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
2
nginx -s stop
nginx -c nginx.conf

崩溃的总结

linux系统也各种坑呀,一半都是系统设置的问题,一开始还没找到error的log完全不知道发生了什么。

今天以后我也是用过nginx的人了