[学习笔记]在linux中使用源码编译的方式安装nginx

林小 林小     2022-10-20     544

关键词:

使用源码的方式安装nginx,可以加深对linux目录的理解,今天就来放弃yum.. rpm.. dnf.. 这些在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 这样的错误如下图

 则根据这篇文章安装相关模块

(5条消息) 编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC_Sunlight_Rain_的博客-CSDN博客https://blog.csdn.net/sd4493091/article/details/122220902

安装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基础篇

记录我在学习大数据技术过程中的学习笔记目录一、学习目标二、Linux虚拟机的安装配置     a、创建虚拟机、安装centos7(保姆级教程)     b、使用克隆的方式创建Linux虚拟机        c、使用Xshell连接Linux虚拟机三、Linux命... 查看详情

树莓派学习笔记树莓派linux内核开发(代码片段)

文章目录一、树莓派Linux源码配置1、概念2、配置步骤:二、树莓派Linux内核编译1.编译命令2.编译成功显示3.打包zImage成树莓派可用的xxx.img4.把树莓派的SD读卡器插到电脑,映射到ubuntu上:5.数据拷贝(将树莓派的SD... 查看详情

imx6ull学习笔记——安装并使用交叉编译工具链(代码片段)

一、简介本地编译:编译器和目标程序都是相同架构的编译过程。交叉编译:编译器运行在x86架构平台上,编译生成ARM架构的可执行程序,这种编译器和目标程序运行在不同架构的编译过程。1.1编译器类型arm-linux-... 查看详情

imx6ull学习笔记——安装并使用交叉编译工具链(代码片段)

一、简介本地编译:编译器和目标程序都是相同架构的编译过程。交叉编译:编译器运行在x86架构平台上,编译生成ARM架构的可执行程序,这种编译器和目标程序运行在不同架构的编译过程。1.1编译器类型arm-linux-... 查看详情

linux下软件编译安装前提和方式

...要提前安装好什么软件和库之类的啊,才能进行编译安装源码包,再者,是怎样的命令来安装源码包啊??????在linux系统中,如果要用源代码包进行编译安装,就需要用到gcc这个工具,一般安装系统时默认选择都有这个工... 查看详情

linux学习笔记——软件安装(代码片段)

环境变量当我们执行一个命令的时候,默认从当前路径开始查找。如果当前路径找不到对应的命令文件,从环境变量$PATH查找。$PATH的配置文件在/etc/profilewindow路径与路径之间用‘;’(分号)连接Linux路径与路径之... 查看详情

在麒麟linux源码编译安装postgis(代码片段)

...m包安装的,所以即便PostGIS有现成的rpm包,也无法使用(需要引用PG的包)。所以,我们还是采用源码编译的方式。下载PostGIS源码我们选择的版本是3.0.5,如果是不同版本, 查看详情

源码方式安装lrzsz库

...里可以非常方便的上传和下载linux里面的文件;xsehll中直接使用sz/rz命令即可在传输文件.通常的安装方式:yuminstalllrzszsudoapt-getinstalllrzsz 那么当无法用软件包方式安装时;可以直接使用源码方式安装;1.下载tar.gz的源码包:https... 查看详情

瑞芯微rv1126如何配置和编译linux内核学习笔记(代码片段)

1、配置环境./build.shdevice/rockchip/rv1126_rv1109/BoardConfig-aybering.mk2、切换到内核源码目录cdkernel3、配置内核(1)配合内核平台环境makeARCH=armrv1126_defconfig(2)使用菜单的方式配置Linux内核makeARCH 查看详情

linux中centos中httpd源码安装过程详解

...件包安装就是指将编译好的二进制封装成rpm包,可以直接使用rpm工具和yum工具安装。源代码安装是指没有编译成二进制,需要通过手动编译的。使用源代码安装的原因有两个,一个就是想使用最新版的软件,另一类就是想自定义... 查看详情

linux学习记录:记一次手动编译安装组件的过程(代码片段)

linux学习记录:记一次手动编译安装组件的过程  本次安装的组件为ApacheHTTPServer,本篇笔记中记录了全部过程,以供参考。  apache组件的依赖项比较多,所以安装起来会繁杂一点,不过流程都是大同小异... 查看详情

linux学习记录:记一次手动编译安装组件的过程(代码片段)

linux学习记录:记一次手动编译安装组件的过程  本次安装的组件为ApacheHTTPServer,本篇笔记中记录了全部过程,以供参考。  apache组件的依赖项比较多,所以安装起来会繁杂一点,不过流程都是大同小异... 查看详情

linux学习-linux下软件编译安装

由于计算机无法直接执行高级语言编写的源程序,如果需要运行程序,就需要使用一种机制来让计算机识别,这样程序才可能运行起来。一般来说,计算机中存在解释型语言和编译型语言。解释性语言就是计算机逐条取出源码中... 查看详情

瑞芯微rv1126如何配置和编译linux内核学习笔记(代码片段)

1、配置环境./build.shdevice/rockchip/rv1126_rv1109/BoardConfig-aybering.mk2、切换到内核源码目录cdkernel3、配置内核(1)配合内核平台环境makeARCH=armrv1126_defconfig(2)使用菜单的方式配置Linux内核makeARCH=armmenuconfig4、保存配置makeARCH= 查看详情

源码编译安装

...修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。源码包的编译用到了linux系统里的编译器,常 查看详情

c++11thread学习笔记(代码片段)

C++11线程学习笔记C++11中创建线程的方式在c++11中有三种创建线程的方式:函数指针方式函数对象方式Lambda函数创建函数对象之前,首先需要引入线程的头文件,如果你是在linux下VSCode中使用线程,需要在tasks.json文件... 查看详情

jenkins使用学习笔记

Jenkins安装Jenkins是用Java语言开发的系统,首先要确定服务器上已经安装JDK或者JRE。安装方式一直接运行java–jarJenkins.war,在浏览器中输入 http://localhost:8080即可。安装方式二安装Tomcat。添加环境变量JENKINS_HOME,该变量为jenkins... 查看详情

linux驱动开发笔记:ubuntu系统从源码编译安装gcc7.3.0编译器(代码片段)

前言  编译ubuntu驱动之前,发现使用的gcc是7.3.0,而使用apt管理和下载的都无法直接或间接安装gcc7.3.0,于是只能从源码安装gcc7.3.0编译器。 GCC概述  GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷... 查看详情