文章目录
- NGINX源码安装
- 安装依赖包
- 获取源码
- NGINX官方网站
- 各个目录的用途
- 编译安装
- 安装结束后的文件
- 设置为服务
NGINX源码安装
安装依赖包
root执行
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
这些包是用于开发和构建软件的一些常见库和工具。
1.gcc: GNU Compiler Collection 的缩写,是一个用于编译源代码的编译器套件。它可以将高级编程语言(如C、C++等)编译为目标机器的可执行二进制代码。NGINX就是用C写的,要编译成二进制的文件。
2. gcc-c++: 这是 GCC 编译器的 C++ 支持,它允许您编译和构建使用 C++ 编程语言编写的软件。NGINX虽然是C语言写的,但不可避免的使用到C++的一些特性。
3. make: 是一个自动化构建工具,用于处理源代码和构建过程。通过 make
命令,您可以根据预定义的规则和指令自动执行编译、链接和安装等任务。
4. libtool: 是一个用于处理共享库的工具,它允许开发者在不同的操作系统上创建和使用共享库。
5. zlib 和 zlib-devel: zlib 是一个用于数据压缩和解压缩的库,广泛用于许多软件中以减小数据的存储空间和传输带宽。zlib-devel 包含用于开发和编译 zlib 相关程序的头文件和库文件。
6. openssl 和 openssl-devel: OpenSSL 是一个开源的加密库,提供了许多加密和安全相关的功能,如 SSL/TLS 协议、数字证书管理等。openssl-devel 包含了用于开发和编译使用 OpenSSL 的程序的头文件和库文件。
7. pcre 和 pcre-devel: PCRE(Perl Compatible Regular Expressions)是一个正则表达式库,用于处理文本匹配和替换操作。pcre-devel 包含用于开发和编译使用 PCRE 的程序的头文件和库文件。
以上软件是必要的软件包,如果不安装以上包可能会存在某些配置或功能不能使用的情况。
获取源码
NGINX官方网站
NGINX有两个版本,社区版和商业版
我们使用社区版进行研究,一般情况下社区版是能满足我们的需求的
NGINX社区版又分mainline版本和stable版本, 想尝鲜用mainline,想稳定用stable,一般我们线上选择stable版本,即中间位数是偶数的版本。
### 获取步骤
# 创建升级的文件夹
mkdir -p /opt/darren/upgrade
cd /opt/darren/upgrade
# 获取安装的源码
wget -c https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压包
tar -zxvf nginx-1.24.0.tar.gz
cd /opt/darren/upgrade/nginx-1.24.0
各个目录的用途
[root@WDQCVM nginx-1.24.0]# ll
total 816
drwxr-xr-x 6 wdq wdq 326 Aug 14 18:39 auto
-rw-r--r-- 1 wdq wdq 323312 Apr 11 09:45 CHANGES
-rw-r--r-- 1 wdq wdq 494234 Apr 11 09:45 CHANGES.ru
drwxr-xr-x 2 wdq wdq 168 Aug 14 18:39 conf
-rwxr-xr-x 1 wdq wdq 2611 Apr 11 09:45 configure
drwxr-xr-x 4 wdq wdq 72 Aug 14 18:39 contrib
drwxr-xr-x 2 wdq wdq 40 Aug 14 18:39 html
-rw-r--r-- 1 wdq wdq 1397 Apr 11 09:45 LICENSE
-rw-r--r-- 1 root root 458 Aug 14 18:53 Makefile
drwxr-xr-x 2 wdq wdq 21 Aug 14 18:39 man
drwxr-xr-x 3 root root 125 Aug 14 18:53 objs
-rw-r--r-- 1 wdq wdq 49 Apr 11 09:45 README
drwxr-xr-x 9 wdq wdq 91 Aug 14 18:39 src
[root@WDQCVM nginx-1.24.0]#
- auto目录,编译、支持哪些模块、当前系统有哪些特性给NGINX使用
- CHANGES 提供了哪些特性,和BugFix,.ru是因为NGINX之父是俄罗斯人
- conf 示例文件
- configure编译文件
- contrib 该文件中是一些对NGINX支持高亮显示的文件,这里的内容拷贝到VIM中可以高亮
- html 提供了500 和index文件
- man NGINX的帮助文件
- src NGINX源代码
- objs 是生成中间文件的目录
- 其中有个ngx_modules.c的文件,这里记录所有进去的NGINX模块
编译安装
查看configure支持的参数
这里有很多参数,如果不需要变动则只需指定--prefix
指定编译后的路径即可
还有带有--with-……
这种默认是不会编译进NGINX的,相反 --without-……
这种默认是编译进NGINX中的
[root@WDQCVM nginx-1.24.0]# ./configure --help--help print this message--prefix=PATH set installation prefix--sbin-path=PATH set nginx binary pathname--modules-path=PATH set modules path--conf-path=PATH set nginx.conf pathname--error-log-path=PATH set error log pathname--pid-path=PATH set nginx.pid pathname--lock-path=PATH set nginx.lock pathname--user=USER set non-privileged user forworker processes--group=GROUP set non-privileged group forworker processes--build=NAME set build name--builddir=DIR set build directory--with-select_module enable select module--without-select_module disable select module--with-poll_module enable poll module--without-poll_module disable poll module--with-threads enable thread pool support--with-file-aio enable file AIO support--with-http_ssl_module enable ngx_http_ssl_module
……--with-http_stub_status_module enable ngx_http_stub_status_module--without-http_charset_module disable ngx_http_charset_module--without-http_gzip_module disable ngx_http_gzip_module
……--without-http_upstream_zone_moduledisable ngx_http_upstream_zone_module--with-http_perl_module enable ngx_http_perl_module
……--with-perl=PATH set perl binary pathname--http-log-path=PATH set http access log pathname--http-client-body-temp-path=PATH set path to storehttp client request body temporary files--http-proxy-temp-path=PATH set path to storehttp proxy temporary files--http-fastcgi-temp-path=PATH set path to storehttp fastcgi temporary files--http-uwsgi-temp-path=PATH set path to storehttp uwsgi temporary files--http-scgi-temp-path=PATH set path to storehttp scgi temporary files--without-http disable HTTP server--without-http-cache disable HTTP cache--with-mail enable POP3/IMAP4/SMTP proxy module……--with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module--without-stream_limit_conn_module disable ngx_stream_limit_conn_module……--without-stream_upstream_zone_moduledisable ngx_stream_upstream_zone_module--with-google_perftools_module enable ngx_google_perftools_module
……--with-openssl-opt=OPTIONS set additional build options for OpenSSL--with-debug enable debug logging[root@WDQCVM nginx-1.24.0]#
编译
cd /opt/darren/upgrade/nginx-1.24.0
mkdir -p /opt/darren/dev/
./configure --prefix=/opt/darren/dev/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-http_gzip_static_module --with-pcre
make
make install
./configure
:这是运行 NGINX 配置脚本的命令。--prefix=/opt/darren/dev/nginx
:指定 NGINX 的安装路径为 /opt/darren/dev/nginx,这是 NGINX 被安装到的主目录。--with-http_ssl_module
:启用 HTTP SSL 模块,允许 NGINX 支持通过 HTTPS 提供加密的安全连接。--with-http_stub_status_module
:启用 HTTP Stub Status 模块,该模块提供了一个简单的状态页面,用于监控 NGINX 的运行状态和统计信息。--with-stream
:启用 Stream 模块,使 NGINX 能够处理基于 TCP 或 UDP 的流量。--with-http_gzip_static_module
:启用 HTTP Gzip Static 模块,该模块允许 NGINX 在服务器端对静态文件进行 Gzip 压缩,以提高传输效率。--with-pcre
:启用 PCRE(Perl Compatible Regular Expressions)模块,该模块用于支持正则表达式,通常用于 URI 路径匹配等。- make 和 make install 来执行完成安装操作
在编译过程中有很多信息,这些信息只要没有报错信息即可,如果有报错信息则需要排查错误后再编译安装。
安装结束后的文件
编译的文件是
[root@WDQCVM nginx]# cd /opt/darren/dev/nginx
[root@WDQCVM nginx]# ll
total 0
drwxr-xr-x 2 root root 333 Aug 14 19:30 conf
drwxr-xr-x 2 root root 40 Aug 14 19:30 html
drwxr-xr-x 2 root root 6 Aug 14 19:30 logs
drwxr-xr-x 2 root root 19 Aug 14 19:30 sbin
[root@WDQCVM nginx]#
- conf配置文件
- html 静态页面
- logs存放日志的目录
- sbin二进制文件存放的地方
设置为服务
服务启动
# 测试语法是否有问题
[root@WDQCVM sbin]# /opt/darren/dev/nginx/sbin/nginx -t -c /opt/darren/dev/nginx/conf/nginx.conf
nginx: the configuration file /opt/darren/dev/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/darren/dev/nginx/conf/nginx.conf test is successful
# 启动
[root@WDQCVM sbin]# /opt/darren/dev/nginx/sbin/nginx -c /opt/darren/dev/nginx/conf/nginx.conf
[root@WDQCVM sbin]# ps -ef|grep nginx
root 6677 1 0 19:35 ? 00:00:00 nginx: master process /opt/darren/dev/nginx/sbin/nginx -c /opt/darren/dev/nginx/conf/nginx.conf
nobody 6678 6677 0 19:35 ? 00:00:00 nginx: worker process
root 6680 1148 0 19:35 pts/0 00:00:00 grep --color=auto nginx
[root@WDQCVM sbin]#
将NGINX设置为服务
[root@WDQCVM sbin]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network. target remote-fs.target nss -lookup. target[Service]
Type=forking
PIDFile=/opt/darren/dev/nginx/logs/nginx.pid
ExecStartPre=/opt/darren/dev/nginx/sbin/nginx -t -c /opt/darren/dev/nginx/conf/nginx.conf
ExecStart=/opt/darren/dev/nginx/sbin/nginx -c /opt/darren/dev/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
服务重载
systemctl daemon-reload
以服务的方式启动
[root@WDQCVM sbin]# systemctl start nginx
[root@WDQCVM sbin]# systemctl status nginx
● nginx.service - nginx - high performance web serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: active (running) since Mon 2023-08-14 19:40:15 CST; 1s agoDocs: https://nginx.org/en/docs/Process: 6737 ExecStart=/opt/darren/dev/nginx/sbin/nginx -c /opt/darren/dev/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)Process: 6736 ExecStartPre=/opt/darren/dev/nginx/sbin/nginx -t -c /opt/darren/dev/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)Main PID: 6739 (nginx)CGroup: /system.slice/nginx.service├─6739 nginx: master process /opt/darren/dev/nginx/sbin/nginx -c /opt/darren/dev/nginx/conf/nginx.conf└─6740 nginx: worker processAug 14 19:40:15 WDQCVM systemd[1]: [/usr/lib/systemd/system/nginx.service:6] Failed to add dependency on -lookup., ignoring: Invalid argument
Aug 14 19:40:15 WDQCVM systemd[1]: [/usr/lib/systemd/system/nginx.service:6] Failed to add dependency on target, ignoring: Invalid argument
Aug 14 19:40:15 WDQCVM systemd[1]: Starting nginx - high performance web server...
Aug 14 19:40:15 WDQCVM nginx[6736]: nginx: the configuration file /opt/darren/dev/nginx/conf/nginx.conf syntax is ok
Aug 14 19:40:15 WDQCVM nginx[6736]: nginx: configuration file /opt/darren/dev/nginx/conf/nginx.conf test is successful
Aug 14 19:40:15 WDQCVM systemd[1]: Started nginx - high performance web server.
[root@WDQCVM sbin]#
设置为开机启动
[root@WDQCVM sbin]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@WDQCVM sbin]