Rocky Linux 9.x 从零安装 Nginx 全流程:源码编译 + dnf 安装方案详解
ahcoder 2025-07-02 17:40 4 浏览
0.前言
本文目标,安装nginx提供http访问git仓库。关于这篇只是再续,还有续集...
以下安装主要的过程都是在root用户下进行,如果是非root用户,请使用sudo获取root权限执行命令。
1.安装编译依赖
安装全部依赖,如下:
sudo dnf install -y \
gcc gcc-c++ make \ # C/C++编译器和构建工具
openssl-devel pcre-devel zlib-devel \ # 分别支持SSL、正则表达式和压缩功能
redhat-rpm-config \ # 提供RHEL系统的安全编译参数(如RELRO、PIE)
wget tar \ # 用于下载和解压Nginx源码
fcgiwrap # 运行Git HTTP后端(git-http-backend)的FastCGI包装器,起到nginx和git的桥梁作用
先查看有没有安装这些依赖,再调整,前面我已经安装升级了openssl和git,所以简化以上命令为:
sudo dnf install -y redhat-rpm-config fcgiwrap
错误原因:Rocky Linux 9 的默认仓库中没有 fcgiwrap 包。这是Rock Linux的软件包策略发生了变化有关, 启用 EPEL (Extra Packages for Enterprise Linux) 仓库。
sudo dnf install epel-release
再运行依赖安装命令
2.下载Nginx安装包
创建源码目录
sudo mkdir -p /usr/local/src/nginx
cd /usr/local/src/nginx
下载源码
sudo wget https://nginx.org/download/nginx-1.24.0.tar.gz
3.解压
当前源码目录解压:
sudo tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
4.创建安装目录
sudo mkdir -p /u01/nginx
sudo chmod -R 755 /u01/nginx # 设置权限
5.配置编译参数
命令解释:
sudo ./configure \
--prefix=/u01/nginx \ # 指定Nginx安装路径
--with-http_ssl_module \ # 启用HTTPS支持(必需,保护Git通信安全)
--with-http_v2_module \ # 启用HTTP/2协议(提升传输效率,减少延迟)
--with-http_gzip_static_module \ # 启用预压缩文件支持(加速静态资源传输)
--with-http_realip_module \ # 启用真实IP获取(用于反向代理环境,获取客户端原始IP)
--with-pcre \ # 启用PCRE正则表达式支持(用于URL重写和匹配,Git路径解析必需)
--with-stream \ # 启用TCP/UDP代理模块(可用于代理Git的SSH协议,如需要)
--with-stream_ssl_module \ # 启用流模块的SSL支持(用于加密TCP/UDP流量)
--with-threads \ # 启用线程池支持(提升并发处理能力,特别适合IO密集型的Git服务)
--with-http_auth_request_module \ # 启用认证请求模块(用于高级认证,如OAuth、LDAP等外部认证服务)
--with-http_flv_module \ # 启用FLV流媒体模块(可选,用于视频播放,Git服务可能不需要,但保留灵活性)
--with-http_mp4_module \ # 启用MP4流媒体模块(可选,用于视频播放,Git服务可能不需要,但保留灵活性)
--with-http_sub_module \ # 启用内容替换模块(可用于自定义Git Web界面,替换页面元素)
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' # 优化编译参数(提升性能和安全性)
运行一下命令:
cd nginx-1.24.0
sudo ./configure --prefix=/u01/nginx --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --with-stream --with-stream_ssl_module --with-threads --with-http_auth_request_module --with-http_flv_module --with-http_mp4_module --with-http_sub_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
6.编译安装并验证和启动
编译:
sudo make
安装
sudo make install
安装的操作就是拷贝到指定路径咯!
验证,全路径测试安装是否成功
/u01/nginx/sbin/nginx -v
启动
全路径启动
/u01/nginx/sbin/nginx
浏览器可以访问到,说明已经启动成功
如果浏览器访问不到,就查看以下80端口是否开放,
firewall-cmd --list-ports // 端口列表
firewall-cmd --query-port=80/tcp // 指定端口查看
开放端口,重启防火墙
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
7.配置环境变量
sudo tee /etc/profile.d/nginx.sh << 'EOF'
export PATH="/u01/nginx/sbin:$PATH"
EOF
source /etc/profile.d/nginx.sh
系统启动,或用户通过ssh登录就会加载脚本。
配置环境变量,有利于手动启动,启动不写全路径。
8. 开机启动
创建文件
touch /etc/systemd/system/nginx.service
写入内容:
[Unit]
Description=The NGINX HTTP Server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/u01/nginx/logs/nginx.pid
ExecStartPre=/u01/nginx/sbin/nginx -t
ExecStart=/u01/nginx/sbin/nginx
ExecReload=/u01/nginx/sbin/nginx -s reload
ExecStop=/u01/nginx/sbin/nginx -s stop
ExecQuit=/u01/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重载systemd管理器配置
systemctl daemon-reload
创建Nginx服务
systemctl enable nginx
启动服务、查看服务状态
# 立即启动Nginx
systemctl start nginx
# 验证服务状态
systemctl status nginx
# 重启启动Nginx
systemctl restart nginx
重启系统验证是否自动启动nginx
9.加强权限提高安全性(适合生产优化)
这一步很重要,是考虑到了系统被攻击等安全性,而加的一个重要步骤。
查询nginx进程情况
ps -ef | grep nginx
两个进程,一个是主进程master process,另一个是工作进程worker process,主进程由root用户运行,而工作进程由,nobody 用户运行。
nobody用户权限极低,专门用来运行无需高权限的服务或进程,这样即便服务有漏洞被攻击,因 nobody 能访问的资源极少,能把对系统的破坏范围 “锁死”。Nginx 用 nobody 运行工作进程,就算进程被入侵,攻击者也拿不到系统高权限(如 root )。那么我们有一个问题:
那么Nginx工作进程(worker process)已经使用nobody用户运行,那还有必要创建Nginx用户去运行工作进程吗?
答案是:有必要。
因为nobody 是共享低权用户,是系统默认创建的用户,nobody用户有可能也运行其他服务和进程,如果nobody被攻破,就会扩大破坏范围,因此,我们使用Nginx专属用户隔离,创建专属隔离。
创建Nginx专属用户:
sudo useradd --system --shell /sbin/nologin --comment "Nginx Web Server" --user-group --no-create-home nginx
创建的nginx用户特点:
- --system 创建系统用户
- --shell /sbin/nologin 禁止登录
- --comment "Nginx Web Server" 添加注释
- --user-group 创建同名组 nginx
- --no-create-home 不创建家目录
可以查一下,创建是否成功
id nginx
下面是优化过程
9.1. 备份nginx.conf配置文件
cp /u01/nginx/conf/nginx.conf /u01/nginx/conf/nginx.conf.bak
9.2.修改nginx.conf配置
配置运行用户,将以下配置加到nginx.conf 首行。
user nginx nginx;
9.3.修改启动服务文件nginx.service
修改
nano /etc/systemd/system/nginx.service
在[Service]中添加一下片段
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
ProtectSystem=full
ProtectHome=true
修改完后,重新加载
systemctl daemon-reload
9.3.调整 Nginx 目录权限
为了以防万一权限混乱,下面对Nginx目录的权限做备份,运行备份命令:
find /u01/nginx -type f -o -type d -print0 | xargs -0 -I {} bash -c 'stat -c "chown %u:%g %n; chmod %a %n" "{}"' > /u01/nginx_perm_backup.sh
将权限写到nginx_perm_backup.sh文件中,可以查看内容
cat /u01/nginx_perm_backup.sh
chown 0:0 /u01/nginx; chmod 755 /u01/nginx
chown 0:0 /u01/nginx/sbin; chmod 755 /u01/nginx/sbin
chown 0:0 /u01/nginx/conf; chmod 755 /u01/nginx/conf
chown 0:0 /u01/nginx/logs; chmod 755 /u01/nginx/logs
chown 0:0 /u01/nginx/html; chmod 755 /u01/nginx/html
chown 65534:0 /u01/nginx/client_body_temp; chmod 700 /u01/nginx/client_body_temp
chown 65534:0 /u01/nginx/proxy_temp; chmod 700 /u01/nginx/proxy_temp
chown 65534:0 /u01/nginx/fastcgi_temp; chmod 700 /u01/nginx/fastcgi_temp
chown 65534:0 /u01/nginx/uwsgi_temp; chmod 700 /u01/nginx/uwsgi_temp
chown 65534:0 /u01/nginx/scgi_temp; chmod 700 /u01/nginx/scgi_temp
恢复权限使用命令
bash /u01/nginx_perm_backup.sh
还有一种备份方式,高级备份
getfacl -R /u01/nginx > /u01/nginx_perm_backup.acl
恢复使用
setfacl --restore=/u01/nginx_perm_backup.acl
保存了以上权限。
下面开始改权限:
核心原则:最小权限!
比如:
主目录 /u01/nginx 保持 root:nginx ownership,权限 750(root 可操作,nginx 组只读 / 执行,其他用户无权限);
配置目录 conf 设为 root:nginx,权限 750(nginx 组能读配置,但不能修改);
日志目录 logs、临时目录 temp、网页目录 html 设为 nginx:nginx,权限 750/755(nginx 用户可读写日志、生成临时文件、提供网页内容)。
我目录 /u01/nginx的目录如下:
# 递归设置Nginx主目录权限给nginx用户组
chown -R root:nginx /u01/nginx
# 设置配置文件目录权限
chmod -R 750 /u01/nginx/conf
chmod 640 /u01/nginx/conf/nginx.conf
# 设置日志目录权限
chown -R nginx:nginx /u01/nginx/logs
chmod -R 750 /u01/nginx/logs
# 设置临时文件目录权限(若有)
chown -R nginx:nginx /u01/nginx/client_body_temp
chmod -R 750 /u01/nginx/client_body_temp
chown -R nginx:nginx /u01/nginx/fastcgi_temp
chmod -R 750 /u01/nginx/fastcgi_temp
chown -R nginx:nginx /u01/nginx/proxy_temp
chmod -R 750 /u01/nginx/proxy_temp
chown -R nginx:nginx /u01/nginx/scgi_temp
chmod -R 750 /u01/nginx/scgi_temp
chown -R nginx:nginx /u01/nginx/uwsgi_temp
chmod -R 750 /u01/nginx/uwsgi_temp
# 设置HTML目录权限(根据实际情况调整)
chown -R nginx:nginx /u01/nginx/html
chmod -R 755 /u01/nginx/html
验证
su -s /bin/bash -c "touch /u01/nginx/logs/test.log" nginx # 测试日志写入
su -s /bin/bash -c "ls /u01/nginx/html" nginx # 测试网页目录访问
// 安装这种方式验证其他目录的nginx用户权限,验证是为了更好的保证正确,不验证也行
9.4.SELinux权限问题
判断系统是否启用了 SELinux(Security-Enhanced Linux ,安全增强型 Linux )
getenforce
- 如果输出 Enforcing,表示 SELinux 处于强制启用状态,会严格依据策略限制访问。
- 如果输出 Permissive,表示 SELinux 已加载策略,但仅记录违规行为,不实际阻止操作 。
- 如果输出 Disabled,表示 SELinux 已被禁用。
# 查看 Nginx 相关的 SELinux 拒绝规则
grep nginx /var/log/audit/audit.log | audit2allow -m nginx_policy
# 生成并加载策略
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_policy
semodule -i nginx_policy.pp
9.5 完成测试
完成以上的配置后,我重启nginx,查看状态
systemctl restart nginx
systemctl status nginx
正常启动,状态正常。
查看进程是不是nginx用户运行了工作进程:
符合预期,主进程由root用户运行,工作进程由nginx用户运行。
完成!
过几天补一篇文章,关于git安装的,之前的git安装我忽略了 openssl-devel包。
相关推荐
- ClickHouse日志平台这样建,分分钟秒掉ELK
-
目前业界的日志生态,最常用的是ELK,其次就是ClickHouse,本文会演示如何使用Vector+ClickHouse来采集Nginx日志并做清洗,最终写入ClickHouse。至...
- nginx打印请求头日志方法-openresty
-
一、前言之前想用nginx打印收到的请求的请求头,但是只找到打印请求体的,没有打印请求头的,感觉原版nginx不支持。建议如果想打印请求头,先换成openresty(本人安装的是openresty-1...
- 文心快码帮你解大厂面试题:如何使用shell找到access log?
-
【大厂面试真题】系列,带你攻克大厂面试真题,秒变offer收割机!今日问题:在8g内存的机器,能否启动一个7G堆大小的java进程?一起看看文心快码BaiduComate给出的答案吧!如果这个问题你...
- Nginx奇技淫巧之:按日期自动生成日志文件
-
时光闹钟app开发者,请关注我,后续分享更精彩!坚持原创,共同进步!前言之前文章:Nginx奇技淫巧之:用户行为埋点数据采集实现,介绍了Nginx获取post请求body参数生成日志文件的方法。当业务...
- Nginx 日志文件详解:监控与诊断利器
-
随着互联网技术的快速发展,Nginx已成为最受欢迎的Web服务器之一,其稳定性、高性能和灵活性备受推崇。Nginx日志文件是Nginx服务器中非常重要的组成部分,对于监控和诊断Web应...
- Nginx从入门到放弃05-访问日志与日志切割
-
设置访问日志当我们访问nginx服务时,nginx会记录日志,nginx日志分两种,一种是访问日志,一种是错误日志,访问日志记录在”access.log”文件中,错误日志记录在”error.log”文...
- nginx系列:常用利用shell统计日志
-
0x01:根据访问IP统计UVUV(UniqueVisitor)独立访客,统计访问某站点的用户数;IP(InternetProtocol)独立IP数,是指独立的浏览了页面的不同IP,即统计不同的I...
- Linux 必须重点监控的 17 个日志文件:运维与安全必备指南
-
在Linux系统的日常运维与安全管理中,日志文件的重要性不言而喻。日志不仅记录着系统运行的点点滴滴,更是排查故障、发现异常、提前预警的第一手证据。作为一名系统管理员、安全工程师,甚至普通开发者,了...
- nginx 常用日志参数(nginx日志详解)
-
Nginx提供了多种日志参数(变量),可以用来记录请求的不同方面。常用日志参数$remote_addr:客户端的IP地址。$remote_user:客户端用户名。$time_local:局部时...
- GoAccess轻量nginx日志分析工具(nginx日志收集方案)
-
什么是GoAccessGoAccess是一款开源、实时,运行在命令行终端下的Web日志分析工具。该工具提供快速、多样的HTTP状态统计。分析结果,可以通过XShell等客户端工具查看,并...
- 后端实践:Nginx日志配置(超详细)(nginx日志配置文件)
-
作者:antwang来源:https://juejin.im/post/5aa09bb3f265da238f121b6c前言Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:...
- Nginx access_log 运行日志查询和配置
-
1.介绍当我们学会Nginx的基本配置之后,可以通过Nginx配置Service代理。管理服务器所有的http和https请求。那么接下来就需要了解Nginx的日志控制,以及相关的文档查看了。你通过...
- Nginx记录用户请求Header到access log
-
为了统计和其它用途,经常有人需要自定义Nginx日志,把http请求中的某个字段记录到日志中,刚好在看lua+nginx的文章,第一想到的是用lua赋值来做,但是想想有点小恶心,于是Google了一番...
- 介绍五款Web服务器日志分析软件(web服务器日志是什么)
-
每个站长必须要看的数据统计表,都是由日志分析软件统计和分析网站情况所得出的。日志分析软件是一种解析Nginx/Apache/IIS/Lighttpd和任何其他Web服务器日志文件的软件...
- Nginx系列:Nginx自带后端健康检查
-
严格说Nginx并没有自带针对负载均衡后端节点的健康检查功能,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令...
- 一周热门
- 最近发表
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- linux 防火墙 (33)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)
- nginx配置 解析 (37)
- nginx 频率限制 (34)