关于 LNMP 环境中的 PHP 安装,请参考:在 ubuntu 22.04 中,通过源码编译安装 LNMP 中的 PHP 环境

系统环境

标题 版本 备注
系统版本 22.04.3 LTS (Jammy Jellyfish) -
内核版本 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux -
Nginx v1.24.0 -

Nginx 介绍

Nginx 官方站点: https://nginx.org/

Nginx(发音同 engine x)是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 由俄罗斯的工程师 Igor Sysoev 开发,最初是为了解决俄罗斯访问量第二的 Rambler.ru 网站的高负载问题。

特点

Nginx 的特点包括:

  • 高性能: Nginx 能够处理并发连接数,并且 CPU 和内存消耗低。
  • 稳定性: Nginx 运行稳定,即使在高负载情况下也能保持稳定运行。
  • 丰富的功能: Nginx 支持多种 HTTP 协议,包括 HTTP/1.0、HTTP/1.1 和 HTTP/2。它还支持反向代理、负载均衡、动静分离、Gzip 压缩等功能。
  • 开源: Nginx 是开源软件,可以免费使用和修改。

Nginx 已经被广泛应用于各种网站和应用程序,包括:

  • 大型网站:淘宝、京东、百度、新浪等
  • 负载均衡:Nginx 可以用于为多个服务器提供负载均衡,提高服务器的利用率和性能。
  • 反向代理:Nginx 可以用于反向代理到不同的服务器,实现动静分离、缓存等功能。
  • 应用程序服务器:Nginx 可以用于作为应用程序服务器,运行 PHP、Python 等应用程序。

优势

Nginx 的优势

Nginx 相比于其他 Web 服务器,具有以下优势:

  • 高性能: Nginx 能够处理更多的并发连接,并且 CPU 和内存消耗更低。
  • 稳定性: Nginx 运行稳定,即使在高负载情况下也能保持稳定运行。
  • 丰富的功能: Nginx 支持多种 HTTP 协议,包括 HTTP/1.0、HTTP/1.1 和 HTTP/2。它还支持反向代理、负载均衡、动静分离、Gzip 压缩等功能。
  • 开源: Nginx 是开源软件,可以免费使用和修改。

场景

Nginx 的应用场景

Nginx 可以用于以下场景:

  • Web 服务器: Nginx 可以用于作为 Web 服务器,提供静态和动态资源的访问。
  • 反向代理: Nginx 可以用于反向代理到不同的服务器,实现动静分离、缓存等功能。
  • 负载均衡: Nginx 可以用于为多个服务器提供负载均衡,提高服务器的利用率和性能。
  • 应用程序服务器: Nginx 可以用于作为应用程序服务器,运行 PHP、Python 等应用程序。

总结

总结

Nginx 是一款高性能、稳定、功能丰富的 Web 服务器,已经被广泛应用于各种网站和应用程序。如果你正在寻找一款优秀的 Web 服务器,Nginx 是一个很好的选择。

Nginx 安装

以下操作都在 root 用户下执行。

脚本安装

手动安装

安装前的准备:

1.添加 nginx 用户,禁止其登陆系统:

1
useradd -s /sbin/nologin nginx

2.安装必要的编译包和模块依赖包:

1
apt install -y gcc g++ git make autoconf automake curl wget libtool libmaxminddb-dev libxslt1-dev libgd-dev libgeoip-dev libgoogle-perftools-dev libperl-dev

依赖及模块的下载

下载解压 pcre:

点击这里下载 pcre 源码包到 /usr/local/src/ 目录下并解压

1
2
wget --no-check-certificate -O /usr/local/src/pcre-8.45.tar.gz https://zenlayer.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
tar -zxf /usr/local/src/pcre-8.45.tar.gz -C /usr/local/src/
下载解压 openssl:

点击这里下载 openssl 源码包到 /usr/local/src/ 目录下并解压

1
2
wget -O /usr/local/src/openssl-1.1.1u.tar.gz https://www.openssl.org/source/old/1.1.1/openssl-1.1.1u.tar.gz
tar -zxf /usr/local/src/openssl-1.1.1u.tar.gz -C /usr/local/src/
下载解压 zlib:

点击这里下载 zlib 源码包到 /usr/local/src/ 目录下并解压

1
2
wget -O /usr/local/src/zlib-1.3.1.tar.gz https://www.zlib.net/zlib-1.3.1.tar.gz
tar -zxf /usr/local/src/zlib-1.3.1.tar.gz -C /usr/local/src/
下载 libatomic_ops 源文件

点击这里从 github 克隆 libatomic_ops 源码文件到 /usr/local/src/ 目录下并执行 ./autogen.sh:

1
2
3
4
5
6
7
8
9
10
11
# 同步的代码
git clone https://github.com/ivmai/libatomic_ops.git /usr/local/src/libatomic_ops

