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社区版又分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]#
查看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 for
worker processes
--group=GROUP set non-privileged group for
worker 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_module
disable 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 store
http client request body temporary files
--http-proxy-temp-path=PATH set path to store
http proxy temporary files
--http-fastcgi-temp-path=PATH set path to store
http fastcgi temporary files
--http-uwsgi-temp-path=PATH set path to store
http uwsgi temporary files
--http-scgi-temp-path=PATH set path to store
http 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_module
disable 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 路径匹配等。编译的文件是
[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]#
服务启动
# 测试语法是否有问题
[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 server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2023-08-14 19:40:15 CST; 1s ago
Docs: 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 process
Aug 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]