当前位置: 首页 > news >正文

16-源码安装nginx实战(CentOS7)

源码安装Nginx实战(CentOS7)

前言

在Linux中,安装Nginx主要有4种主流方式,每种方式都有其优缺点和适用场景:

安装方式对比

安装方式命令示例优点缺点适用场景
1. 包管理器安装yum install nginxapt install nginx最简单、自动管理依赖、易于升级版本可能较旧、配置非标准快速部署、新手入门
2. 源码编译安装./configuremakemake install完全可控、可自定义模块、最新版本复杂、需手动管理依赖生产环境定制、开发调试
3. 官方预编译包下载.rpm/.deb安装官方维护、版本较新需手动下载、依赖处理需要较新版本
4. Docker 容器docker run nginx环境隔离、一键部署需额外学习Docker容器化部署、微服务

在这里,我将进行源码编译安装Nginx。


一、准备工作

1. CentOS7的YUM镜像源配置

# 阿里镜像源地址:https://mirrors.aliyun.com/centos/7.9.2009/# 备份mkdir/etc/yum.repos.d/bakmv/etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/# 下载镜像源配置curl-o/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 更新yum缓存,验证安装yum clean all&&yum makecache yuminstall-yvim

二、源码编译安装步骤

1. 下载源码包

使用wget命令下载:

# 下载稳定版的Nginx源码包wgethttp://nginx.org/download/nginx-1.25.3.tar.gz

2. 安装依赖

yum-yinstallgcc pcre-devel zlib-devel openssl-devel

3. 解压源码包

依赖安装完成后,解压:

tar-zxvfnginx-1.25.3.tar.gz

查看:

[root@localhost installation_package]# ls nginx-1.25.3 nginx-1.25.3.tar.gz

4. 进入解压目录

cdnginx-1.25.3/# 通过ls命令可以查看到[root@localhost nginx-1.25.3]# lsauto CHANGES CHANGES.ru conf configure contrib html LICENSEmanREADME src# 其中configure是一个安装命令

通过ls -l命令,可以查看到它是有执行权限的:

[root@localhost nginx-1.25.3]# ls -l total 824 drwxr-xr-x. 6 1001 1001 4096 Mar 16 23:38 auto -rw-r--r--. 1 1001 1001 325032 Oct 24 2023 CHANGES -rw-r--r--. 1 1001 1001 497029 Oct 24 2023 CHANGES.ru drwxr-xr-x. 2 1001 1001 168 Mar 16 23:38 conf -rwxr-xr-x. 1 1001 1001 2611 Oct 24 2023 configure # 安装命令 drwxr-xr-x. 4 1001 1001 72 Mar 16 23:38 contrib drwxr-xr-x. 2 1001 1001 40 Mar 16 23:38 html -rw-r--r--. 1 1001 1001 1397 Oct 24 2023 LICENSE drwxr-xr-x. 2 1001 1001 21 Mar 16 23:38 man -rw-r--r--. 1 1001 1001 49 Oct 24 2023 README drwxr-xr-x. 9 1001 1001 91 Mar 16 23:38 src

5. 配置安装目录

通过configure命令进行安装,指定安装目录:

# 创建目录mkdir/opt/nginx# 执行命令安装并指定安装目录./configure--prefix=/opt/nginx

安装完成后,进行查看ls /opt/nginx,可以看到当前并无输出,这是因为使用./configure并且指定安装目录,只是现在正在配置当中,写入到配置文件里面,还未完完全全的去安装。


6. 编译源码

使用make命令,才会进行一个源码的编译。等待编译完成,再用源码安装一遍。

make

7. 安装Nginx

使用make install命令,进行源码安装。

makeinstall

再次使用ls /opt/nginx,可以查看到已经有文件了。

输出:

[root@localhost nginx-1.25.3]# ls /opt/nginx conf html logs sbin

三、启动和验证

1. 启动Nginx

# 使用命令启动/opt/nginx/sbin/nginx# 查看进程ps-ef|grepnginx

输出:

[root@localhost nginx-1.25.3]# ps -ef | grep nginx root 73711 1 0 23:54 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginx nobody 73712 73711 0 23:54 ? 00:00:00 nginx: worker process root 73714 70758 0 23:54 pts/2 00:00:00 grep --color=auto nginx # 可以看到nginx的进程PID

2. 验证Nginx是否正常启动

使用curl命令,查看nginx是否正常启动:

# 可以使用当前ip地址curl127.0.0.1

输出:

[root@localhost nginx-1.25.3]# curl 127.0.0.1 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> # 启动成功

3. 检查配置文件

# 使用nginx -t命令查看nginx的配置文件是否成功,配置文件格式是否ok/opt/nginx/sbin/nginx-t

输出:

[root@localhost nginx-1.25.3]# /opt/nginx/sbin/nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful

四、配置命令快捷方式

方法1:创建软链接

想直接使用nginx -t的形式查看,会提示:

[root@localhost nginx-1.25.3]# nginx -t bash: nginx: command not found...

找不到该命令,可以创建一个软链接:

# 放到/usr/local/sbin目录下ln/opt/nginx/sbin/nginx /usr/local/sbin/nginx

这时候使用nginx -t就可以查看成功了。


方法2:设置环境变量

除了使用软链接这个方式,还有一种设置变量的方式。

# 先删除软链接rm/usr/local/sbin/nginx# 编辑配置文件vim.bashrc# 在底部添加一个export,添加一个全局变量exportPATH=$PATH:/opt/nginx/sbin# 添加好后,通过source更新下配置,即可直接使用source.bashrc# 再次执行nginx -t,可以看到有输出

脚本文件内容:

