乐趣区

关于nginx:由于配置nginx转发导致页面一片空白的解决办法及排查过程

零、前言

这个一年没有登录的账号,终于又迎来了更新。考研完结后还没玩爽,又马上回归到敲代码的工作中。一年没接触 coding,程度有所降落,请见谅。

一、问题复现

装好 nginx 后,在全局配置文件中引入我的项目的配置文件,测试通过,nginx 开始运行。

但在浏览器拜访 nginx 端口时,显示的页面只是一片空白,无论如何刷新都是空白,应用谷歌、火狐等不同浏览器症状雷同,并且控制台显示 vender.js 加载失败:


谬误的思路

一开始没有留神 vendor 的这个报错,转而去查看网络、前端代码的问题:

其实网络面板也写了 vendor 出错但我又一次没当回事,
又独自跑了一遍 前端 代码,不必 nginx 转发,能够失常显示,
用 nginx 转发其余我的项目,也能失常显示,

只有用 nginx 转发这个我的项目会出错。

二、解决问题

翻阅了一下网上的博客,是 缓存目录权限 问题,修复一下权限问题即可解决。
但这样写这篇博客就没有意义了,本文更重要的意义在于本人入手把问题排查进去。

①找到配置文件

首先,因为零碎不同、装置办法不同,导致不同用户装置的 nginx 配置文件是不统一的,咱们要找到本人电脑上的配置文件,

应用 nginx -t 能够查出以后 nginx 的配置文件在哪个地位:

nginx -t // 测试 nginx 配置文件并返回文件地位

我电脑上的配置文件在/opt/homebrew/etc/nginx/nginx.conf
(这个门路与网上大多数是不同的,所以咱们查资料时,不要照搬,而要结合实际状况具体问题具体分析)

②启用日志

接下来须要启用日志性能,以便定位问题,日志性能在配置文件中开启:

vim /opt/homebrew/etc/nginx/nginx.conf // 编辑配置文件,启用日志性能

文件内容如下:

#user  nobody;
worker_processes  1;

#error_log   error.log; // 此处的正文就是配置文件的示例代码
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
// (此处略去其余内容)

文件中给出了几个例子,咱们仿照着在上面加一行,门路写到本人电脑的某个门路中,例如我用的/var/log/nginx/error.log,也能够改成其余:


#user  nobody;
worker_processes  1;

#error_log  error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log   /var/log/nginx/error.log  info; // 把谬误日志写到某个门路下
#pid        logs/nginx.pid;

保留退出后,用 nginx -s reload 使更改失效:

咱们还必须保障日志写入的门路有权限,须要:

// 给日志文件夹退出读、写、执行权限
sudo chmod -R 777 /var/log/nginx/  

接下来 nginx 就会主动往 /var/log/nginx/error.log 这个文件外面写入日志了

③查看日志,排查问题

咱们在浏览器外面刷新几下,为的是让 nginx 更新几条日志。

而后查看日志:

cat /var/log/nginx/error.log

日志中会呈现一大堆相似上面的信息:

2021/12/31 15:33:00 [crit] 92317#0: *9819 open() "/opt/homebrew/var/run/nginx/proxy_temp/2/64/0000000642" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /vendor.js HTTP/1.1", upstream: "http://127.0.0.1:4201/vendor.js", host: "localhost:8015", referrer: "http://localhost:8015/login/login"
2021/12/31 15:33:01 [crit] 92317#0: *9811 open() "/opt/homebrew/var/run/nginx/proxy_temp/3/64/0000000643" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /vendor.js HTTP/1.1", upstream: "http://127.0.0.1:4201/vendor.js", host: "localhost:8015", referrer: "http://localhost:8015/login/login"
2021/12/31 15:33:01 [crit] 92317#0: *9846 open() "/opt/homebrew/var/run/nginx/proxy_temp/4/64/0000000644" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /vendor.js HTTP/1.1", upstream: "http://127.0.0.1:4201/vendor.js", host: "localhost:8015", referrer: "http://localhost:8015/login/login"

在计算机中,人是不能置信本人的眼睛的,只能置信实实在在的计算机返回的信息!
只有看了日志,能力石锤就是权限的问题,是 /opt/homebrew/var/run/nginx/ 这个缓存目录没有权限,
于是咱们输出:

sudo chmod -R 777 /opt/homebrew/var/run/nginx/ 

这样就解决了权限问题,再次刷新,页面不再空白,日志也不再报错了。

这种解决思路也实用于其余问题。

总结

一、不要漠视细节,一旦错过了重要的细节,就会多走弯路
二、对于网络上的材料不要照搬,而是联合本人电脑的理论状况具体分析

版权申明

本文作者:河北工业大学梦云智开发团队 – 刘宇轩
新人经验不足,有倡议欢送交换,有谬误欢送轻喷

退出移动版