初识nginx
# 初始nginx
# 认识nginx
# 安装nginx
在linux系统中,通过手动方式
,安装nginx并启动。
首先你,需要下载对应文件。
接着你需要进行解压
tar -xvf nginx-1.26.3.tar.gz
# 解压到当前文件夹下
2
如果你想将文件解压到特定目录,可以使用 -C
参数。例如:
tar -xvf nginx-1.26.3.tar.gz -C /path/to/directory
如果你没有对当前目录或文件的访问权限,可能会导致解压失败。在这种情况下,可以使用 sudo
提升权限:
sudo tar -xvf nginx-1.26.3.tar.gz
# 配置环境
- 安装命令,通过configure文件进行安装,
./configure --prefix=/usr/local/nginx
2
./configure
是一个非常重要的步骤。它用于配置 Nginx 的编译环境,检查系统环境和依赖项,并生成后续编译和安装所需的 Makefile
文件。
./configure
:检查环境并生成Makefile
。make
:根据Makefile
编译源代码,生成可执行文件。make install
:将编译好的文件安装到指定路径。- 验证和使用:启动 Nginx 并测试其功能。
# 一个问题
问题 为什么 不加 ./ 会无法执行
上述问题的答案:
- 不加
./
时,系统会在PATH
环境变量中查找configure
文件,而当前目录(.
)通常不在PATH
中,因此会报错。 - 加上
./
后,明确指定了当前目录下的configure
文件,系统可以直接找到并执行它。 - 出于安全性和最佳实践的考虑,建议始终显式使用
./
来运行当前目录下的可执行文件。
执行过程中,如果提示
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
2
3
4
这表明 Nginx 的 HTTP rewrite 模块 需要依赖 PCRE(Perl Compatible Regular Expressions)库,而你的系统中尚未安装该库。Nginx 使用 PCRE 库来支持正则表达式功能(如 URL 重写规则)。
也就是说,系统需要额外的文件
如果你使用的是基于 RPM 的 Linux 发行版(如 CentOS、RHEL 或 Fedora),可以通过 yum
包管理器安装 PCRE 库及其开发文件:
sudo yum install pcre pcre-devel
pcre
:提供 PCRE 运行时库。pcre-devel
:提供编译 Nginx 所需的头文件和静态库。
安装完成后,再执行安装命令即可。
如果安装成功,之后你能看到输出结果如下的信息:
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
# .....
# 包各种路径
2
3
4
5
6
# 编译
接下来的步骤是 -编译,成功编译后就会生成可执行的二进制文件。
make
大概率会看到如下输出:
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory '/usr/local/nginx/ggg'
2
3
4
5
6
7
# 安装
最后执行安装命令
make install
# 检查是否安装
nginx -v
# 重新编译的问题
如果你在初次编译 Nginx 时没有启用 HTTPS(SSL/TLS)支持,那么需要重新编译 Nginx 并添加相关模块(如 --with-http_ssl_module
)。这是因为 Nginx 的功能模块是在编译阶段静态链接到可执行文件中的,无法动态加载。
以下是详细说明和操作步骤:
为什么需要重新编译?
Nginx 的模块分为两类:
- 静态模块:在编译时链接到 Nginx 可执行文件中。
- 动态模块:从 Nginx 1.9.11 开始支持,可以在运行时加载。
HTTPS 支持依赖于 ngx_http_ssl_module
模块。如果在初次编译时未启用该模块,则需要重新编译 Nginx,并显式地添加 --with-http_ssl_module
选项。
# 环境变量配置
在安装 Nginx 后,如果你直接运行 nginx -v
提示命令未找到,而必须使用完整路径 /usr/local/nginx/sbin/nginx -V
才能执行,这是因为系统的 PATH
环境变量中没有包含 Nginx 的可执行文件路径(即 /usr/local/nginx/sbin
)
# Linux 查找命令的机制
- 当你在终端输入一个命令(如
nginx
)时,系统会根据PATH
环境变量中列出的目录顺序查找对应的可执行文件。 - 你可以通过以下命令查看当前的
PATH
echo $PATH
- 输出可能类似于:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 如果
/usr/local/nginx/sbin
不在PATH
中,系统就无法找到nginx
命令。
# 解决方法之一:永久添加到 PATH
为了永久生效,可以将 /usr/local/nginx/sbin
添加到全局或用户级的环境变量配置文件中。
全局配置(所有用户可用)
编辑 /etc/profile
或 /etc/environment
文件:
在文末添加以下配置:
export PATH=$PATH:/usr/local/nginx/sbin
之后刷新配置
source /etc/profile
之后,你的nginx命令,就不用再加前缀了
# 启动
# 启动命令
直接nginx
nginx
# 查看进程
ps -ef|grep nginx
之后大概率会看到如下信息,你会发现有一个master进程和一个worker进程
root 1281394 1 0 22:35 ? 00:00:00 nginx: master process nginx
nobody 1281395 1281394 0 22:35 ? 00:00:00 nginx: worker process
root 1281669 1057667 0 22:35 pts/0 00:00:00 grep --color=auto nginx
2
3
# 通过systemctl查看
# systemctl status nginx
Unit nginx.service could not be found.
2
这表明系统中没有找到名为 nginx.service
的服务单元文件。可能的原因包括:
Nginx 是手动编译安装的 如果你是通过源码手动编译安装的 Nginx,那么默认情况下不会生成
nginx.service
文件。systemctl
只能管理由包管理器(如yum
或apt
)安装的服务,或者手动创建的服务单元文件。你的nginx未成功安装
# 停止跟重新启动
nginx -s stop
nginx -s reload
2
3