从零开始编译安装Nginx:详细步骤与实战配置(附避坑指南)——基于CentOS 7的保姆级教程

news/2025/4/2 12:15:34/文章来源:https://www.cnblogs.com/Slxc/p/18803323

image

一、为什么需要创建专用Nginx用户?

在Linux系统中,为服务创建独立的运行用户是安全最佳实践。Nginx默认以nobody用户运行,但通过创建专用用户nginx,可以限制其权限,防止潜在的安全漏洞影响系统其他部分。

操作步骤:

# 创建不可登录的nginx用户(-M不创建家目录,-s指定不可登录的Shell)
useradd nginx -s /sbin/nologin -M

二、安装前的依赖准备

Nginx编译依赖多个开发库,缺一不可。以下是核心依赖包的作用:

  • pcre-devel:正则表达式支持(用于URL重写)
  • openssl-devel:启用HTTPS协议(SSL/TLS加密)
  • zlib-devel:Gzip压缩功能

一键安装依赖:

yum -y install openssl openssl-devel pcre-devel zlib-devel

注:若缺少依赖,编译时会报错提示缺少的库文件。


三、源码编译与安装

  1. 解压源码包
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
  1. 配置编译参数(关键!)
./configure \
--prefix=/usr/local/nginx \        # 安装目录
--user=nginx \                     # 运行用户
--group=nginx \                    # 运行组
--with-http_ssl_module \           # 启用HTTPS
--with-stream \                    # TCP/UDP反向代理
--with-mail \                      # 邮件代理支持
--with-mail_ssl_module             # 邮件SSL加密

参数解读

  • --with-stream:允许Nginx代理TCP/UDP协议(如数据库连接)
  • --with-http_ssl_module:必须启用,否则无法配置SSL证书
  1. 编译并安装
make && make install

编译时间约1-3分钟,若出现make: *** No targets specified.错误,说明configure配置失败,需检查依赖是否完整。


四、安装后验证与启动

  1. 检查安装目录
ls /usr/local/nginx/
# 输出应有conf(配置)、html(网页)、logs(日志)、sbin(可执行文件)
  1. 启动Nginx
/usr/local/nginx/sbin/nginx
  1. 验证服务状态
ps -ef | grep nginx
# 应看到1个master进程和多个worker进程
curl http://localhost
# 若返回Welcome to nginx!则成功

五、高级配置技巧

  1. 开机自启动(Systemd服务)
    创建/usr/lib/systemd/system/nginx.service文件:
[Unit]
Description=nginx service
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target

执行:

systemctl daemon-reload
systemctl enable nginx
  1. 配置文件语法检查
/usr/local/nginx/sbin/nginx -t
# 输出应为"successful"(避免配置错误导致服务崩溃)

六、常见问题解决

  • 端口占用:若80端口被占用,修改/usr/local/nginx/conf/nginx.conf中的listen端口号。
  • 权限问题:确保/usr/local/nginx目录属于nginx用户:
chown -R nginx:nginx /usr/local/nginx
  • 模块遗漏:若需新增模块(如HTTP/2),需重新configure并编译,不可直接覆盖安装。

七、为什么推荐源码安装?

  1. 灵活性:可自定义模块(如第三方模块ngx_lua
  2. 性能优化:针对服务器CPU架构优化编译参数
  3. 版本控制:自由选择稳定版或尝鲜新特性

参考文档

  • Nginx官方编译指南
  • CentOS 7系统权限管理最佳实践

原创声明:转载请保留原文链接,禁止用于商业用途。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908902.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.31 格林公式及其应用

1.1 类比 一元函数的积分可以通过两个边界的函数表示 二元函数的积分就可以通过曲线的积分表示1.2 例题例题2(不完全封闭的写法

ArkTs的@Watch状态监听

@Watch装饰器:监听并捕捉变量变化@Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。@Watch在ArkUI框架内部判断数值有无更新使用的是严格相等(===),监听并捕捉变量变化。 前端同学以Vue中的Watch监听为嵌入点更好理解。 装饰器说明装饰器参数: …

@Resource 和 @Autowired 的区别

@Autowired 和 @Resource 都用于在 Spring 中进行依赖注入,但在来源、注入方式、支持的参数和用法上存在一些差异。​1、来源不同@Autowired:​Spring 自身提供的注解,位于 org.springframework.beans.factory.annotation 包中。​ @Resource:​Java标准中的注解,位于 jav…

harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)

大家好!我是黑臂麒麟,一位6年的前端;if youre change the world, youre workingon important things. youre excited to get up in the norning.一、常用基础组件 1.基础组件 简单列举常用的及含义,掌握了以下按钮可以解决日常简单场景需求。其他在使用时查询ArkTS的API文…

ai出错、不严谨的体验

一、例子1 用一个包含80多名学生成绩的PDF文件,让ai对学生成绩进行加减乘除的计算(保留两位小数),计算结果降序排列。结果部分学生的结果计算错误(最大差距有3分左右),部分学生的结果是正确的 我不知道是不是因为涉及到除法导致部分结果出错,我用了元宝deeepseek和豆包…

第5章 编写异步代码

第5章 编写异步代码 5.1 异步函数简介 C# 5 引入了异步函数的概念。异步函数可以指某个由 async 修饰符修饰的方法或者匿名函数,它可以对 await 表达式使用 await 运算符。 5.2 对异步模式的思考 5.2.1 关于异步执行本质的思考 await 在 C#中的任务本质上是请求编译器为我们创…

Spring Cloud Gateway 与 Knife4j 集成实践

注意:写于 2025/1/10,未来时间可能失效,请根据具体情况实践。在微服务架构中,Gateway 通常承担着路由转发、负载均衡、鉴权等职责,而 Knife4j 是一个集 Swagger2 和 OpenAPI3 为一体的增强解决方案,可以帮助开发者快速聚合使用OpenAPI 规范。 本文参考 Knife4j 文档,进行…

用户说:10分钟用通义灵码搞定“今天穿什么”!打开爽文世界……

当我仅用10分钟调教出一个会关心我穿不穿秋裤的管家时,突然想到,现在限制我们开发的已经不是编程能力,而在于你有没有把你的想象力塞进代码框!作者:ZLJ,浙江大学教育技术学研究生 当我仅用10分钟调教出一个会关心我穿不穿秋裤的管家时,突然想到,现在限制我们开发的已经…

Cyber Apocalypse 2025 forensics WP

Cyber Apocalypse 2025 forensics WPCyber Apocalypse 2025 WP 做了国际赛之后虽然(目前只做了两道,可是没环境了啊,前几天比赛有点多~www),只从取证这边说,感觉他们的题很有趣,情境也给的很真实连贯,出题灵活,就是能见到很多新兴的知识,拓展知识面,以后会多看一看…

python第六周作业(第四章课后程序练习题)

4.1 import random def guess_number(): target = random.randint(1, 100) count = 0 while True:guess = int(input("请输入你猜的数字(1-100): "))count += 1if guess < target:print("猜小了")elif guess > target:print("猜大了")else…

win安装oracle19c没有listener

然后就可以看到启动了本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/18803159

《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》

章节 6:日期选择器与日期处理目标学习如何使用DatePicker组件。 理解日期格式化和日期计算。内容日期选择器基础使用DatePicker组件。 处理日期选择事件。日期格式化格式化日期为友好的文本。日期计算判断日期是否过期或即将到期。代码示例 @Entry @Component struct DatePick…