# .bashrc# User specific aliases and functionsaliasrm='rm -i'aliascp='cp -i'aliasmv='mv -i'# Source global definitionsif[-f/etc/bashrc];then./etc/bashrcfiexportPATH=$PATH:/opt/nginx/sbin

五、问题排查与解决

问题:为什么curl 127.0.0.1可以成功,使用IP地址在浏览器中访问却不行?

原因1:Nginx监听地址问题

Nginx默认只监听127.0.0.1(本地回环)或0.0.0.0

你执行curl 127.0.0.1成功,说明Nginx正在运行,但可能只绑定了127.0.0.1,没有绑定0.0.0.0或你的网卡IP192.168.157.130

正确行为:Nginx应该监听0.0.0.0:80(所有网卡),才能让外部访问。

检查Nginx监听地址
# 使用命令ss-tlnp|grep:80

情况1:我的输出

[root@localhost ~]# ss -tlnp | grep :80 LISTEN 0 128 *:80 *:* users:(("nginx",pid=73712,fd=6),("nginx",pid=73711,fd=6))

这里的*:80表示Nginx监听所有网络接口(0.0.0.0:80),这排除了监听地址的问题。Nginx监听地址没问题,下一步查看防火墙问题。

情况2:若看到类似于:

tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 1234/nginx

那就只能本机访问,外部无法连接!

解决方案:修改Nginx配置
# 编辑默认配置文件vi/etc/nginx/nginx.conf# 或vi/etc/nginx/conf.d/default.conf

找到:

server { listen 80; # 或 listen 127.0.0.1:80; ... }

改为:

server { listen 80; # 或者明确监听所有IP # listen 0.0.0.0:80; ... }

注意listen 80;默认就是监听0.0.0.0:80,但有些发行版或配置可能显式写了127.0.0.1

# 最后重启Nginxsystemctl restart nginx# 再次检查监听ss-tlnp|grep:80# 确保是0.0.0.0:80

原因2:防火墙阻止了外部访问(最有可能)

即使Nginx监听了0.0.0.0Linux防火墙(firewalld / iptables)可能阻止了80端口的外部访问

解决步骤
# 查看防火墙状态,是否启用systemctl status firewalld# (如果未启用,使用systemctl start firewalld启动防火墙)# 防火墙启用后,检查80端口是否开放firewall-cmd --list-all

期望输出:

ports: 80/tcp

我的输出:(可以看到ports中并没有端口开放)

[root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client ports: # 无端口开放 protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

如果80端口不在列表中,需要手动添加:

# 开放80端口firewall-cmd --add-port=80/tcp--permanentfirewall-cmd--reload# 验证firewall-cmd --list-all
最后测试

测试本机访问(确认Nginx响应):

# 用curl测试本机IPcurl192.168.157.130

如果返回Nginx欢迎页面,说明Nginx本身正常。

http://www.jsqmd.com/news/532084/

相关文章:

  • MOS管导通条件解析:Vgs决定关键
  • 轻松上手BepInEx插件框架:零基础入门指南
  • MCP采样接口调用流重构预警(仅限首批通过CNCF MCP v2.6认证团队内部披露)
  • ER-Save-Editor:5分钟掌握艾尔登法环存档编辑,打造完美角色Build
  • 【算法精解】堆排序(Heap Sort)原理、实现与深度解析(C++版)
  • 5分钟高效配置:Markdown语法高亮让Notepad++编辑体验飙升
  • 实战指南:如何用STORM系统高效生成学术级研究报告
  • Kubernetes 探针与滚动更新实战:从原理到生产配置
  • 多模态实践:Qwen3-ForcedAligner-0.6B与图像识别联合分析
  • Docker镜像拉取终极指南:无需Docker环境也能轻松获取镜像
  • 实测腾讯 QClaw:3 分钟部署,微信远程操控电脑,打工人狂喜
  • 5大维度掌握Unity语音交互:从技术原理到跨平台落地实践
  • 从Mask R-CNN到SAM:实例分割模型怎么选?我的项目实战经验与避坑指南
  • GBase 8a数据库运维管理系统GDOM核心功能备份恢复介绍
  • SitemapGenerator深度解析:Ruby企业级网站地图生成架构揭秘
  • tao-8k入门必看:零基础部署8K Embedding模型,支持中文长文本向量化
  • 从零到大师:用Awesome Claude Skills打造专业AI设计工作流
  • 计算机毕业设计:基于Python与协同过滤的美食推荐系统 Django框架 可视化 协同过滤推荐算法 菜谱 食品 机器学习(建议收藏)✅
  • Qwen3多风格字幕展示:科技感、简约风、手写体效果对比
  • N10 ARM中断
  • AI也开始“说谎”了?3·15曝光的“投毒”黑产,正在操控你的每一次提问
  • 信创生态下的国产存储技术路径:从CPU到数据库的全链路验证
  • 【MCP连接器接入黄金标准】:基于127个生产环境案例总结的7类典型失败场景与对应诊断命令集
  • Python内存泄漏检测失效?:揭秘CPython 3.11+新增的__tracing__机制与自定义GC钩子实战(含GitHub Star 2.4k工具链深度集成)
  • 哔哩下载姬进阶指南:从高效下载到专业处理的全方位解决方案
  • 3种突破限制的MTK设备控制方案:MTKClient全场景应用指南
  • 杰理之短距离滑动触摸逻辑如下【篇】
  • 像素幻梦创意工坊案例分享:为开源RPG引擎生成全系像素道具图标集
  • 中国典型城市建筑物实例数据集:高精度遥感影像标注与应用指南
  • Android APK安装失败全攻略:从错误代码到机型适配