[TOC]
## 常见状态码和代表意义
200(成功)服务器已成功处理了请求。
301(永久移动)
302(临时移动)
303 See Other 表示服务器要将浏览器重定向到另一个资源,这个资源的 URI 会被写在响应 Header 的 Location 字段。从语义上讲,重定向到的资源并不是你所请求的资源,而是对你所请求资源的一些描述。303 常用于将 POST 请求重定向到 GET 请求,比如你上传了一份个人信息,服务器发回一个 303 响应,将你导向一个“上传成功”页面。不管原请求是什么方法,重定向请求的方法都是 GET(或 HEAD,不常用)
304 - Not Modified.(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容是客户端有缓存情况下,服务端的一种响应,提升用户体验。
307 Temporary Redirect 实际上和 302 是一致的,唯一的区别在于,307 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上
400 - 错误请求,如语法错误
401 - 请求授权失败,如需要账号密码登录
402 - 保留有效ChargeTo头响应
403 - Forbidden 访问被拒绝 权限不足(chmod -R 777 /data)
404 - 请求的网页不存在
500 - 大多是代码问题,或者sql报错
501 - 服务器不具备完成请求的功能
502 - Bad Gateway fpm进程挂掉或者后端程序过长时间未返回。
503 - Service Unavailable 当遇到这个状态码的时候表示服务临时不可用,比如nginx配置了频率限制,而client端又超过了配置的限制后就会收到503的响应。
504 - Gateway Time-out nginx的fastcgi模块有一个fastcgi_read_timeout配置,它表示从FastCGI server获取数据的超时时间。如果超过这个配置客户端就是收到504的响应。
## 403可能出现的原因是什么,怎么解决?
**一、由于启动用户和nginx工作用户不一致所致**
查看nginx的启动用户,发现是nobody,而为是用root启动的
命令:
~~~
ps aux | grep "nginx: worker process" | awk'{print $1}'
~~~
1.2将nginx.config的user改为和启动用户一致,
命令:
~~~
vi conf/nginx.conf
~~~
**二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。**
~~~
server {
listen 80;
server_name localhost;
index index.php index.html;
root /data/www/;
}
~~~
如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden。
**三、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。**
解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决
~~~
chmod -R 777 /data
chmod -R 777 /data/www/
~~~
**四、SELinux设置为开启状态(enabled)的原因。**
查看当前selinux的状态
~~~
/usr/sbin/sestatus
~~~
将SELINUX=enforcing 修改为 SELINUX=disabled 状态
~~~
vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
//保存,重启生效
reboot
~~~
## 500 一般是什么问题,如何解决?
500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求。
500出错的可能性:
~~~
a、编程语言语法错误,web脚本错误
b、并发高时,因为系统资源限制,而不能打开过多的文件
~~~
一般解决思路:
~~~
a、查看nginx、php的错误日志文件,从而看出端倪
b、如果是too many open files,修改nginx的worker_rlimit_nofile参数,使用ulimit查看系统打开文件限制,修改/etc/security/limits.conf,还是出现too many open files,那就要考虑做负载均衡,把流量分散到不同服务器上去了
c、如果是脚本的问题,则需要修复脚本错误,优化代码
~~~
## 503出现一般是什么问题?
503是服务临时不可用。
可能原因:nginx配置了频率限制,client端又超过了配置的限制,比如单个ip并发设置过小。
## nginx返回502,504各是什么问题,怎么解决?
502 Bad Gateway
官方解释:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
上面说到nginx收到了无法理解的响应,什么是无法理解的响应呢?
* nginx无法与php-fpm进行连接。
* nginx在连接php-fpm一段时间后发现与php-fpm的连接被断开。
那么什么时候会出现上面的情况呢?
* php-fpm没有启动,nginx无法将请求交给php-fpm;
* php-fpm运行脚本超时,php-fpm终止了脚本的执行和执行脚本的Worker进程,nginx发现自己与php-fpm的连接断开(php-fpm.conf中的**max\_terminate\_request**过小);
504 Bad Gateway timeout
nginx 超过了自己设置的超时时间,不等待 php-fpm 的返回结果,直接给客户端返回 504 错误。但是此时 php-fpm 依然还在处理请求(在没有超出自己的超时时间的情况下).
网关超时,客户端所发出的请求没有到达网关,在限定时间内没有得到php-fpm,或者完成php-fpm的传输数据的工作而超时 。比方说:即nginx的worker去php-fpm进程池去处理,但是没有fpm进程可以使用了,等啊等,还是没有,返回504。
这里有三个相关的配置:
* fastcgi\_connect\_timeout 300;
> 指定连接到后端 FastCGI 的超时时间.
* fastcgi\_send\_timeout 300;
> 向 FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间.
* fastcgi\_read\_timeout 300;
> 接收 FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间.
**解决办法**
~~~
location ~ \.php$ {
fastcgi_connect_timeout 180;//优化点
fastcgi_read_timeout 600;//优化点
fastcgi_send_timeout 600;//优化点
fastcgi\_pass unix:/tmp/php-fpm.sock;
fastcgi\_index index.php;
include fastcgi.conf;
}
~~~
调高上面标红的3个值后,主要是read和send两项(默认Nginx超时为60),完美地解决了504错误。
并且可以配置在http,server级别,也可以配置在location级别。
注意:
~~~
factcgi_connect_{read|send|timeout}是对fastcgi_pass生效
proxy_connect_{read|send|timeout|是对proxy_pass生效
~~~
- 消息队列
- 为什么要用消息队列
- 各种消息队列产品的对比
- 消息队列的优缺点
- 如何保证消息队列的高可用
- 如何保证消息不丢失
- 如何保证消息不会重复消费?如何保证消息的幂等性?
- 如何保证消息消费的顺序性?
- 基于MQ的分布式事务实现
- Beanstalk
- PHP
- 函数
- 基础
- 基础函数题
- OOP思想及原则
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收机制
- php-fpm相关
- 高级
- 设计模式
- 排序算法
- 正则
- OOP代码基础
- PHP运行原理
- zavl
- 网络协议new
- 一面
- TCP和UDP
- 常见状态码和代表的意义以及解决方式
- 网络分层和各层有啥协议
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 锁
- 索引
- 事务
- 高可用?高并发?集群?
- 其他
- 主从复制
- 主从复制数据延迟
- SQL的语⾔分类
- mysqlQuestions
- Redis
- redis-question
- redis为什么那么快
- redis的优缺点
- redis的数据类型和使用场景
- redis的数据持久化
- 过期策略和淘汰机制
- 缓存穿透、缓存击穿、缓存雪崩
- redis的事务
- redis的主从复制
- redis集群架构的理解
- redis的事件模型
- redis的数据类型、编码、数据结构
- Redis连接时的connect与pconnect的区别是什么?
- redis的分布式锁
- 缓存一致性问题
- redis变慢的原因
- 集群情况下,节点较少时数据分布不均匀怎么办?
- redis 和 memcached 的区别?
- 基本算法
- MysqlNew
- 索引new
- 事务new
- 锁new
- 日志new
- 主从复制new
- 树结构
- mysql其他问题
- 删除
- 主从配置
- 五种IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何实现手机扫码登录功能
- laravel框架的生命周期