[学习笔记]在Linux中使用源码编译的方式安装Nginx
准备工作
准备nginx源码包:
http://nginx.org/en/download.html
准备相关的依赖包以及环境:
gzip 模块需要 zlib 库 http://www.zlib.net/rewrite
模块需要 pcre 库http://www.pcre.org/
若开启ssl 功能则需要 openssl 库https://www.openssl.org/source/
如果没有安装gcc-c++,需要安装它,运行如下命令:
yum install gcc-c++

安装完成:

用上传工具将安装包拷贝到Home的任意目录下

将这几个文件拷贝至/usr目录下:
sudo cp openssl-3.0.2.tar.gz /usr/
sudo cp pcre-8.45.tar.gz /usr/
sudo cp zlib-1.2.11.tar.gz /usr/
sudo cp nginx-1.20.2.tar.gz /usr/

安装openssl-3.0.2:
回到/usr目录下运行:
sudo tar -zxvf openssl-3.0.2.tar.gz
cd openssl-3.0.2
sudo ./config
sudo make && make install

如果出现 Can't locate IPC/Cmd.pm 这样的错误如下图

则根据这篇文章安装相关模块
安装pcre-8.45:
回到/usr目录下运行:
sudo tar -zxvf pcre-8.45.tar.gz
cd pcre-8.45
sudo ./configure
sudo make && make install

安装zlib-1.2.11:
回到/usr目录下运行:
sudo tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure
sudo make && make install

安装nginx
回到/usr目录下运行:
sudo tar zxvf nginx-1.20.2.tar.gz
cd nginx-1.8.0
sudo ./configure

configure的时候会验证安装环境,若依赖包环境安装不全则可能出现如下错误

通过所有检测:

运行:
sudo make && make install

等待编译完成,运行whereis查看nginx安装目录:

运行下面语句,将执行二进制软链接到/usr/sbin/nginx目录下:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

安装成功

将nginx写入系统服务
运行下面语句在 /usr/lib/systemd/system/目录下建立服务描述文件nginx.service:
vi /usr/lib/systemd/system/nginx.service

输入下面内容并保存
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target

运行如下命令,重新加载配置文件和.service文件:
sudo systemctl daemon-reload


可以看到 服务已经被加载进来了
之后就可以启用服务或者添加到启动项了
sudo systemctl start nginx.service

sudo systemctl enable nginx.service

最后一步别忘了开启防火墙80端口的访问:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

成功启动:

Troubleshooting
1. 如果端口被占用,则无法运行nginx,默认nginx是通过80端口访问的,所以需要排查端口占用的程序:
netstat -tunlp

2. 如果systemd有报错,可以通过如下命令查看
sudo journalctl -fu nginx.service

3. 默认情况下日志记录在syslog,如果看报错详细,可以通过如下命令查看
sudo cat /var/log/messages

4. 如果有类似Can't open PID file /run/nginx.pid 这样的报错,需要修改nginx.service 中pid文件的路径为实际pid的路径,具体路径在nginx.conf中查看:

运行下面命令:
sudo vi /usr/lib/systemd/system/nginx.service

将ExecStartPre与PIDFile项改为如下:
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
PIDFile=/usr/local/nginx/logs/nginx.pid

全文完
[学习笔记]在Linux中使用源码编译的方式安装Nginx的更多相关文章
- 在CentOS上以源码编译的方式安装Greenplum数据库
集群组成: 一台主机,一台从节点. 系统环境: 操作系统:CentOS 7,64位,7.4.1708(/etc/redhat-release中查看) CPU:AMD Fx-8300 8核 内存:8GB ...
- 以源码编译的方式安装PHP与php-fpm
首先是最基本的下载,解压,编译安装(以PHP 5.3.6 为例): wget http://www.php.net/get/php-5.3.6.tar.gz/from/this/mirrortar x ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- Linux环境PostgreSQL源码编译安装
Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...
- LNMP架构的源码编译以及yum安装
LNMP架构的源码编译以及yum安装 目录 LNMP架构的源码编译以及yum安装 一.LNMP架构的编译安装 1. 安装nginx服务 (1)关闭防火墙 (2)安装依赖包 (3)创建运行用户 (4)编 ...
- Linux 安装node.js ---- 源码编译的方式
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...
- linux中的源码安装
前两天自己在笔记本上装了CentOs版本的虚拟机,接着要装Python3,是源码安装的挺费劲,个人总结了一些源码安装的经验,今天在这里给大家分享一下. 1. 首先准备环境,安装必要的编译工具gcc g ...
- SpringCloud源码学习笔记3——Nacos服务注册源码分析
系列文章目录和关于我 一丶基本概念&Nacos架构 1.为什么需要注册中心 实现服务治理.服务动态扩容,以及调用时能有负载均衡的效果. 如果我们将服务提供方的ip地址配置在服务消费方的配置文件 ...
- [shiro学习笔记]第四节 使用源码生成Shiro的CHM格式的API文档
版本号为1.2.3的shiro API chm个事故文档生成. 获取shiro源码 编译生成API文档 转换成chm格式 API 获取shiro源码 shiro官网: http://shiro.apa ...
随机推荐
- FileReader读取文件(文本和图片)
1.读取文本 let file = input_file.files[0] let fr = new FileReader(); fr.readAsText(file,'gb2312'); //设置文 ...
- Docker从认识到实践再到底层原理(三)|Docker在Centos7环境下的安装和配置
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- 程序设计实验第一学期期末考试复习用源代码【C语言深度解剖】【超详细注释】
有关此篇 在这里博主先告诉大家,博主在学校学的C语言课本是<谭浩强的C语言>那这本红色的书. 博主到期末阶段是学到了结构体那一章,下面是博主的复习代码,是一些比较有编程思想的一些源代码,博 ...
- 音频处理实用AI工具
最近在做音频处理相关的工作,主要有以下几个好用的工具. 1. 语音转文字--whisper 这是一款由OpenAI开发的语音转文字工具,项目地址位于:openai/whisper. 这个工具是用来生成 ...
- Flink-启动后无法访问WebUI界面(Flink1.16)
问题描述 通过./bin/start-cluster.sh启动Flink程序,正常启动后无法通过浏览器访问web UI界面,http://192.168.80.133:8081. 问题原因 Flink ...
- python高级用法之命名元组namedtuple
1.tuple类型数据的获取 大家都知道,元组里面的数据获取只能通过下标的方式去获取,比如 :a = ('username', 'age', 'phone'),要获取username的话 ,就需要用a ...
- select * 的使用说明
一. SELECT * 的含义 select * 语句是从指定的表中按照顺序返回所有列. 二. SELECT * 的优缺点 1 优点 在实际开发过程中,大家习惯性地使用select * from ...
- 浅谈 2-SAT
SAT 是适定性(Satisfiability)问题的简称.一般形式为 k - 适定性问题,简称 k-SAT.而当 \(k>2\) 时该问题为 NP 完全的.所以我们只研究 \(k=2\) 的情 ...
- 2023牛客暑期多校训练营6 ABCEG
比赛链接 A 题解 方法一 知识点:并查集,树形dp,背包dp. 因为需要路径中的最大值,因此考虑按边权从小到大加入图中,保证通过这条边产生贡献的点对已经全部出现. 在加边的同时进行树上背包,答案存在 ...
- java 从零开始手写 redis(五)过期策略的另一种实现思路
前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...