go在線工具集
首頁
搜索
致boss

速查nginx配置
21  |   |   |  0

日誌分割配置

  • 在 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 語法

    1. 正則表達式匹配:
  1. ==:等值比較;
  2. ~:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時區分字符大小寫;
  3. ~*:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
  4. !~:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時區分字符大小寫;
  5. !~*:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
    1. 文件處理
  1. -f, !-f:判斷指定的路徑是否爲存在且爲文件;
  2. -d, !-d:判斷指定的路徑是否爲存在且爲目錄;
  3. -e, !-e:判斷指定的路徑是否存在,文件或目錄均可;
  4. -x, !-x:判斷指定路徑的文件是否存在且可執行;

防止其他人刷, 並懲罰

# 防止機器人
if ($request_uri ~* \.(php|txt|sh|sql|tar)) {
    rewrite (.*)  http://speedtest.tele2.net/50GB.zip permanent;
    break;
}