Loading... ### 引言 本命令适用于 `Centos7.2`系统,其他系统或平台暂未测试过 #### 快捷命令 ```shell # 补充依赖 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`官网,这个应该是没有被墙的。 [传送门](https://nginx.org)  如上图所示,点击右下角的 `download`超链接,或者你直接选中你想要的版本 然后右键点击 `复制链接地址`按钮,复制到剪贴板,也可以自己下载后上传到服务器  然后连接到你的服务器终端,找一个目录,我这里找的是 `/server/data/packages`目录,你可以自己建立目录 然后执行命令: ```shell wget https://nginx.org/download/nginx-1.25.3.tar.gz ``` 之后等待一小会,下载到100% 使用 `ll`命令查看这个文件,确实是被下载下来了  然后使用命令解压缩,当然你也可以本地解压然后上传到服务器上来 ```shell tar -xzvf nginx-1.25.3.tar.gz ```  你会看到一堆文件被打印出来,不用管,命令停下来就行, 同样,`ll`命令能看到你的这个 `nginx`的文件夹,这就是 `Nginx`的源码包了  接下来我们进入 `cd`一下源码包,然后准备开始进行编译,同样,`ls`命令能看到源码包内的文件目录  ### 编译安装 #### 第一次预编译报错 这里我们首先创建了 `nginx`的安装目录,用命令: ```shell mkdir /server/nginx/1.25.3 ``` 当然你也可以放在你自己喜欢的位置,注意权限(我这里用的账号不是 `root`账号,注意我命令前面的 `$`符号哦) 然后开始执行预编译命令: ```shell ./configure --prefix=安装目录 --user=用户名 --group=用户组 --with-http_ssl_module --with-http_stub_status_module ``` 这里命令的用户名和用户组两个参数可省略,因为我这里是要指定用户来启动的,对权限要求比较严格,你如果省略,后续再指定也是可以的。  开始预编译之后就等着,然后就出现了一次报错  #### 安装Nginx的相关依赖包 提示出现了 `PCRE`报错,此时就需要安装相关依赖了。 需要使用命令安装(需要有sudo或超管权限) ```shell sudo yum install -y pcre-devel zlib-devel openssl-devel ```  然后出现 `Complete!`标识,就代表已经安装成功了。  #### 第二次预编译 接下来我们重新执行一次预编译命令,就是上面提到的那个 ```shell ./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`执行文件“提权” ```shell setcap cap_net_bind_service=+eip Nginx的可执行文件路径 ``` 注意啊,这里的命令是需要root账号权限来执行的,sudo或者直接切换到root权限均可  ### 启动并测试 接下来我们再用普通账号来执行一次启动,`./nginx`  发现是可以正常启动,没有报错的 在客户端的浏览器上输入 `ip`访问,发现也是能够正常出来 `nginx`的欢迎页面的  这时候我们去查看这个Nginx进程信息,用命令: ```shell ps -aux | grep nginx ```  发现启动的进程信息,也确实不是 `root`启动的 ### 配置便捷操作(可跳过) 使用命令,给可执行文件nginx提供一个全局执行的方式 ```shell sudo ln -s 可执行文件路径 /usr/local/bin/nginx ```  这时候,在全局使用nginx命令,是可行的了! ```shell # 检查nginx配置文件 nginx -t # 修改配置文件后,可重启nginx服务 nginx -s reload # 优雅退出nginx nginx -s quit ```  发现是正常输出,没有任何报错!即配置完成 本文内容已同步到微信公众号,下面是传送门 [微信公众号](https://mp.weixin.qq.com/s?__biz=MzkyODYxOTM4Mw==&mid=2247483676&idx=1&sn=686ba95638ab3027533a331de3e07bcb&chksm=c2174f04f560c6127a2b7a59376a9c4db3940c407f4fb1a65656f1fdb0ff246feeecddb3bffd#rd) 欢迎关注拓行公众号,分享各种技术博客文章拓行——奋勇进取,开拓未来,砥砺前行 最后修改:2024 年 04 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~