ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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生效 ~~~