# 进入同步目录
cd /usr/local/src/libatomic_ops

# 生成 configure 文件
./autogen.sh

# 做库文件的软链接
ln -s /usr/local/src/libatomic_ops/src/.libs/libatomic_ops.a /usr/local/src/libatomic_ops/src/
下载 IP 定位模块:ngx_http_geoip2_module

点击这里从 github 克隆 ngx_http_geoip2_module 源码文件到 /usr/local/src/ 目录下:

1
git clone https://github.com/leev/ngx_http_geoip2_module.git /usr/local/src/ngx_http_geoip2_module
下载目录索引模块:ngx-fancyindex

点击这里从 github 克隆 ngx-fancyindex 源码文件到 /usr/local/src/ 目录下:

1
git clone https://github.com/aperezdc/ngx-fancyindex.git /usr/local/src/ngx-fancyindex
下载第三方开源健康检查模块: nginx_upstream_check_module

点击这里从 github 克隆 nginx_upstream_check_module 源码文件到 /usr/local/src/ 目录下:

1
git clone https://github.com/nginx-modules/nginx_upstream_check_module.git /usr/local/src/nginx_upstream_check_module

下载安装 nginx

1.点击这里从 nginx 官方站点下载 nginx 源码包到 /usr/local/src/ 目录下:

1
wget -O /usr/local/src/nginx-1.24.0.tar.gz http://nginx.org/download/nginx-1.24.0.tar.gz

2.将下载好的源码包解压至下载目录;

1
tar -zxf /usr/local/src/nginx-1.24.0.tar.gz -C /usr/local/src/

3.进入 nginx 解压目录:

1
cd /usr/local/src/nginx-1.24.0/

4.配置 confiugre 参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module=dynamic \
--http-log-path=/usr/local/nginx/logs/access.log \
--http-client-body-temp-path=/usr/local/nginx/tmp/client_body \
--http-proxy-temp-path=/usr/local/nginx/tmp/proxy \
--http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module \
--with-stream_ssl_preread_module \
--with-google_perftools_module \
--with-cpp_test_module \
--with-compat \
--with-pcre=/usr/local/src/pcre-8.45/ \
--with-zlib=/usr/local/src/zlib-1.3.1/ \
--with-libatomic=/usr/local/src/libatomic_ops/ \
--with-openssl=/usr/local/src/openssl-1.1.1u/ \
--add-module=/usr/local/src/ngx_http_geoip2_module \
--add-module=/usr/local/src/ngx-fancyindex \
--add-module=/usr/local/src/nginx_upstream_check_module

5.执行 make 进行编译:

1
make

6.执行 make install 进行安装;

1
make install

7.在 /etc/profile.d/ 目录下创建 nginx 环境配置文件 nginx.sh ,内容为:

1
echo 'PATH=$PATH:/usr/local/nginx/sbin' > /etc/profile.d/nginx.sh && source /etc/profile.d/nginx.sh

8.在 nginx 安装目录 /usr/local/nginx/tmp 目录下创建以下三个目录:

1
mkdir -p /usr/local/nginx/tmp/{client_body,proxy,fastcgi}

9.在 /lib/systemd/system/ 目录下创建 nginx 启动脚本文件 nginx.service ,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat << 'EOF' > /lib/systemd/system/nginx.service
[Unit]
Description=Nginx
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

10.执行命令 systemctl daemon-reload 加载 nginx 脚本:

1
systemctl daemon-reload

11.执行命令 systemctl enable --now nginx.service 启动 nginx 服务并将其设置为开机启动:

1
systemctl enable --now nginx.service

12.执行命令 systemctl status nginx.service 查看 nginx 的状态,如果为 running 则说明 nginx 启动成功,否则,请根据报错信息进行排错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@vm001-ubuntu2204:~# systemctl status nginx.service 
● nginx.service - Nginx
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-04-11 01:31:06 UTC; 41min ago
Process: 40172 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 40173 (nginx)
Tasks: 2 (limit: 9389)
Memory: 1.8M
CPU: 3ms
CGroup: /system.slice/nginx.service
├─40173 "nginx: master process /usr/local/nginx/sbin/nginx"
└─40174 "nginx: worker process" "" "" "" "" "" ""

Apr 11 01:31:06 vm001-ubuntu2204 systemd[1]: Starting Nginx...
Apr 11 01:31:06 vm001-ubuntu2204 systemd[1]: Started Nginx.

报错及解决方法

configure 报错

错误一:error: Libtool library used but ‘LIBTOOL’ is undefined

报错详情:

