欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來到云服務器

服務器租用

Nginx的error_log和Access_log闡明

nginx設置中有關日志的設置主要是環繞著下面兩個指令:

1、error_log

2、access_log:記錄會見日志 

首先要強調的一點是,假如access日志和error日志都是常量文件名(因為access支持變量文件名,后續會講到),那么nginx歷程會緩存文件描寫符直到歷程竣事。

什么時候日志的fd會改變呢?

1)歷程重啟

2)收到了NGX_REOPEN_SIGNAL信號,會發生新的日志文件

其他環境下,日志的fd穩定,所以當歷程運行中,刪除了日志文件的話,并不會生成新的日志文件,且日志城市丟失

下面具體講一下這兩個指令的來龍去脈

一:先說error_log:

nginx有兩個模塊支持error_log指令:

一個是 ngx_errlog_module ,這個模塊只有一個指令,就是error_log ,設置范例為:NGX_MAIN_CONF,回調函數為:ngx_error_log;

另一個是 ngx_http_core_module,這個模塊中也有指令:error_log ,設置范例為:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF,回調函數為:ngx_http_core_error_log。


static ngx_command_t  ngx_errlog_commands[] = {

    {ngx_string("error_log"),
     NGX_MAIN_CONF|NGX_CONF_1MORE,
     ngx_error_log,
     0,
     0,
     NULL},

    ngx_null_command
};


static ngx_command_t  ngx_http_core_commands[] = {
{ ngx_string("error_log"),
      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
      ngx_http_core_error_log,
      NGX_HTTP_LOC_CONF_OFFSET,
      0,
      NULL },
}

這樣會發生幾個疑問:

1:為什么需要兩個溝通的指令實現溝通的成果。

2:兩個指令的范例均支持NGX_HTTP_MAIN_CONF ,那么在main中設置的error_log到底利用的是哪一個

3:兩者的浸染干系。

下面來表明一下:

nginx在舉辦模塊注冊時,會發明 ngx_errlog_module 模塊是先于 ngx_http_core_module 模塊注冊的 。

在nginx在理會設置文件的時候 ,見到 error_log,會憑據注冊模塊的順序查找指令,這樣,會先找到ngx_errlog_module模塊,假如此時,error_log是在main設置的,那么和ngx_errlog_module模塊error_log的NGX_HTTP_MAIN_CONF match,執行ngx_error_log。

假如error_log是在http{}設置的,也會憑據注冊模塊的順序查找指令,找到ngx_errlog_module模塊的error_log,發明type是NGX_HTTP_MAIN_CONF,不match,繼承往下找,找到ngx_http_core_module的error_log,type是NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF ,match后執行ngx_http_core_error_log。

上面提到了ngx_error_log 和 ngx_http_core_error_log兩個函數,這兩個函數的成果根基一致,可是因為兩個設置浸染域差異,所以設置存儲位置差異:ngx_errlog_module存儲在cycle->new_log,ngx_http_core_module存儲在http core模塊數據布局ngx_http_core_loc_conf_s的error_log(在此簡寫成:clcf->error_log)。

clcf->error_log是http模塊中的,其主要記錄和http請求相關的日志。

cycle->new_log主要記錄如歷程啟動,event等。

可是主歷程啟動的時候,此時還沒有讀取設置文件,即沒有指定日志打印在那邊。nginx這時候固然可以將一些墮落內容可能功效輸到尺度輸出,可是假如要記錄一些系統初始化環境,socket監聽狀況,照舊需要寫到日志文件中去的。在nginx的main函數中,首先會挪用ngx_log_init 函數,默認日志文件為:安裝路徑/logs/error.log,假如這個文件沒有權限會見的話,會直接報錯退出。在mian函數末了處,在ngx_master_process_cycle函數挪用之前,會close掉這個日志文件。

假如只在main設置了error_log,http{}中沒有配置,那么clcf->error_log賦值為clcf->error_log,如下:


static char *
ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{
    ngx_http_core_loc_conf_t *prev = parent;
    ngx_http_core_loc_conf_t *conf = child;

    。。。。。。


    if (conf->error_log == NULL) {
        if (prev->error_log) {
            conf->error_log = prev->error_log;
        } else {
            conf->error_log = &cf->cycle->new_log;
        }
    }

    。。。。。。
}

那為什么不把兩個指令歸并到一起呢。

騰訊云代理

Copyright © 2003-2021 MFISP.COM. 國外vps服務器租用 夢飛云服務器租用 版權所有 ? 粵ICP備11019662號

主站蜘蛛池模板: 登封市| 宜兰市| 溧阳市| 中牟县| 江达县| 吴江市| 郑州市| 宁乡县| 独山县| 旬邑县| 贵港市| 南川市| 双鸭山市| 邹平县| 房山区| 金湖县| 秀山| 舞阳县| 锦州市| 六盘水市| 安图县| 玛沁县| 故城县| 钦州市| 平利县| 柘荣县| 大渡口区| 阜新市| 铜山县| 泰州市| 东兴市| 太白县| 东光县| 锡林浩特市| 开阳县| 牟定县| 兴安县| 玉山县| 鸡东县| 海淀区| 策勒县|