nginx相關
HTTP狀態碼列表:
狀態碼 | 狀態碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續。客戶端應繼續其請求 |
101 | Switching Protocols | 切換協議。伺服器根據客戶端的請求切換協議。只能切換到更高階的協議,例如,切換到HTTP的新版本協議 |
200 | OK | 請求成功。一般用於GET與POST請求 |
201 | Created | 已建立。成功請求並建立了新的資源 |
202 | Accepted | 已接受。已經接受請求,但未處理完成 |
203 | Non-Authoritative Information | 非授權資訊。請求成功。但返回的meta資訊不在原始的伺服器,而是一個副本 |
204 | No Content | 無內容。伺服器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文件 |
205 | Reset Content | 重置內容。伺服器處理成功,使用者終端(例如:瀏覽器)應重置文件檢視。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內容。伺服器成功處理了部分GET請求 |
300 | Multiple Choices | 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特徵與地址的列表用於使用者終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動。請求的資源已被永久的移動到新URI,返回資訊會包括新的URI,瀏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替 |
302 | Found | 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI |
303 | See Other | 檢視其它地址。與301類似。使用GET和POST請求檢視 |
304 | Not Modified | 未修改。所請求的資源未修改,伺服器返回此狀態碼時,不會返回任何資源。客戶端通常會快取訪問過的資源,通過提供一個頭資訊指出客戶端希望只返回在指定日期之後修改的資源 |
305 | Use Proxy | 使用代理。所請求的資源必須通過代理訪問 |
306 | Unused | 已經被廢棄的HTTP狀態碼 |
307 | Temporary Redirect | 臨時重定向。與302類似。使用GET請求重定向 |
400 | Bad Request | 客戶端請求的語法錯誤,伺服器無法理解 |
401 | Unauthorized | 請求要求使用者的身份認證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 伺服器理解請求客戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 伺服器無法根據客戶端的請求找到資源(網頁)。通過此程式碼,網站設計人員可設定"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 伺服器無法根據客戶端請求的內容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權 |
408 | Request Time-out | 伺服器等待客戶端傳送的請求時間過長,超時 |
409 | Conflict | 伺服器完成客戶端的PUT請求是可能返回此程式碼,伺服器處理請求時發生了衝突 |
410 | Gone | 客戶端請求的資源已經不存在。410不同於404,如果資源以前有現在被永久刪除了可使用410程式碼,網站設計人員可通過301程式碼指定資源的新位置 |
411 | Length Required | 伺服器無法處理客戶端傳送的不帶Content-Length的請求資訊 |
412 | Precondition Failed | 客戶端請求資訊的先決條件錯誤 |
413 | Request Entity Too Large | 由於請求的實體過大,伺服器無法處理,因此拒絕請求。為防止客戶端的連續請求,伺服器可能會關閉連線。如果只是伺服器暫時無法處理,則會包含一個Retry-After的響應資訊 |
414 | Request-URI Too Large | 請求的URI過長(URI通常為網址),伺服器無法處理 |
415 | Unsupported Media Type | 伺服器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請求的範圍無效 |
417 | Expectation Failed | 伺服器無法滿足Expect的請求頭資訊 |
500 | Internal Server Error | 伺服器內部錯誤,無法完成請求 |
501 | Not Implemented | 伺服器不支援請求的功能,無法完成請求 |
502 | Bad Gateway | 作為閘道器或者代理工作的伺服器嘗試執行請求時,從遠端伺服器接收到了一個無效的響應 |
503 | Service Unavailable | 由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中 |
504 | Gateway Time-out | 充當閘道器或代理的伺服器,未及時從遠端伺服器獲取請求 |
505 | HTTP Version not supported | 伺服器不支援請求的HTTP協議的版本,無法完成處理 |
nginx配置檔案
# 全域性引數設定
worker_processes 4; #設定nginx啟動程式的數量,一般設定成與邏輯cpu數量相同
error_log logs/error.log; #指定錯誤日誌
worker_rlimit_nofile 102400; #設定一個nginx程式能開啟的最大檔案數
pid /var/run/nginx.pid;
events {
worker_connections 1024; #設定一個程式的最大併發連線數
}
# http 服務相關設定
http {
include mime.types;
default_type application/octet-stream;
log_format main 'remote_addr - remote_user [time_local] "request" '
'status body_bytes_sent "$http_referer" '
'"http_user_agent" "http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #設定訪問日誌的位置和格式
sendfile on; #是否呼叫sendfile函式輸出檔案,一般設定為on,若nginx是用來進行磁碟IO負載應用時,可以設定為off,降低系統負載
gzip on; #是否開啟gzip壓縮,將註釋去掉開啟
keepalive_timeout 65; #設定長連線的超時時間
# 虛擬伺服器的相關設定
server {
listen 80; #設定監聽的埠
server_name localhost; #設定繫結的主機名、域名或ip地址
charset koi8-r; # 設定編碼字元
location / {
root /var/www/nginx; #設定伺服器預設網站的根目錄位置,需要手動建立
index index.html index.htm; #設定預設開啟的文件
}
error_page 500 502 503 504 /50x.html; #設定錯誤資訊返回頁面
location = /50x.html {
root html; #這裡的絕對位置是/usr/local/nginx/html
}
}
}
nginx命令
nginx -c /path/nginx.conf # 以特定目錄下的配置檔案啟動nginx:
nginx -s reload # 修改配置後重新載入生效
nginx -s reopen # 重新開啟日誌檔案
nginx -s stop # 快速停止nginx
nginx -s quit # 完整有序的停止nginx
nginx -t # 測試當前配置檔案是否正確
nginx -t -c /path/to/nginx.conf # 測試特定的nginx配置檔案是否正確
注意:
nginx -s reload 命令載入修改後的配置檔案,命令下達後發生如下事件
- Nginx的master程式檢查配置檔案的正確性,若是錯誤則返回錯誤資訊,nginx繼續採用原配置檔案進行工作(因為worker未受到影響)
- Nginx啟動新的worker程式,採用新的配置檔案
- Nginx將新的請求分配新的worker程式
- Nginx等待以前的worker程式的全部請求已經都返回後,關閉相關worker程式
- 重複上面過程,知道全部舊的worker程式都被關閉掉
nginx負載均衡
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/#proxy_pass官方文件
- max_fails,允許請求失敗的次數,預設為1。當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤。
- fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間單位秒。max_fails可以和fail_timeout一起使用
upstream myweb {
server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;
}
nginx四層代理
https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/官方文件
防盜鏈配置
# 日誌格式新增"$http_referer"
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
-
none : 允許沒有http_refer的請求訪問資源;(瀏覽器沒有這個)
-
blocked : 允許不是http://開頭的,不帶協議的請求訪問資源;
-
server_names : 只允許指定ip/域名來的請求訪問資源(白名單);
準備兩臺機器,兩張圖片(快取問題)
valid_referers 使用方式
Syntax: valid_referers none | blocked | server_names | string …;
Default: —
Context: server, location
[root@nginx-server html]# vim /etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
valid_referers none blocked *.qf.com 10.0.105.202;
if ($invalid_referer) {
return 403;
}
}
location ~ .*\.(gif|jpg|png|jpeg)$ {
root /usr/share/nginx/html;
valid_referers qf.com 10.0.105.202;
if ($invalid_referer) {
return 403;
}
}
}
nginx地址重寫
https://docs.nginx.com/nginx/admin-guide/web-server/web-server/官方文件
if 語句
if (condition) { … }
if 可以支援如下條件判斷匹配符號
~ 正則匹配 (區分大小寫)
~* 正則匹配 (不區分大小寫)
!~ 正則不匹配 (區分大小寫)
!~* 正則不匹配 (不區分大小寫)
-f 和!-f 用來判斷是否存在檔案
-d 和!-d 用來判斷是否存在目錄
-e 和!-e 用來判斷是否存在檔案或目錄
-x 和!-x 用來判斷檔案是否可執行
在匹配過程中可以引用一些Nginx的全域性變數
$args 請求中的引數;
$document_root 針對當前請求的根路徑設定值;
$host 請求資訊中的"Host",如果請求中沒有Host行,則等於設定的伺服器名;
$limit_rate 對連線速率的限制;
$request_method 請求的方法,比如"GET"、"POST"等;
$remote_addr 客戶端地址;
$remote_port 客戶端埠號;
$remote_user 客戶端使用者名稱,認證用;
$request_filename 當前請求的檔案路徑名(帶網站的主目錄/usr/local/nginx/html/images /a.jpg)
$request_uri 當前請求的檔案路徑名(不帶網站的主目錄/images/a.jpg)
q
u
e
r
y
s
t
r
i
n
g
與
query_string 與
querystring與args相同;
$scheme 用的協議,比如http或者是https
$server_protocol 請求的協議版本,“HTTP/1.0"或"HTTP/1.1”;
$server_addr 伺服器地址,如果沒有用listen指明伺服器地址,使用這個變數將發起一次系統呼叫以取得地址(造成資源浪費);
$server_name 請求到達的伺服器名;
d
o
c
u
m
e
n
t
u
r
i
與
document_uri 與
documenturi與uri一樣,URI地址;
$server_port 請求到達的伺服器埠號;
Rewrite flag
last 相當於Apache裡的[L]標記,表示完成rewrite。預設為last。
break 本條規則匹配完成後,終止匹配,不再匹配後面的規則
redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent 返回301永久重定向,瀏覽器地址會顯示跳轉後URL地址
location指令
location 字首含義
= 表示精確匹配,優先順序也是最高的
^~ 表示uri以某個常規字串開頭,理解為匹配url路徑即可
~ 表示區分大小寫的正則匹配
~* 表示不區分大小寫的正則匹配
!~ 表示區分大小寫不匹配的正則
!~* 表示不區分大小寫不匹配的正則
/ 通用匹配,任何請求都會匹配到
@ 內部服務跳轉
nginx 日誌配置
ngx_http_log_module模組
http://nginx.org/en/docs/http/ngx_http_log_module.html官方文件
http://nginx.org/en/docs/varindex.html變數資訊
14、nginx 日誌配置
1、nginx 日誌介紹
nginx
有一個非常靈活的日誌記錄模式,每個級別的配置可以有各自獨立的訪問日誌, 所需日誌模組 ngx_http_log_module
的支援,日誌格式通過 log_format
命令來定義,日誌對於統計和排錯是非常有利的,下面總結了 nginx
日誌相關的配置 包括 access_log
、log_format
、open_log_file_cache
、log_not_found
、log_subrequest
、rewrite_log
、error_log
。
# 設定訪問日誌
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
# 關閉訪問日誌
access_log off;
- path 指定日誌的存放位置。
- format 指定日誌的格式。預設使用預定義的
combined
。 - buffer 用來指定日誌寫入時的快取大小。預設是64k。
- gzip 日誌寫入前先進行壓縮。壓縮率可以指定,從1到9數值越大壓縮比越高,同時壓縮的速度也越慢。預設是1。
- flush 設定快取的有效時間。如果超過flush指定的時間,快取中的內容將被清空。
- if 條件判斷。如果指定的條件計算為0或空字串,那麼該請求不會寫入日誌。
作用域:
可以應用access_log
指令的作用域分別有http
,server
,location
,limit_except
。也就是說,在這幾個作用域外使用該指令,Nginx會報錯。
access_log /var/logs/nginx-access.log
該例子指定日誌的寫入路徑為/var/logs/nginx-access.log
,日誌格式使用預設的combined
。
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
該例子指定日誌的寫入路徑為/var/logs/nginx-access.log
,日誌格式使用預設的combined
,指定日誌的快取大小為 32k,日誌寫入前啟用 gzip 進行壓縮,壓縮比使用預設值 1,快取資料有效時間為1分鐘。
3、log_format 指令
Nginx 預定義了名為 combined
日誌格式,如果沒有明確指定日誌格式預設使用該格式:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
如果不想使用Nginx預定義的格式,可以通過log_format
指令來自定義。
語法
log_format name [escape=default|json] string ...;
- name 格式名稱。在 access_log 指令中引用。
- escape 設定變數中的字元編碼方式是
json
還是default
,預設是default
。 - string 要定義的日誌格式內容。該引數可以有多個。引數中可以使用Nginx變數。
log_format
指令中常用的一些變數:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-0r8Ivx3Z-1602848477700)(C:\Users\admin\AppData\Local\Temp\1561945706808.png)]
自定義日誌格式的使用:
access_log /var/logs/nginx-access.log main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
使用log_format
指令定義了一個main
的格式,並在access_log
指令中引用了它。假如客戶端有發起請求:https://qf.com/
,我們看一下我擷取的一個請求的日誌記錄:
10.0.105.207 - - [01/Jul/2019:10:44:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"
我們看到最終的日誌記錄中$remote_user
、$http_referer
、$http_x_forwarded_for
都對應了一個-
,這是因為這幾個變數為空。
面試時:注意日誌裡面的ip地址一定要在第一列。
5、error_log 指令
錯誤日誌在Nginx中是通過error_log
指令實現的。該指令記錄伺服器和請求處理過程中的錯誤資訊。
語法
配置錯誤日誌檔案的路徑和日誌級別。
error_log file [level];
Default:
error_log logs/error.log error;
file
引數指定日誌的寫入位置。
level
引數指定日誌的級別。level可以是debug
, info
, notice
, warn
, error
, crit
, alert
,emerg
中的任意值。可以看到其取值範圍是按緊急程度從低到高排列的。只有日誌的錯誤級別等於或高於level指定的值才會寫入錯誤日誌中。預設值是error
。
基本用法
error_log /var/logs/nginx/nginx-error.log
配置段:main
, http
, mail
, stream
, server
, location
作用域。
例子中指定了錯誤日誌的路徑為:/var/logs/nginx/nginx-error.log
,日誌級別使用預設的 error
。
6、open_log_file_cache 指令
每一條日誌記錄的寫入都是先開啟檔案再寫入記錄,然後關閉日誌檔案。如果你的日誌檔案路徑中使用了變數,如 access_log /var/logs/$host/nginx-access.log
,為提高效能,可以使用open_log_file_cache
指令設定日誌檔案描述符的快取。
語法
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
預設值:
open_log_file_cache off;
-
max 設定快取中最多容納的檔案描述符數量,如果被佔滿,採用LRU演算法將描述符關閉。
-
inactive 設定快取存活時間,預設是10s。
-
min_uses 在inactive時間段內,日誌檔案最少使用幾次,該日誌檔案描述符記入快取,預設是1次。
-
valid:設定多久對日誌檔名進行檢查,看是否發生變化,預設是60s。
-
off:不使用快取。預設為off。
基本用法
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
配置段:
http
、server
、location
作用域中。例子中,設定快取最多快取1000個日誌檔案描述符,20s內如果快取中的日誌檔案描述符至少被被訪問2次,才不會被快取關閉。每隔1分鐘檢查快取中的檔案描述符的檔名是否還存在。
7、log_not_found 指令
是否在
error_log
中記錄不存在的錯誤。預設是基本語法:
log_not_found on | off; 預設值: log_not_found on;
配置段:
http
,server
,location
作用域。8、log_subrequest 指令
是否在
access_log
中記錄子請求的訪問日誌。預設不記錄基本語法
log_subrequest on | off; 預設值: log_subrequest off;
配置段:
http
,server
,location
作用域。9、rewrite_log 指令
由
ngx_http_rewrite_module
模組提供的。用來記錄重寫日誌的。對於除錯重寫規則建議開啟,啟用時將在error log
中記錄notice
級別的重寫日誌。
基本語法:rewrite_log on | off; 預設值: rewrite_log off;
配置段:
http
,server
,location
,if
作用域。10、nginx 日誌配置總結
Nginx中通過
access_log
和error_log
指令配置訪問日誌和錯誤日誌,通過log_format
我們可以自定義日誌格式。如果日誌檔案路徑中使用了變數,我們可以通過open_log_file_cache
指令來設定快取,提升效能。其他的根據自己的使用場景定義。
錯誤頁面配置
https://blog.csdn.net/weixin_39076313/article/details/101782111
nginx限流
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
相關文章
- nginx配置相關Nginx
- Nginx 相關介紹Nginx
- Linux 、docker 、nginx 相關命令LinuxDockerNginx
- mac下安裝nginx及相關配置MacNginx
- nginx連結jsp的相關配置NginxJS
- 針對Nginx日誌的相關運維操作記錄Nginx運維
- 申請免費https證書及nginx相關配置HTTPNginx
- 從Nginx遷移回到Lighttpd以及相關配置 — High5!NginxhttpdH5
- 解剖Nginx·自動指令碼篇(7)型別相關指令碼系列Nginx指令碼型別
- 解剖Nginx·自動指令碼篇(5)編譯器相關主指令碼Nginx指令碼編譯
- Tomcat8+Nginx+redis組合解決session同步的相關問題TomcatNginxRedisSession
- 精讀Nginx·自動指令碼篇(5)編譯器相關主指令碼Nginx指令碼編譯
- PHP相關PHP
- MyBatis相關MyBatis
- Docker相關Docker
- swift相關Swift
- Oracle相關Oracle
- Spark相關Spark
- oracle 相關Oracle
- 相關工具
- 【Unity】相關Unity
- Git相關Git
- 硬碟相關硬碟
- elasticsearch相關Elasticsearch
- sql相關SQL
- PDN相關
- solaris10_相關命令_處理器_相關
- 解剖Nginx·自動指令碼篇(3)原始碼相關變數指令碼 auto/sourcesNginx指令碼原始碼變數
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- 相關子查詢&非相關子查詢概念
- Oracle相關命令Oracle
- vue 相關收集Vue
- Git 相關配置Git
- MySQL鎖相關MySql
- JS原型相關JS原型
- gitlab 相關Gitlab
- vagrant 相關命令
- mysql 索引相關MySql索引