1
2
3
4
5
6
7
8
src/Makefile.am:14: error: Libtool library used but 'LIBTOOL' is undefined
src/Makefile.am:14: The usual way to define 'LIBTOOL' is to add 'LT_INIT'
src/Makefile.am:14: to 'configure.ac' and run 'aclocal' and 'autoconf' again.
src/Makefile.am:14: If 'LT_INIT' is in 'configure.ac', make sure
src/Makefile.am:14: its definition is in aclocal's search path.
src/Makefile.am: installing './depcomp'
parallel-tests: installing './test-driver'
autoreconf: error: automake failed with exit status: 1

解决方法:

安装 Libtool

1
apt install -y libtool

错误二:error: the geoip2 module requires the maxminddb library.

报错详情:

1
2
3
adding module in /usr/local/src/ngx_http_geoip2_module
checking for MaxmindDB library ... not found
./configure: error: the geoip2 module requires the maxminddb library.

解决方法:

安装 libmaxminddb-dev

1
apt install -y libmaxminddb-dev

错误三:error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x.

报错详情:

1
2
3
adding module in /usr/local/src/lua-nginx-module
checking for LuaJIT 2.x ... not found
./configure: error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x.

解决方法:

安装

1
apt install -y 

错误四:error: the HTTP XSLT module requires the libxml2/libxslt

报错详情:

1
2
3
4
5
6
7
checking for libxslt ... not found
checking for libxslt in /usr/local/ ... not found
checking for libxslt in /usr/pkg/ ... not found
checking for libxslt in /opt/local/ ... not found

./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries. You can either do not enable the module or install the libraries.

解决方法:

安装 libxslt1-dev

1
apt install -y libxslt1-dev

错误五:error: the HTTP image filter module requires the GD library.

报错详情:

1
2
3
4
5
6
7
checking for GD library ... not found
checking for GD library in /usr/local/ ... not found
checking for GD library in /usr/pkg/ ... not found
checking for GD library in /opt/local/ ... not found

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

解决方法:

安装 libgd-dev

1
apt install -y libgd-dev

错误六:error: the GeoIP module requires the GeoIP library.

报错详情:

1
2
3
4
5
6
7
checking for GeoIP library ... not found
checking for GeoIP library in /usr/local/ ... not found
checking for GeoIP library in /usr/pkg/ ... not found
checking for GeoIP library in /opt/local/ ... not found

./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.

解决方法:

安装 libgeoip-dev

1
apt install -y libgeoip-dev

错误七:error: the Google perftools module requires the Google perftools

报错详情:

1
2
3
4
5
6
checking for Google perftools ... not found
checking for Google perftools in /usr/local/ ... not found
checking for Google perftools in /opt/local/ ... not found

./configure: error: the Google perftools module requires the Google perftools
library. You can either do not enable the module or install the library.

解决方法:

安装 libgoogle-perftools-dev

1
apt install -y libgoogle-perftools-dev

make 报错

错误一: cannot find /usr/local/src/libatomic_ops//src/libatomic_ops.a: No such file or directory

报错详情:

1
2
3
4
5
/usr/bin/ld: cannot find /usr/local/src/libatomic_ops//src/libatomic_ops.a: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [objs/Makefile:347: objs/nginx] Error 1
make[1]: Leaving directory '/usr/local/src/nginx-1.24.0'
make: *** [Makefile:10: build] Error 2

解决方法:

/usr/local/src/libatomic_ops/src/.libs/libatomic_ops.a 软链接到 /usr/local/src/libatomic_ops/src/ 目录下:

1
ln -s /usr/local/src/libatomic_ops/src/.libs/libatomic_ops.a /usr/local/src/libatomic_ops/src/

错误二:cannot find -lperl: No such file or directory

报错详情:

1
2
3
4
5
/usr/bin/ld: cannot find -lperl: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [objs/Makefile:1885: objs/ngx_http_perl_module.so] Error 1
make[1]: Leaving directory '/usr/local/src/nginx-1.24.0'
make: *** [Makefile:10: build] Error 2

解决方法:

安装 libperl-dev

1
apt install -y libperl-dev

安装总结

在 ubuntu 22.04 中,通过源码编译安装 LNTP 中的 Nginx 服务(非 Lua 版)

2024年4月11号

关于对 Lua 的支持。本人尝试过编译进去,但是编译过程中报错,就没有进一步的折腾了。也许后续有时间了会去折腾,说不定:

1
2
3
4
5
6
7
# 将 luajit2 克隆到本地:
git clone https://luajit.org/git/luajit.git /usr/local/src/luajit2
cd /usr/local/src/luajit2
make PREFIX=/usr/local/luajit2 && make install PREFIX=/usr/local/luajit2

#下载 lua-nginx-module**
git clone https://github.com/openresty/lua-nginx-module.git /usr/local/src/lua-nginx-module

在 ubuntu 22.04 中,通过源码编译安装 LNMP 中的 Nginx 服务(Lua 版)

2024年4月11号