java架构师培训:configure脚本有哪些选项?

在Linux系统(包括各种类Unix操作系统)下,编译复杂的C语言软件工程是由Makefile文件完成的。你一定注意到Nginx源码中并没有Makefile文件,这是因为Makefile是由configure脚本即时生成的。接下来我们看看,configure脚本悄悄的做了哪些事,这些工作又会对Nginx产生哪些影响。
  图灵学院

configure脚本支持很多选项,掌握它们就可以灵活的定制Nginx。为了方便理解,从功能上我把它们分为5类:
  改变Nginx编译、运行时各类资源的默认存取路径
  configure既可以设置Nginx运行时各类资源的默认访问路径,也可以设置编译期生成的临时文件存放路径。比如:
  --error-log-path=定义了运行期出现错误信息时写入error.log日志文件的路径。
  --http-log-path=定义了运行期处理完HTTP请求后,将执行结果写入access.log日志文件的路径。
  --http-client-body-temp-path=定义了运行期Nginx接收客户端的HTTP请求时,存放包体的磁盘路径。
  --http-proxy-temp-path=定义了运行期负载均衡使用的Nginx,临时存放上游返回HTTP包体的磁盘路径。
  --builddir=定义了编译期生成的脚本、源代码、目标文件存放的路径。
  等等。
  对于已经编译好的Nginx,可以通过nginx -V命令查看设置的路径。如果没有显式的设置选项,Nginx便会使用默认值,例如官方Nginx将–prefix的默认值设为/usr/local/nginx,而OpenResty的configure脚本则将–prefix的默认值设为/usr/local/openresty/nginx。
  改变编译器选项
  Nginx由C语言开发,因此默认使用的C编译器,由于C++向前兼容C语言,如果你使用了C++编写的Nginx模块,可以通过–cc-opt等选项,将C编译器修改为C++编译器,这就可以支持C++语言了。
  Nginx编译时使用的优化选项是-O,如果你觉得这样优化还不够,可以调大优化级别,比如OpenResty就将gcc的优化调整为-O2。当某些模块依赖其他软件库才能实现需求时,也可以通过–with-ld-opt选项链接其他库文件。
  修改编译时依赖的中间件
  Nginx执行时,会依赖pcre、openssl、zlib等中间件,实现诸如正则表达式解析、TLS/SSL协议处理、解压缩等功能。通常,编译器会自动寻找系统默认路径中的软件库,但当系统中含有多个版本的中间件时,就可以人为地通过路径来指定版本。比如当我们需要使用最新的TLS1.3时,可以下载最新的openssl源码包,再通过–with-openssl=选项指定源码目录,让Makefile使用它去编译Nginx。
  选择编译进Nginx的模块
  Nginx是由少量的框架代码、大量的C语言模块构成的。当你根据业务需求,需要通过某个模块实现相应的功能时,必须先通过configure脚本将它编译进Nginx(Nginx被设计为按需添加模块的架构),之后你才能在nginx.conf配置文件中启用它们。下一小节我会详细介绍这部分内容。
  其他选项
  还有些不属于上述4个类别的选项,包括:
  定位问题时,最方便的是通过error.log查看DEBUG级别日志,而打开调试日志的前提,是在configure时加入–with-debug选项。
  HTTP服务是默认打开的,如果你想禁用HTTP或者HTTP缓存服务,可以使用–without-http和–without-http-cache选项。
  大文件读写磁盘时,并不适宜使用正常的read/write系统调用,因为文件内容会写入PageCache磁盘高速缓存。由于PageCache空间有限,而大文件会迅速将可能高频命中缓存的小文件淘汰出PageCache,同时大文件自身又很难享受到缓存的好处。因此,在Linux系统中,可以通过异步IO、直接IO来处理文件。但开启Linux原生异步IO的前提,是在configure时加入–with-file-aio选项。
  开启IPv6功能时,需要加入–with-ipv6选项。
  生产环境中,需要使用master/worker多进程模式运行Nginx。master是权限更高的管理进程,而worker则是处理请求的工作线程,它的权限相对较低。通过–user=和–group=选项可以指定worker进程所属的用户及用户组,当然,你也可以在nginx.conf中通过user和group指令修改它。
  相关阅读:java架构师学习路线-Spring技术中常用的扩展点(二)
  如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/112466418