Nginx问题汇总

标签: Nginx 分类: 后台服务 创建时间:2020-09-27 08:19:55 更新时间:2023-10-20 11:23:26

1.unknown directive “worker_processes”

出现这个问题,就是修改nginx.conf的编码,改为UTF-8编码。

参考文章:
1.nginx启动失败 unknown directive “worker_processes” (这个文章给了思路)

3.403禁止问题解决思路

这里需要配置两个路由,一个是 /disaster,一个是 /disaster/public ,我需要在 /disaster 下配置 /disaster/public 访问,这个disaster是一个vue项目,这个 /disaster/public 目录是另外一个vue项目。因为disaster配置了 try_files $uri $uri/ /renfang/index.html, 不匹配的路由,统统跳转到了 index.html 页面,防止页面空白。但是这也同时造成了一个问题,就是说 路由到了 /disaster/public 的时候,最后也会跳转到了 /diaster 路由,导致始终无法访问到 /disaster/public目录。

本来我的目录是 C:/projects/disaster 目录下,还有一个 public 目录,后来查看nginx的访问error.log日志,结果出现了:directory index of “C:/projects/disaster/public” is forbidden 错误,于是我把 public目录移到了 C:/projects/disaster-public/ 目录。

同时我尝试了设置了用户权限,设置了EveryOne,还是显示403禁止,我尝试了加 斜杠和不加斜杠了,最终都无法访问 /disaster/public 项目。

【解决方法】
经过不断的尝试,不断的试错,经过三个小时的奋斗,最后终于算是解决了这个问题,主要做了下面的几个地方的修改:
(1) nginx最后的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
location ^~ /disaster/public {
alias C:/projects/disaster-public/;
autoindex on;
index index.html;
}

location /disaster {
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#add_header Access-Control-Allow-Credentials true;
return 200;
}

add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers *;

alias C:/projects/disaster;
proxy_pass http://xxx/disaster/;

index index.html;
}

(2) vue-router增加了一个空的路由,

1
2
3
4
5
// 空的目录
{
path:'/public',
name:"public",
}

(3) 在路由导航中进行判断,如果有public进行跳转。

1
2
3
4
5
const whitelist=['login','public']; // 路由白名单
router.beforeEach((to,from,next) => {
// 检查路由
checkLogin(to,from,next,token);
});

(4) 还有一点注意的,可能就是缓存的问题了,清空浏览器缓存,清空钉钉的缓存,重新访问页面。

4../nginx: error while loading shared libraries: libssl.so.1.1:

使用 “./nginx -V” 命令查看nginx版本时,出现这个问题。

1
2
# 查看依赖
ldd $(which /usr/local/nginx/sbin/nginx)

5.Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

在前端使用使用ajax请求时,设置了Content-Type:application/json,后台就返回了一个错误。

解决方法,在nginx配置文件中增加配置。

1
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization

6.windows启动报错

在windows上启动nginx,需要注意两点
(1) 路径不支持中文
(2) 路径的格式为D:/soft/www,而不是D:\soft\www

参考文章:
1.nginx. 启动nginx访问报错 (这里有路径格式的说明)

7.504 Gateway Time-out

config添加配置:

1
2
3
4
5
6
7
8
9
10
11
12
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

## 这一句话是主要的,其他都可以不添加
proxy_read_timeout 300;

fastcgi_read_timeout 600;
fastcgi_param PATH_INFO $fastcgi_script_name;
}

8.host not found in upstream

nginx 启动错误”nginx: [emerg] host not found in upstream “解决方案。

9.413 Request Entity Too Large问题的解决方法

可以在三个地方通过配置client_max_body_size 20m;限制文件传输的大小。第一个是 http{},控制着所有nginx收到的请求。第二个是server{}中,则控制该server收到的请求报文大小,同理,如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。

10.请求参数消失

使用nginx转发请求的时候,导致查询不到后面的值。需要设置以下内容

1
2
3
4
5
6
 location / {
proxy_set_header Host $host; //nginx的变量$host,代表实际的host
proxy_set_header X-Real-IP $remote_addr; //nginx的变量$host,代表实际的address
proxy_pass http://localhost:8080/$request_uri ;//nginx的变量$host代表实际的主机,$request_uri代表实际的请求链接,也可以用$args代替
}

11.woff、ttf访问出现404

12.The plain HTTP request was sent to HTTPS port

参考文章:
1.解决故障码400,“”The plain HTTP request was sent to HTTPS port“” 简单从报错的字面意思上来看,是因为HTTP请求被发送到HTTPS端口,这种报错多出现在Nginx既处理HTTP请求又处理HTTPS请求的情况。
2.解决The plain HTTP request was sent to HTTPS port
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。