《深入剖析Nginx》 笔记
nginx的编译安装
使用Linux下通用的三板斧即可:
./configure make make install
查看帮助选项
./configure --help
禁用编译器优化
方法一:
CFLAGS="-g -O0" ./configure
另一种方法,但是会报错
./configure --with-cc-opt='-g –O0'
checking for int size ...
./configure: error: can not detect int size
强制编译所有文件
如果之前已经执行过make,那么在进行第二次make时,需带上强制重新编译 选项-B 或者--always-make
也可以通过刷新所有源文件的时间戳,间接达到重新编译出一个新Nginx可执行程序的目的。
find .-name "*.c" | xargs touch
安装依赖库
sudo apt install libpcre3 libpcre3-dev //PCRE库
sudo apt install zlib1g-dev //zlib库
sudo apt install openssl libssl-dev //OpenSSL库
指定配置文件
nginx -c /usr/local/nginx/conf/nginx.conf.test
通过ps命令可以看到Nginx是否已正常执行
ps auxf | grep nginx | grep -v grep
查看Nginx对应的监听套接口
netstat -natp | grep nginx
nginx/gdb 调试
在默认情况下,Nginx会有多个进程,所以需通过如下类似命令正确找到我们要调试的进程
ps -efH | grep nginx
gdb -p 1234
查看系统调用
strace -p 1234
wget localhost
查看nginx内的函数调用
pstack 1234
strace输出的每一行记录一次系统调用,等号左边是系统调用名以及调用参数,等号右边是该系统调用的返回值。逐一说明如下所述。
1.epoll_wait返回值为1,表示有1个描述符存在可读/写事件,这里当然是可读事件。
2.accept4接受该请求,返回的数字3表示socket的文件描述符。
3.epoll_ctl把accept4建立的socket套接字(注意参数3)加入到事件监听机制里。
4.recv从发生可读事件的socket文件描述符内读取数据,读取的数据存在第二个参数内,读取了107个字节。
5.stat64判断客户端请求的html文件是否存在,返回值为0表示存在。
6.open/fstat64打开并获取文件状态信息。open文件返回的文件描述符为9,后面几个系统调用都用到这个值。
7.writev把响应头通过文件描述符3代表的socket套接字发给客户端。
8.sendfile64把文件描述符9代表的响应体通过文件描述符3代表的socket套接字发给客户端。
9.再往文件描述符4代表的日志文件内write一条日志信息。
10.recv看客户端是否还发了其他待处理的请求/信息。
11.最后关闭文件描述符3代表的socket套接字。
最新文章
- Linux 下安装JRuby
- 强大的Spring缓存技术(中)
- PHP--获取响应头(Response Header)方法
- 爬虫---request+++urllib
- 设计模式--简单工厂(Factory)模式
- android-exploitme(六):基础加密
- 【二叉树、堆】15轻院校赛-J-堆
- Ribbon 窗体的 MDI 子窗体使用 TabbedMDIManager 切换时工具条闪屏问题的解决办法
- Git之不明觉厉11-利其器source tree
- Windows开发技术的历史
- [转] Gradle中的buildScript代码块
- Android手机SSH Client客户端推荐JuiceSSH
- in与exist , not in与not exist 的区别(转)
- [CLR via C#]5.1 基元类型
- 设计模式学习--Factory Method
- 【最新版】从零开始在 macOS 上配置 Lua 开发环境
- clientHeight、offsetHeight、scrollHeight详解
- open suse 42.3常用软件源(包括阿里云)
- APP test
- HTTPS-HTTPS原理