[学习笔记]在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 ...
随机推荐
- tensorflow语法【tf.gather_nd、reduce_sum、collections.deque 、numpy.random.seed()、tf.gradients()】
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- C++ Boost 函数与回调应用
#include <iostream> #include <string> #include <boost\bind.hpp> using namespace st ...
- 从嘉手札<2024-1-29>
补一下以前的几篇日记 2018-4-6 当一个人不在纠结没有什么 而是开始珍视他所拥有的一切的时候 才算得上真正的成熟 个人的意志 不能因受到社会的压力而软弱 也不能受到自然的压力而萎缩 而应当如冬日 ...
- 国产数据库TiDB初体验:简单易用,快速上手
最近开始关注国产数据库的发展,为了能从技术人员的角度来实际体验国产中目前最流行的TiDB数据库,从今天起,在官方公布的课程开始正面了解TiDB的设计理念. 看了2小时的入门课程介绍,总体来说,还是有不 ...
- Flink-启动后无法访问WebUI界面(Flink1.16)
问题描述 通过./bin/start-cluster.sh启动Flink程序,正常启动后无法通过浏览器访问web UI界面,http://192.168.80.133:8081. 问题原因 Flink ...
- 浅谈 2-SAT
SAT 是适定性(Satisfiability)问题的简称.一般形式为 k - 适定性问题,简称 k-SAT.而当 \(k>2\) 时该问题为 NP 完全的.所以我们只研究 \(k=2\) 的情 ...
- 从零开始的react入门教程(二),从react组件说到props/state的联系与区别
壹 ❀ 引 在从零开始的react入门教程(一)一文中,我们搭建了第一个属于自己的react应用,并简单学习了jsx语法.jsx写法上与dom标签高度一致,当然我们也知道,本质上这些react元素都是 ...
- 基于OpenTelemetry实现Java微服务调用链跟踪
本文分享自华为云社区<基于OpenTelemetry实现Java微服务调用链跟踪>,作者: 可以交个朋友. 一 背景 随着业务的发展,所有的系统都会走向微服务化体系,微服务进行拆分后,服务 ...
- Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货 Sora是一个以视频生成为核心的多能力模型,具备以下能力: 文/图生成视频 视频生成视频 1分钟超长高质量视频生成 视频裂变多视 ...
- Java 根据Map的值对 List<Map<String, Object>> 进行排序
对 List<Map<String, Object>> 类型数据的排序 有一个Map列表, 需要对这个列表, 按Map的某几个value进行排序, 并且还要分别指定正序或者倒序 ...