nginx官网
Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
访问 nginx官网: https://nginx.org/en/download.html

nginx官网提供了三个版本,一个是主线版本,更新最快;一种是稳定版,还有以前的旧版本。
提供两种安装包,一种是linux的源码包,需要自己进行编译,另一种是windows的二进制压缩包,可以直接使用。
nginx的编译安装
准备编译环境
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# yum install gcc* # 这里安装了更新的安装包,所以需要使用 --skip-broken 选项跳过,继续安装未安装的包
alinux3-os 779 kB/s | 3.8 kB 00:00
alinux3-updates 1.0 MB/s | 4.1 kB 00:00
alinux3-updates 84 MB/s | 32 MB 00:00
alinux3-module 1.2 MB/s | 4.2 kB 00:00
alinux3-plus 840 kB/s | 3.0 kB 00:00
alinux3-plus 84 MB/s | 30 MB 00:00
alinux3-powertools 772 kB/s | 3.0 kB 00:00
Docker CE Stable - x86_64 144 kB/s | 3.5 kB 00:00
Extra Packages for Enterprise Linux 8 - x86_64 1.0 MB/s | 4.4 kB 00:00
Extra Packages for Enterprise Linux 8 - x86_64 67 MB/s | 14 MB 00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64 817 kB/s | 3.0 kB 00:00
Package gcc-10.2.1-3.8.al8.x86_64 is already installed.
Error: Problem 1: conflicting requests- nothing provides gcc(major) = 8 needed by gcc-go-8.5.0-25.el8.x86_64 from epelProblem 2: conflicting requests- nothing provides gcc(major) = 8 needed by gcc-objc++-8.5.0-25.el8.x86_64 from epelProblem 3: conflicting requests- nothing provides gcc(major) = 8 needed by gcc-objc-8.5.0-25.el8.x86_64 from epel
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# yum install make
Last metadata expiration check: 0:00:08 ago on Wed 19 Mar 2025 09:06:21 PM CST.
Package make-1:4.2.1-11.0.1.al8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@iZuf69dkx8oofy4z2dr2vkZ ~]#
安装依赖
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# yum install -y pcre pcre-devel
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# yum install -y zlib zlib-devel
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# yum install -y openssl openssl-devel
- PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。
- 注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。
- zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。
- OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。
下载源码包
下载nginx并解压解压nginx
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# wget https://nginx.org/download/nginx-1.26.3.tar.gz
--2025-03-19 21:04:23-- https://nginx.org/download/nginx-1.26.3.tar.gz
Resolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2600::6, ...
Connecting to nginx.org (nginx.org)|3.125.197.172|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1260179 (1.2M) [application/octet-stream]
Saving to: ‘nginx-1.26.3.tar.gz’nginx-1.26.3.tar.gz 100%[==========================================================>] 1.20M 252KB/s in 4.9s 2025-03-19 21:04:29 (252 KB/s) - ‘nginx-1.26.3.tar.gz’ saved [1260179/1260179][root@iZuf69dkx8oofy4z2dr2vkZ ~]# tar -zxvf nginx-1.26.3.tar.gz
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# ll
drwxr-xr-x 8 502 games 4096 Feb 5 19:22 nginx-1.26.3
-rw-r--r-- 1 root root 1260179 Feb 5 19:22 nginx-1.26.3.tar.gz
[root@iZuf69dkx8oofy4z2dr2vkZ ~]#
配置编译参数
使用 configure 命令配置编译参数,并生成 makeFile 文件
[root@iZuf69dkx8oofy4z2dr2vkZ ~]# cd nginx-1.26.3/
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# ./configure # 检测你的电脑环境是否支持安装
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# ./configure --help # 查看有哪些选项可以设置
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# ./configure \ # 设置需要的选项
> --prefix=/usr/local/nginx \
> --sbin-path=/usr/local/nginx/sbin/nginx \
> --conf-path=/usr/local/nginx/conf/nginx.conf \
> --error-log-path=/usr/local/nginx/logs/error.log \
> --http-log-path=/usr/local/nginx/logs/access.log \
> --pid-path=/usr/local/nginx/logs/nginx.pid \
> --with-http_stub_status_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module \
> --with-pcre=============省略================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"nginx configuration file: "/usr/local/nginx/conf/nginx.conf"nginx pid file: "/usr/local/nginx/logs/nginx.pid"nginx error log file: "/usr/local/nginx/logs/error.log"nginx http access log file: "/usr/local/nginx/logs/access.log"nginx http client request body temporary files: "client_body_temp"nginx http proxy temporary files: "proxy_temp"nginx http fastcgi temporary files: "fastcgi_temp"nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"
编译并安装
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# make
make -f objs/Makefile
make[1]: Entering directory '/root/nginx-1.26.3'
省略====================
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# make install
省略====================
安装之后,在安装目录生成的文件


