[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框架的生命周期