>백엔드 개발 >PHP 튜토리얼 >[nginx 소스코드 분석] 주요 기능 분석

[nginx 소스코드 분석] 주요 기능 분석

WBOY
WBOY원래의
2016-08-08 09:24:52948검색

ngx_strerror_init

주요 기능은 먼저 ngx_sys_errlist 배열에 오류 정보를 저장하고 errno->errmsg의 매핑 배열을 만드는 것입니다. 시스템에 오류가 발생하면 errmsg를 errno를 통해 직접 찾을 수 있습니다. , API 호출을 줄입니다.

ngx_get_options(argc, argv)

이 함수는 주로 사용자 입력을 기반으로 일부 플래그 변수를 설정하고 사용자가 입력한 매개변수를 저장합니다.

Param		flag
?/h			ngx_show_version=1/ngx_show_help=1
v			ngx_show_version=1
V			ngx_show_version=1/ngx_show_configure=1
t			ngx_test_config=1
q			ngx_quiet_mode=1
p			ngx_prefix=argv[index]支持-p/home/work/nginx or –p /home/work/nginx
c			ngx_conf_file=p支持方式同上
g			ngx_conf_param=p	支持方式同上
s			ngx_signal=p/ngx_process=NGX_PROCESS_SIGNALLER(stop、quit、reopen、reload)

ngx_time_init->ngx_time_update

                                                     ngx_regex_init( )

variable									format
ngx_cached_time = tp;						
ngx_cached_http_time.data = p0;				“Mon, 28 Sep 1970 06:00:00 GMT”
ngx_cached_err_log_time.data = p1;			“1970/09/28 12:00:00”
ngx_cached_http_log_time.data = p2;			“28/Sep/1970:12:00:00 +0600”
ngx_cached_http_log_iso8601.data = p3		        “1970-09-28T12:00:00+06:00”
주로 두 개의 pcre 전역 할당 및 재활용 기능을 설정합니다

ngx_pid = getpid();//메인 프로세스 pid 가져오기

ngx_log_init(ngx_prefix)


최종 반환 값과 함수에 의해 생성된 ngx_log
#if (NGX_WIN32)
     if (name[1] != ':') {
#else
     if (name[0] != '/') {
#endif

         if (prefix) {
             plen = ngx_strlen(prefix);//如果用户输入了-p prefix

         } else {
#ifdef NGX_PREFIX
             prefix = (u_char *) NGX_PREFIX;//用户没输入,使用configure路径
             plen = ngx_strlen(prefix);
#else
             plen = 0;
#endif
         }

         if (plen) {
             name = malloc(plen + nlen + 2);
             if (name == NULL) {
                 return NULL;
             }

             p = ngx_cpymem(name, prefix, plen);//copy prefix

             if (!ngx_path_separator(*(p - 1))) {
                 *p++ = '/';
             }

             ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);//copy path

             p = name;
         }
     }

init_cycle.pool = ngx_create_pool(1024, log);//메모리 풀 노드 할당, 특정 메모리 풀, 자세한 내용은 메모리 풀 분석 문서

ngx_log
{
	ngx_log.file = &ngx_log_file;
	{
		ngx_fd_t		fd;//打开的错误日志
		ngx_str_t		name;//未设置
		u_char		*buffer;//未设置
		u_char		*pos;//未设置
		u_char		*last;//未设置
	}
	log_level = NGX_LOG_NOTICE;
}
를 참조하세요

ngx_save_argv

사용자가 입력한 매개변수를 ngx_argv 배열에 저장하는 함수입니다.

ngx_process_options

주로 사용자 입력 매개변수, 구성 파일, 테스트 등을 처리하는 함수입니다. 구성 파일,

conf_file =/home/work/hunter/nginx/nginx_gdb/conf/nginx.conf

conf_prefix =/home/work/hunter/nginx/nginx_gdb/conf

prefix =/home/work/hunter/nginx/nginx_gdb

ngx_crc32_table_init()//crc 테이블 초기화

//각 모듈의 모듈 인덱스 설정

그런 다음

ngx_max_module = 0;
for (i = 0; ngx_modules[i]; i++) {
ngx_modules[i]->index = ngx_max_module++;
}
ngx_init_cycl()

구성 분석을 분석합니다.

이상 내용의 측면을 포함해 [nginx 소스코드 분석] 주요 기능 분석을 소개했는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.