引言
本命令适用于 Centos7.2
系统,其他系统或平台暂未测试过
快捷命令
# 补充依赖
sudo yum -y install cmake gcc g++ ncurses-devel libtirpc-devel rpcgen libxml2-devel sqlite-devel libpng-devel oniguruma-devel wget pcre-devel vim
# 下载Nginx源码包(v1.25.3)
wget https://nginx.org/download/nginx-1.25.3.tar.gz
# 解压
tar -xzvf nginx-1.25.3.tar.gz
# 编译源码包
./configure --prefix=安装目录 --user=用户名 --group=用户组 --with-http_ssl_module --with-http_stub_status_module
# 编译与安装
make
make install
# 开放端口给程序占用(允许非root用户也可以执行nginx的启动(需要root执行))
setcap cap_net_bind_service=+eip Nginx的可执行文件路径
修订记录
序号 | 日期 | 修订内容 |
---|---|---|
1 | 2023.12.04 | 创建 |
2 | 2023.12.19 | 补充--with-http_stub_status_module参数 |
3 | 2023.12.22 | 补充系统版本情况,补充快捷命令的编译和依赖安装 |
Nginx下载源码
首先,去到 Nginx
官网,这个应该是没有被墙的。
如上图所示,点击右下角的 download
超链接,或者你直接选中你想要的版本
然后右键点击 复制链接地址
按钮,复制到剪贴板,也可以自己下载后上传到服务器
然后连接到你的服务器终端,找一个目录,我这里找的是 /server/data/packages
目录,你可以自己建立目录
然后执行命令:
wget https://nginx.org/download/nginx-1.25.3.tar.gz
之后等待一小会,下载到100%
使用 ll
命令查看这个文件,确实是被下载下来了
然后使用命令解压缩,当然你也可以本地解压然后上传到服务器上来
tar -xzvf nginx-1.25.3.tar.gz
你会看到一堆文件被打印出来,不用管,命令停下来就行,
同样,ll
命令能看到你的这个 nginx
的文件夹,这就是 Nginx
的源码包了
接下来我们进入 cd
一下源码包,然后准备开始进行编译,同样,ls
命令能看到源码包内的文件目录
编译安装
第一次预编译报错
这里我们首先创建了 nginx
的安装目录,用命令:
mkdir /server/nginx/1.25.3
当然你也可以放在你自己喜欢的位置,注意权限(我这里用的账号不是 root
账号,注意我命令前面的 $
符号哦)
然后开始执行预编译命令:
./configure --prefix=安装目录 --user=用户名 --group=用户组 --with-http_ssl_module --with-http_stub_status_module
这里命令的用户名和用户组两个参数可省略,因为我这里是要指定用户来启动的,对权限要求比较严格,你如果省略,后续再指定也是可以的。
开始预编译之后就等着,然后就出现了一次报错
安装Nginx的相关依赖包
提示出现了 PCRE
报错,此时就需要安装相关依赖了。
需要使用命令安装(需要有sudo或超管权限)
sudo yum install -y pcre-devel zlib-devel openssl-devel
然后出现 Complete!
标识,就代表已经安装成功了。
第二次预编译
接下来我们重新执行一次预编译命令,就是上面提到的那个
./configure --prefix=安装目录 --user=用户名 --group=用户组 --with-http_ssl_module --with-http_stub_status_module
出现上面这种效果,就代表预编译通过了!
编译
我们进行编译 make
这里使用的是单核,常规方式开始进行编译,对于 Nginx
的源码包来说,常规编译速度还是很快的,所以也不需要加额外参数。
安装
等到刷屏的打印停下来了,没有报错的话,我们就可以进行第二步,安装了
make install
等到结束,你可以使用 ls
命令来看你之前指定的安装目录下有没有出现文件,有的话就代表安装成功了。
设置允许非root用户启动
这里我们去到 Nginx
的运行目录,尝试启动 Nginx
服务,结果是会提示报错
./nginx
(需要到执行文件路径里)
网上的解释是,Nginx
默认占用的是 80
端口,在 Linux
下,所有开放端口小于 1024
的,都需要 root
权限来执行,但我想着的是,如果是 root
权限执行 Nginx
,那么去访问东西就很高权限了,不大合适。
所以我们用下面的命令来给 nginx
执行文件“提权”
setcap cap_net_bind_service=+eip Nginx的可执行文件路径
注意啊,这里的命令是需要root账号权限来执行的,sudo或者直接切换到root权限均可
启动并测试
接下来我们再用普通账号来执行一次启动,./nginx
发现是可以正常启动,没有报错的
在客户端的浏览器上输入 ip
访问,发现也是能够正常出来 nginx
的欢迎页面的
这时候我们去查看这个Nginx进程信息,用命令:
ps -aux | grep nginx
发现启动的进程信息,也确实不是 root
启动的
配置便捷操作(可跳过)
使用命令,给可执行文件nginx提供一个全局执行的方式
sudo ln -s 可执行文件路径 /usr/local/bin/nginx
这时候,在全局使用nginx命令,是可行的了!
# 检查nginx配置文件
nginx -t
# 修改配置文件后,可重启nginx服务
nginx -s reload
# 优雅退出nginx
nginx -s quit
发现是正常输出,没有任何报错!即配置完成
本文内容已同步到微信公众号,下面是传送门