02 nginx 的环境搭建
前言
这一系列文章主要包含的内容主要是 各种常用软件的调试环境的搭建
主要的目的是 搭建一个可打断点的一个调试环境
c 系列 主要是基于 clion 调试, java 系列主要是基于 idea 调试, js 系列主要是基于 webstorm 调试
需要有一定的 c, c++, java, js 相关基础
基于的环境是一个 ubuntu16.04 desktop, 初始的时候 仅仅更新了源, 安装了 clion
redis, nginx, mysql, vsftpd
javac, javap, jstack, jmap, jinfo
kafka,
spark, flink
coreutils, glibc, gdb
hotspotVM, linux
... 等等其他
编译 nginx-1.22.1
首先去官方网站下载最新源码, 然后拷贝自 目标虚拟机
开始配置, 有条件的话可以安装一下 pcre, ssl, zip 相关库, 这里没有安装
root@ubuntu:~/Desktop/nginx-1.22.1# ./configure --without-http_rewrite_module --without-http_gzip_module
checking for OS+ Linux 4.4.0-62-generic x86_64
checking for C compiler ... found+ using GNU C compiler+ gcc version: 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for EPOLLEXCLUSIVE ... not found
checking for eventfd() ... found
checking for O_PATH ... found
checking for sendfile() ... found
// 省略部分输出
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
creating objs/MakefileConfiguration summary+ PCRE library is not used+ OpenSSL library is not used+ zlib library is not usednginx path prefix: "/usr/local/nginx"nginx binary file: "/usr/local/nginx/sbin/nginx"nginx modules path: "/usr/local/nginx/modules"nginx configuration prefix: "/usr/local/nginx/conf"nginx configuration file: "/usr/local/nginx/conf/nginx.conf"nginx pid file: "/usr/local/nginx/logs/nginx.pid"nginx error log file: "/usr/local/nginx/logs/error.log"nginx http access log file: "/usr/local/nginx/logs/access.log"nginx http client request body temporary files: "client_body_temp"nginx http proxy temporary files: "proxy_temp"nginx http fastcgi temporary files: "fastcgi_temp"nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"
开始编译
调整编译时优化级别, 不优化
root@ubuntu:~/Desktop/nginx-1.22.1# make
make -f objs/Makefile
make[1]: Entering directory '/root/Desktop/nginx-1.22.1'
cc -c -pipe -O0 -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \-o objs/src/core/nginx.o \src/core/nginx.c
cc -c -pipe -O0 -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \-o objs/src/core/ngx_log.o \src/core/ngx_log.c
cc -c -pipe -O0 -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \-o objs/src/core/ngx_palloc.o \src/core/ngx_palloc.c
// 省略一部分输出
objs/src/http/modules/ngx_http_upstream_least_conn_module.o \
objs/src/http/modules/ngx_http_upstream_random_module.o \
objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
objs/src/http/modules/ngx_http_upstream_zone_module.o \
objs/ngx_modules.o \
-ldl -lpthread -lcrypt \
-Wl,-E
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory '/root/Desktop/nginx-1.22.1'
root@ubuntu:~/Desktop/nginx-1.22.1# ls -l objs/ | grep nginx
-rwxr-xr-x 1 root root 3148224 Apr 5 01:40 nginx
-rw-r--r-- 1 root root 5537 Apr 5 01:40 nginx.8
clion 中调试
clion 中打开 nginx-1.22.1 项目
新建 make application, 配置名称
target 配置 make 相关, build 配置 Makefile 中 build 的命令, clean 配置 Makefile 中 clean 的命令
executable 配置编译好的 nginx-server 的可执行文件
program arguments 即为 nginx-server 所需要的参数, 这里配置为配置文件
然后启动 nginx-server 服务
访问 nginx 的服务
但是 还存在一个问题是, 我们期望调试的是请求流程的处理, 因此 我们需要调试 work 进程
因此 我们这里交换 master, worker 的业务, 以便于 我们直接在 clion 中调试 worker
ngx_http_static_module.ngx_http_static_handler 中打上断点, 然后 访问 nginx 的静态资源, 发现断点如下, 至此 可以正常调试了
http://192.168.0.108/index.html
完