一、环境准备
- 操作系统:选择适合的 Linux 发行版,如 CentOS、Ubuntu 等。本笔记以 CentOS 为例。
- 确保系统已连接网络,以便安装所需的依赖包和下载 Nginx 源码。
二、安装依赖包
-
登录到服务器,以 root 用户身份执行以下命令安装编译 Nginx 所需的依赖包:
dnf install gcc pcre-devel zlib-devel openssl-devel -y
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
-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
-
下载完成后,可以使用以下命令验证下载文件的完整性(可选):
sha256sum nginx-1.24.0.tar.gz
然后将计算得到的哈希值与 Nginx 官方网站上提供的哈希值进行对比,确保文件没有被篡改。
五、解压 Nginx 源码包
-
使用以下命令解压下载的 Nginx 源码包:
tar zxf nginx-1.24.0.tar.gz
这将创建一个名为 nginx-1.24.0
的目录,包含了 Nginx 的源代码和相关的配置文件。
六、配置 Nginx 编译选项
-
进入解压后的 Nginx 源码目录:
cd nginx-1.24.0
-
执行
./configure
命令来配置 Nginx 的编译选项:./configure
--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
--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
这一步可能需要一些时间,具体取决于服务器的性能,它会根据 ./configure
生成的配置文件来编译 Nginx 的源代码,生成可执行文件和相关的库文件。
-
编译成功后,执行以下命令进行安装:
make install
这将把编译好的 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
-
- 将上述内容保存到
/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
-
启动 Nginx 服务:
systemctl start nginx
-
设置 Nginx 服务开机自启:
systemctl enable nginx
九、验证 Nginx 安装
-
打开浏览器,访问服务器的 IP 地址或域名,如果看到 Nginx 的默认欢迎页面,则说明 Nginx 安装成功并正在运行。
-
可以使用以下命令检查 Nginx 服务的运行状态:
systemctl status nginx
通过以上步骤,你就完成了 Nginx 的编译安装和基本配置,可以根据实际需求进一步配置 Nginx 的虚拟主机、反向代理、负载均衡等功能,以满足不同的应用场景。