启停nginx
启动nginx服务器
进入到Nginx的sbin目录,启动Nginx
[root@iZuf69dkx8oofy4z2dr2vkZ nginx]# cd sbin
[root@iZuf69dkx8oofy4z2dr2vkZ sbin]# ./nginx
[root@iZuf69dkx8oofy4z2dr2vkZ sbin]# ps aux | grep nginx
root 604139 0.0 0.0 8380 800 ? Ss 21:36 0:00 nginx: master process ./nginx
nobody 604140 0.0 0.0 10924 4708 ? S 21:36 0:00 nginx: worker process
root 604142 0.0 0.0 221528 964 pts/0 S+ 21:36 0:00 grep --color=auto nginx
[root@iZuf69dkx8oofy4z2dr2vkZ sbin]# ./nginx -s stop
[root@iZuf69dkx8oofy4z2dr2vkZ sbin]#
./nginx启动nginx./nginx -c /usr/local/nginx/conf/nginx.conf
-c指定加载的nginx配置文件,如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定
启动后查看nginx进程
ps aux|grep nginx

访问nginx
使用浏览器访问nginx服务器的80端口(记得放开80端口),可以看到nginx欢迎页面

关闭nginx
- 方式1,快速停止:
./nginx -s stop
此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
- 方式2,完整停止(建议使用):
./nginx -s quit
此方式停止步骤是待nginx进程处理任务完毕进行停止。
将编译安装nginx交给systemctl来控制
[root@iZuf69dkx8oofy4z2dr2vkZ nginx-1.26.3]# cd /etc/systemd/system/
[root@iZuf69dkx8oofy4z2dr2vkZ system]# vim nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true[Install]
WantedBy=multi-user.target
[root@iZuf69dkx8oofy4z2dr2vkZ system]# systemctl daemon-reload
[root@iZuf69dkx8oofy4z2dr2vkZ system]# systemctl start nginx
[root@iZuf69dkx8oofy4z2dr2vkZ system]# systemctl stop nginx
运行失败:需要检查一下脚本里面语法对不对,特别是-f,-t,-s中间有没有少空格
[root@iZuf69dkx8oofy4z2dr2vkZ system]# systemctl start nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.
[root@iZuf69dkx8oofy4z2dr2vkZ system]#
报错
make阶段报错
第一个错误:
objs/src/core/ngx_murmurhash.o]
原因只复制粘贴了 ./configure \ 后面的全部没有了,导致报错
解决办法,使用完整的 configure 命令创建 makeFile 文件
第二个错误:ngx_murmurhash.o failed

解决办法:找到Makefile文件将 -Werror删除即可
第三个报错:‘struct crypt_data’没有名为‘current_salt’的成员


两种解决办法:把这一行注释掉;或者更换高版本
这里更换为1.16版本 更换之后不报错。。。
安装报错报错:
make: *** 没有规则可制作目标“build”,由“default” 需求。
未安装编译环境和依赖库,安装之后重新生成makefile文件
使用过程中报错:
报错1:open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
编辑配置文件nginx.conf
添加pid /var/run/nginx/nginx.pid;
然后创建 /var/run/nginx/ 目录
然后启动nginx

报错2:启动nginx之后报错:Failed to start SYSV: http service..但是可以正常访问,还有别的告警,忘记截图了。。只有当时复制出来的一点
查看nginx服务状态
systemctl status nginx.serviceFailed to start SYSV: http service..(code=exited, status=1/FAILURE)
重启一下就行了。。
参考
nginx 启动报错 “/var/run/nginx/nginx.pid" failed” 解决方法 - 风止雨歇 - 博客园
Nginx启动异常及解决方案:Failed to start SYSV: NGINX is an HTTP(S) server, HTTP(S) reverse proxy_Java初学者-CSDN博客
yum安装nginx
配置yum源之后,可以直接使用yum命令安装nginx
[root@iZuf69dkx8oofy4z2dr2vkZ system]# yum search nginx # 搜索一下nginx包yum install nginx
查看当前nginx开启了哪些选项
./nginx -v # 查看nginx的版本信息./nginx -V # 查看更加详细的信息,包括开启了哪些编译参数
编译安装和yum安装都可以使用这个方法查看,自己编译安装的nginx,开启的选项少一些,yum安装的,开启的选项多一些。
通过信号指令来控制Nginx进程
- Nginx 可以通过
kill命令发送信号给 Nginx 进程。语法如下:kill -XXX pidXXX:信号名(如QUIT、HUP等)。pid是Nginx的进程号
| 常用的信号 | 作用 |
|---|---|
QUIT |
处理完当前请求后,优雅地关闭 Nginx 进程。 |
HUP |
重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。 |
USR1 |
用于Nginx的日志切换,也就是重新打开一个日志文件,例如每天要生成一个新的日志文件时,可以使用这个信号来控制。 |
USR2 |
平滑升级可执行程序,用于升级 Nginx 二进制文件。 |
WINCH |
从容关闭工作进程,通常与 USR2 信号配合使用,用于升级 Nginx。 |
- 要不间断服务地重新启动Nginx:可以通过发送
HUP信号来实现平滑重启:kill -HUP `cat /usr/local/nginx/logs/nginx.pid`HUP信号会让 Nginx 重新加载配置文件,并启动新的工作进程,同时优雅地关闭旧的工作进程,确保服务不中断。