nginx源码追查

不敢称为分析
只能叫追代码吧 根据nginx1.0.5
先看http://haoningabc.iteye.com/blog/1283098
这里有一篇
http://wenku.baidu.com/view/954455d9a58da0116c17496a.html
问题1:变量定义在哪了?那些nginx.conf里的变量
grep -nR "remote_addr" *
好多在
http/ngx_http_variables.c:147:    { ngx_string("remote_addr"), NULL, ngx_http_variable_remote_addr, 0, 0, 0 },



8000行代码
apple:src apple$ find . -name *.c|xargs grep -v "^$"| wc -l
   80716
apple:src apple$ find . -name *.h|xargs grep -v "^$"| wc -l
    6824
apple:src apple$

按行数大小排列
wc -l */* */*/* */*/*/*  |sort -n
超过两千行的
2035 http/ngx_http_variables.c
    2070 http/ngx_http.c
    2204 core/ngx_resolver.c
    2321 event/ngx_event_openssl.c
    2799 http/modules/ngx_http_ssi_filter_module.c
    2808 http/modules/ngx_http_proxy_module.c
    2859 http/modules/ngx_http_fastcgi_module.c
    3154 http/ngx_http_request.c
    4526 http/ngx_http_upstream.c
    4543 http/ngx_http_core_module.c

最有意思的还真是最多的这两个,尤其是upstream,用epoll哦

----------
gdb nginx 1231
(gdb) l
197
198 int ngx_cdecl
199 main(int argc, char *const *argv)
200 {
----------
grep -Rn "main(int argc" *
src/core/nginx.c:199:main(int argc, char *const *argv)
找到入口
原来nginx的main函数也是按照这个统一规则建立的呀
32 static ngx_command_t  ngx_core_commands[] = {

apple:nginx-1.0.5 apple$ grep -n "ngx_string" src/core/nginx.c
26:    { ngx_string("stop"), NGX_DEBUG_POINTS_STOP },
27:    { ngx_string("abort"), NGX_DEBUG_POINTS_ABORT },
34:    { ngx_string("daemon"),
41:    { ngx_string("master_process"),
48:    { ngx_string("timer_resolution"),
55:    { ngx_string("pid"),
62:    { ngx_string("lock_file"),
69:    { ngx_string("worker_processes"),
76:    { ngx_string("debug_points"),
83:    { ngx_string("user"),
90:    { ngx_string("worker_priority"),
97:    { ngx_string("worker_cpu_affinity"),
104:    { ngx_string("worker_rlimit_nofile"),
111:    { ngx_string("worker_rlimit_core"),
118:    { ngx_string("worker_rlimit_sigpending"),
125:    { ngx_string("working_directory"),
132:    { ngx_string("env"),
141:    { ngx_string("worker_threads"),
148:    { ngx_string("thread_stack_size"),
162:    ngx_string("core"),

这些每一个都需要细看
比如
apple:nginx-1.0.5 apple$ grep -Rn "master_process" *
Binary file objs/nginx matches
Binary file objs/src/core/nginx.o matches
Binary file objs/src/os/unix/ngx_process_cycle.o matches
src/core/nginx.c:41:    { ngx_string("master_process"),
src/core/nginx.c:405:        ngx_master_process_cycle(cycle);
src/os/unix/ngx_process_cycle.c:20:static void ngx_master_process_exit(ngx_cycle_t *cycle);
src/os/unix/ngx_process_cycle.c:65:static u_char  master_process[] = "master process";
src/os/unix/ngx_process_cycle.c:83:ngx_master_process_cycle(ngx_cycle_t *cycle)
src/os/unix/ngx_process_cycle.c:117:    size = sizeof(master_process);
src/os/unix/ngx_process_cycle.c:125:    p = ngx_cpymem(title, master_process, sizeof(master_process) - 1);
src/os/unix/ngx_process_cycle.c:184:            ngx_master_process_exit(cycle);
src/os/unix/ngx_process_cycle.c:321:            ngx_master_process_exit(cycle);
src/os/unix/ngx_process_cycle.c:679:ngx_master_process_exit(ngx_cycle_t *cycle)
src/os/unix/ngx_process_cycle.h:36:void ngx_master_process_cycle(ngx_cycle_t *cycle);
apple:nginx-1.0.5 apple$ 

apple:src apple$ tree
.
├── core
│   ├── nginx.c
│   ├── nginx.h
│   ├── ngx_array.c
│   ├── ngx_array.h
│   ├── ngx_buf.c
│   ├── ngx_buf.h
│   ├── ngx_conf_file.c
│   ├── ngx_conf_file.h
│   ├── ngx_config.h
│   ├── ngx_connection.c
│   ├── ngx_connection.h
│   ├── ngx_core.h
│   ├── ngx_cpuinfo.c
│   ├── ngx_crc.h
│   ├── ngx_crc32.c
│   ├── ngx_crc32.h
│   ├── ngx_crypt.c
│   ├── ngx_crypt.h
│   ├── ngx_cycle.c
│   ├── ngx_cycle.h
│   ├── ngx_file.c
│   ├── ngx_file.h
│   ├── ngx_hash.c
│   ├── ngx_hash.h
│   ├── ngx_inet.c
│   ├── ngx_inet.h
│   ├── ngx_list.c
│   ├── ngx_list.h
│   ├── ngx_log.c
│   ├── ngx_log.h
│   ├── ngx_md5.c
│   ├── ngx_md5.h
│   ├── ngx_murmurhash.c
│   ├── ngx_murmurhash.h
│   ├── ngx_open_file_cache.c
│   ├── ngx_open_file_cache.h
│   ├── ngx_output_chain.c
│   ├── ngx_palloc.c
│   ├── ngx_palloc.h
│   ├── ngx_parse.c
│   ├── ngx_parse.h
│   ├── ngx_queue.c
│   ├── ngx_queue.h
│   ├── ngx_radix_tree.c
│   ├── ngx_radix_tree.h
│   ├── ngx_rbtree.c
│   ├── ngx_rbtree.h
│   ├── ngx_regex.c
│   ├── ngx_regex.h
│   ├── ngx_resolver.c
│   ├── ngx_resolver.h
│   ├── ngx_sha1.h
│   ├── ngx_shmtx.c
│   ├── ngx_shmtx.h
│   ├── ngx_slab.c
│   ├── ngx_slab.h
│   ├── ngx_spinlock.c
│   ├── ngx_string.c
│   ├── ngx_string.h
│   ├── ngx_times.c
│   └── ngx_times.h
├── event
│   ├── modules
│   │   ├── ngx_aio_module.c
│   │   ├── ngx_devpoll_module.c
│   │   ├── ngx_epoll_module.c
│   │   ├── ngx_eventport_module.c
│   │   ├── ngx_kqueue_module.c
│   │   ├── ngx_poll_module.c
│   │   ├── ngx_rtsig_module.c
│   │   ├── ngx_select_module.c
│   │   └── ngx_win32_select_module.c
│   ├── ngx_event.c
│   ├── ngx_event.h
│   ├── ngx_event_accept.c
│   ├── ngx_event_busy_lock.c
│   ├── ngx_event_busy_lock.h
│   ├── ngx_event_connect.c
│   ├── ngx_event_connect.h
│   ├── ngx_event_mutex.c
│   ├── ngx_event_openssl.c
│   ├── ngx_event_openssl.h
│   ├── ngx_event_pipe.c
│   ├── ngx_event_pipe.h
│   ├── ngx_event_posted.c
│   ├── ngx_event_posted.h
│   ├── ngx_event_timer.c
│   └── ngx_event_timer.h
├── http
│   ├── modules
│   │   ├── ngx_http_access_module.c
│   │   ├── ngx_http_addition_filter_module.c
│   │   ├── ngx_http_auth_basic_module.c
│   │   ├── ngx_http_autoindex_module.c
│   │   ├── ngx_http_browser_module.c
│   │   ├── ngx_http_charset_filter_module.c
│   │   ├── ngx_http_chunked_filter_module.c
│   │   ├── ngx_http_dav_module.c
│   │   ├── ngx_http_degradation_module.c
│   │   ├── ngx_http_empty_gif_module.c
│   │   ├── ngx_http_fastcgi_module.c
│   │   ├── ngx_http_flv_module.c
│   │   ├── ngx_http_geo_module.c
│   │   ├── ngx_http_geoip_module.c
│   │   ├── ngx_http_gzip_filter_module.c
│   │   ├── ngx_http_gzip_static_module.c
│   │   ├── ngx_http_headers_filter_module.c
│   │   ├── ngx_http_image_filter_module.c
│   │   ├── ngx_http_index_module.c
│   │   ├── ngx_http_limit_req_module.c
│   │   ├── ngx_http_limit_zone_module.c
│   │   ├── ngx_http_log_module.c
│   │   ├── ngx_http_map_module.c
│   │   ├── ngx_http_memcached_module.c
│   │   ├── ngx_http_not_modified_filter_module.c
│   │   ├── ngx_http_proxy_module.c
│   │   ├── ngx_http_random_index_module.c
│   │   ├── ngx_http_range_filter_module.c
│   │   ├── ngx_http_realip_module.c
│   │   ├── ngx_http_referer_module.c
│   │   ├── ngx_http_rewrite_module.c
│   │   ├── ngx_http_scgi_module.c
│   │   ├── ngx_http_secure_link_module.c
│   │   ├── ngx_http_split_clients_module.c
│   │   ├── ngx_http_ssi_filter_module.c
│   │   ├── ngx_http_ssi_filter_module.h
│   │   ├── ngx_http_ssl_module.c
│   │   ├── ngx_http_ssl_module.h
│   │   ├── ngx_http_static_module.c
│   │   ├── ngx_http_stub_status_module.c
│   │   ├── ngx_http_sub_filter_module.c
│   │   ├── ngx_http_upstream_ip_hash_module.c
│   │   ├── ngx_http_userid_filter_module.c
│   │   ├── ngx_http_uwsgi_module.c
│   │   ├── ngx_http_xslt_filter_module.c
│   │   └── perl
│   │       ├── Makefile.PL
│   │       ├── nginx.pm
│   │       ├── nginx.xs
│   │       ├── ngx_http_perl_module.c
│   │       ├── ngx_http_perl_module.h
│   │       └── typemap
│   ├── ngx_http.c
│   ├── ngx_http.h
│   ├── ngx_http_busy_lock.c
│   ├── ngx_http_busy_lock.h
│   ├── ngx_http_cache.h
│   ├── ngx_http_config.h
│   ├── ngx_http_copy_filter_module.c
│   ├── ngx_http_core_module.c
│   ├── ngx_http_core_module.h
│   ├── ngx_http_file_cache.c
│   ├── ngx_http_header_filter_module.c
│   ├── ngx_http_parse.c
│   ├── ngx_http_parse_time.c
│   ├── ngx_http_postpone_filter_module.c
│   ├── ngx_http_request.c
│   ├── ngx_http_request.h
│   ├── ngx_http_request_body.c
│   ├── ngx_http_script.c
│   ├── ngx_http_script.h
│   ├── ngx_http_special_response.c
│   ├── ngx_http_upstream.c
│   ├── ngx_http_upstream.h
│   ├── ngx_http_upstream_round_robin.c
│   ├── ngx_http_upstream_round_robin.h
│   ├── ngx_http_variables.c
│   ├── ngx_http_variables.h
│   └── ngx_http_write_filter_module.c
├── mail
│   ├── ngx_mail.c
│   ├── ngx_mail.h
│   ├── ngx_mail_auth_http_module.c
│   ├── ngx_mail_core_module.c
│   ├── ngx_mail_handler.c
│   ├── ngx_mail_imap_handler.c
│   ├── ngx_mail_imap_module.c
│   ├── ngx_mail_imap_module.h
│   ├── ngx_mail_parse.c
│   ├── ngx_mail_pop3_handler.c
│   ├── ngx_mail_pop3_module.c
│   ├── ngx_mail_pop3_module.h
│   ├── ngx_mail_proxy_module.c
│   ├── ngx_mail_smtp_handler.c
│   ├── ngx_mail_smtp_module.c
│   ├── ngx_mail_smtp_module.h
│   ├── ngx_mail_ssl_module.c
│   └── ngx_mail_ssl_module.h
├── misc
│   ├── ngx_cpp_test_module.cpp
│   └── ngx_google_perftools_module.c
└── os
    └── unix
        ├── ngx_aio_read.c
        ├── ngx_aio_read_chain.c
        ├── ngx_aio_write.c
        ├── ngx_aio_write_chain.c
        ├── ngx_alloc.c
        ├── ngx_alloc.h
        ├── ngx_atomic.h
        ├── ngx_channel.c
        ├── ngx_channel.h
        ├── ngx_daemon.c
        ├── ngx_darwin.h
        ├── ngx_darwin_config.h
        ├── ngx_darwin_init.c
        ├── ngx_darwin_sendfile_chain.c
        ├── ngx_errno.c
        ├── ngx_errno.h
        ├── ngx_file_aio_read.c
        ├── ngx_files.c
        ├── ngx_files.h
        ├── ngx_freebsd.h
        ├── ngx_freebsd_config.h
        ├── ngx_freebsd_init.c
        ├── ngx_freebsd_rfork_thread.c
        ├── ngx_freebsd_rfork_thread.h
        ├── ngx_freebsd_sendfile_chain.c
        ├── ngx_gcc_atomic_amd64.h
        ├── ngx_gcc_atomic_ppc.h
        ├── ngx_gcc_atomic_sparc64.h
        ├── ngx_gcc_atomic_x86.h
        ├── ngx_linux.h
        ├── ngx_linux_aio_read.c
        ├── ngx_linux_config.h
        ├── ngx_linux_init.c
        ├── ngx_linux_sendfile_chain.c
        ├── ngx_os.h
        ├── ngx_posix_config.h
        ├── ngx_posix_init.c
        ├── ngx_process.c
        ├── ngx_process.h
        ├── ngx_process_cycle.c
        ├── ngx_process_cycle.h
        ├── ngx_pthread_thread.c
        ├── ngx_readv_chain.c
        ├── ngx_recv.c
        ├── ngx_send.c
        ├── ngx_setproctitle.c
        ├── ngx_setproctitle.h
        ├── ngx_shmem.c
        ├── ngx_shmem.h
        ├── ngx_socket.c
        ├── ngx_socket.h
        ├── ngx_solaris.h
        ├── ngx_solaris_config.h
        ├── ngx_solaris_init.c
        ├── ngx_solaris_sendfilev_chain.c
        ├── ngx_sunpro_amd64.il
        ├── ngx_sunpro_atomic_sparc64.h
        ├── ngx_sunpro_sparc64.il
        ├── ngx_sunpro_x86.il
        ├── ngx_thread.h
        ├── ngx_time.c
        ├── ngx_time.h
        ├── ngx_udp_recv.c
        ├── ngx_user.c
        ├── ngx_user.h
        ├── ngx_writev_chain.c
        └── rfork_thread.S

10 directories, 251 files
apple:src apple$ 

你可能感兴趣的:(nginx,ngx)