| | |
日誌分割配置
- 在 nginx/openresty 運行過程中,訪問日誌和錯誤日誌會不斷增長,長期運行會導致日誌文件過大,影響性能和管理。因此,需要對日誌進行 按天分割 或 按大小分割,以便於管理、存儲和分析。
- 使用
logrotate
進行日誌分割,logrotate
是 Linux 下的日誌管理工具,可用於自動分割、壓縮和刪除舊日誌。
步驟 1:創建 logrotate
配置文件
在 /etc/logrotate.d/openresty
中添加以下內容:
# openresty 下的 log
#/usr/local/openresty/nginx/logs/*.log {
# daily # 按天分割
# rotate 7 # 保留最近 7 天日誌
# missingok # 忽略不存在的文件
# notifempty # 如果日誌爲空,不進行分割
# compress # 使用 gzip 壓縮舊日誌
# delaycompress # 延遲一天壓縮
# postrotate
# /bin/kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
# endscript
#}
/usr/local/openresty/nginx/logs/*.log {
create 0664
daily
rotate 7
missingok
notifempty
compress
delaycompress
postrotate
/bin/kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
步驟 2:手動測試 logrotate
logrotate -f /etc/logrotate.d/openresty
location 語法
Location 塊通過指定模式來與客戶端請求的URI相匹配。 Location基本語法:
匹配 URI 類型,有四種參數可選,當然也可以不帶參數。 命名location,用@來標識,類似於定義goto語句塊。
location [ = | ~ | ~* | ^~ ] /URI { … }
location @/name/ { … }
參數 | 解釋 |
---|---|
空 | location 後沒有參數直接跟着 標準 URI,表示前綴匹配,代表跟請求中的 URI 從頭開始匹配。 |
= | 用於標準 URI 前,要求請求字符串與其精準匹配,成功則立即處理,nginx停止搜索其他匹配。 |
^~ | 用於標準 URI 前,並要求一旦匹配到就會立即處理,不再去匹配其他的那些個正則 URI,一般用來匹配目錄 |
~ | 用於正則 URI 前,表示 URI 包含正則表達式, 區分大小寫 |
~* | 用於正則 URI 前, 表示 URI 包含正則表達式, 不區分大小寫 |
@ | @ 定義一個命名的 location,@ 定義的locaiton名字一般用在內部定向,例如error_page,try_files命令中。它的功能類似於編程中的goto。 |
匹配順序
- nginx有兩層指令來匹配請求 URI 。第一個層次是
server
指令,它通過域名、ip 和端口來做第一層級匹配,當找到匹配的 server 後就進入此 server 的 location 匹配。 - location 的匹配並不完全按照其在配置文件中出現的順序來匹配,請求URI 會按如下規則進行匹配
- 以上規則簡單總結就是優先級從高到低依次爲(序號越小優先級越高)
1. location = # 精準匹配
2. location ^~ # 帶參前綴匹配
3. location ~ # 正則匹配(區分大小寫)
4. location ~* # 正則匹配(不區分大小寫)
5. location /a # 普通前綴匹配,優先級低於帶參數前綴匹配。
6. location / # 任何沒有匹配成功的,都會匹配這裏處理
- 說明:
1-4
匹配到了就停止匹配,5
會匹配最長的
解決跨域問題配置
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://192.168.12.1:8081;
}
if 語法
- 正則表達式匹配:
- ==:等值比較;
- ~:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時區分字符大小寫;
- ~*:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
- !~:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時區分字符大小寫;
- !~*:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
- 文件處理
- -f, !-f:判斷指定的路徑是否爲存在且爲文件;
- -d, !-d:判斷指定的路徑是否爲存在且爲目錄;
- -e, !-e:判斷指定的路徑是否存在,文件或目錄均可;
- -x, !-x:判斷指定路徑的文件是否存在且可執行;
防止其他人刷, 並懲罰
# 防止機器人
if ($request_uri ~* \.(php|txt|sh|sql|tar)) {
rewrite (.*) http://speedtest.tele2.net/50GB.zip permanent;
break;
}