一、环境准备
操作系统:选择适合的 Linux 发行版,如 CentOS、Ubuntu 等。本笔记以 CentOS 为例。
确保系统已连接网络,以便安装所需的依赖包和下载 Nginx 源码。
二、安装依赖包
登录到服务器,以 root 用户身份执行以下命令安装编译 Nginx 所需的依赖包:
dnf install gcc pcre-devel zlib-devel openssl-devel -y
AI写代码
gcc:用于编译 C 语言程序,Nginx 是用 C 语言编写的,所以需要它来进行编译。
pcre-devel:支持正则表达式的库开发包,Nginx 的配置文件中会使用正则表达式来进行 URL 匹配等操作,因此需要这个依赖。
zlib-devel:用于数据压缩和解压缩,Nginx 可以对传输的数据进行压缩,以提高传输效率,所以需要这个库的开发包。
openssl-devel:提供了 SSL/TLS 加密功能的支持,使 Nginx 能够处理 HTTPS 请求,保障数据的安全传输。
三、创建 Nginx 用户和用户组(可选但推荐)
为了提高安全性,创建一个专门用于运行 Nginx 服务的用户和用户组:
useradd -s /sbin/nologin -M nginx
AI写代码
-s /sbin/nologin:指定用户的登录 shell 为 /sbin/nologin,这样该用户就无法直接登录到系统,只能用于运行特定的服务。
-M:表示不创建用户的家目录,因为 Nginx 用户不需要家目录来存储个人文件。
四、下载 Nginx 源码
选择要安装的 Nginx 版本,可以从 Nginx 官方网站(nginx)下载稳定版的源码包。例如,下载 Nginx 1.24.0 版本:
wget https://nginx.org/download/nginx-1.24.0.tar.gz
AI写代码
下载完成后,可以使用以下命令验证下载文件的完整性(可选):
sha256sum nginx-1.24.0.tar.gz
AI写代码
然后将计算得到的哈希值与 Nginx 官方网站上提供的哈希值进行对比,确保文件没有被篡改。
五、解压 Nginx 源码包
使用以下命令解压下载的 Nginx 源码包:
tar zxf nginx-1.24.0.tar.gz
AI写代码
这将创建一个名为 nginx-1.24.0 的目录,包含了 Nginx 的源代码和相关的配置文件。
六、配置 Nginx 编译选项
进入解压后的 Nginx 源码目录:
cd nginx-1.24.0
AI写代码
执行 ./configure 命令来配置 Nginx 的编译选项:
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
AI写代码
--prefix=/usr/local/nginx:指定 Nginx 的安装目录为 /usr/local/nginx。所有的 Nginx 文件,包括二进制文件、配置文件、日志文件等,都将安装在这个目录下。
--user=nginx 和 --group=nginx:指定 Nginx 进程运行时所使用的用户和用户组为前面创建的 nginx 用户和用户组。
--with-http_ssl_module:启用 HTTP SSL 模块,使 Nginx 能够支持 HTTPS 协议,用于加密的 Web 通信。
--with-http_v2_module:支持 HTTP/2 协议,该协议在性能上相较于 HTTP/1.1 有显著提升,如多路复用、头部压缩等特性,能加快网页的加载速度。
--with-http_realip_module:允许 Nginx 获取真实的客户端 IP 地址,在 Nginx 作为反向代理服务器时,后端服务器可以通过该模块获取到客户端的真实 IP,而不是代理服务器的 IP。
--with-http_stub_status_module:启用一个简单的状态页面,通过访问该页面可以获取 Nginx 的一些运行状态信息,如当前连接数、活动连接数、请求处理数量等,方便对 Nginx 服务进行监控和调试。
--with-http_gzip_static_module:使 Nginx 能够对静态文件进行 gzip 压缩,减少文件传输大小,提高网页加载速度,节省网络带宽。
--with-pcre:支持使用 PCRE(Perl Compatible Regular Expressions)库进行正则表达式操作,在 Nginx 的配置文件中,正则表达式常用于 URL 匹配、重写规则等场景。
--with-stream:启用 Nginx 的 TCP/UDP 流代理功能,除了 HTTP 协议,Nginx 还可以代理其他基于流的协议,如 TCP 协议的应用程序。
--with-stream_ssl_module:结合 --with-stream 模块,为 TCP 流代理提供 SSL 加密功能,保障数据在传输过程中的安全性。
--with-stream_realip_module:类似于 --with-http_realip_module,但用于 TCP 流代理,使后端服务器能够获取到真实的客户端 IP 地址。
七、编译和安装 Nginx
在完成配置后,使用以下命令进行编译:
make
AI写代码
这一步可能需要一些时间,具体取决于服务器的性能,它会根据 ./configure 生成的配置文件来编译 Nginx 的源代码,生成可执行文件和相关的库文件。
编译成功后,执行以下命令进行安装:
make install
AI写代码
这将把编译好的 Nginx 文件复制到 --prefix 指定的安装目录(/usr/local/nginx)下,完成 Nginx 的安装过程。
八、配置 Nginx 服务
创建 Nginx 服务启动脚本(以 CentOS 为例,使用 Systemd):
创建一个名为 nginx.service 的文件,内容如下:
[Unit]
Description=Nginx HTTP Server
After=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 stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
AI写代码
将上述内容保存到 /etc/systemd/system/nginx.service 文件中。
[Unit] 部分
Description=Nginx HTTP Server:
这一行是对该服务的一个简单描述,说明这个服务是 Nginx 的 HTTP 服务器,主要用于在查看服务相关信息时(比如通过 systemctl 命令查看状态等操作),让人能直观了解这个服务具体是做什么的。
After=network.target:
它定义了启动顺序上的依赖关系,表示 nginx 服务应该在 network.target 这个目标完成之后启动。network.target 代表网络相关的初始化等操作完成,确保 nginx 在网络准备好的情况下启动,因为 nginx 要监听端口、处理网络请求,所以依赖网络服务正常启动。
[Service] 部分
Type=forking:
这个配置项用于告知 Systemd 该服务启动的类型是 forking 模式。对于 nginx 来说,启动时它会先由父进程创建子进程,然后父进程退出,子进程继续运行并作为真正的服务进程来处理请求等,这种先 fork 出子进程然后父进程结束的启动方式就是 forking 模式的特点,通过这个配置项让 Systemd 能正确识别和管理 nginx 的启动过程。
ExecStart=/usr/local/nginx/sbin/nginx:
它指定了启动 nginx 服务时要执行的命令,也就是告诉 Systemd 去哪里找到 nginx 的可执行文件来启动 nginx 服务,这里明确指出可执行文件的路径是 /usr/local/nginx/sbin/nginx ,当执行 systemctl start nginx 命令时,Systemd 就会按照这个路径去运行 nginx 可执行文件来启动服务。
ExecReload=/usr/local/nginx/sbin/nginx -s reload:
定义了当执行 systemctl reload nginx 命令时要执行的操作,即通过调用 nginx 可执行文件并附带 -s reload 参数来实现重新加载 nginx 的配置文件。这样在修改了 nginx 配置后,无需停止再重新启动服务,通过重新加载配置就能让新配置生效,保证服务的连续性。
ExecStop=/usr/local/nginx/sbin/nginx -s stop:
指定了在执行 systemctl stop nginx 命令时,Systemd 会执行的操作,即运行 nginx 可执行文件并附带 -s stop 参数来正常停止 nginx 服务,使得服务能平稳关闭,避免出现数据丢失、端口占用异常等问题。
PrivateTmp=true:
这个配置使得 nginx 服务拥有自己独立的临时文件目录,与系统其他部分的临时文件相互隔离,增强了安全性,避免不同服务之间临时文件的相互干扰以及潜在的安全风险。
[Install] 部分
WantedBy=multi-user.target:
它表示该服务所属的启动目标,也就是在系统进入多用户模式(multi-user.target 是一种常见的系统运行目标,代表多个用户可以登录并使用系统的状态)时,nginx 服务会被自动启动(前提是执行了 systemctl enable nginx 操作),定义了 nginx 服务与系统运行级别(这里对应的就是多用户模式这个级别)之间的关联,用于控制服务在系统启动过程中的启动行为。
总体而言,这段配置文件内容是为了让 Systemd 能正确地对 nginx 服务进行启动、停止、重新加载配置等管理操作,并合理安排它在系统启动过程中的启动顺序以及关联到合适的系统运行状态。
重新加载 Systemd 配置:
systemctl daemon-reload
AI写代码
启动 Nginx 服务:
systemctl start nginx
AI写代码
设置 Nginx 服务开机自启:
systemctl enable nginx
AI写代码
九、验证 Nginx 安装
打开浏览器,访问服务器的 IP 地址或域名,如果看到 Nginx 的默认欢迎页面,则说明 Nginx 安装成功并正在运行。
可以使用以下命令检查 Nginx 服务的运行状态:
systemctl status nginx