【Liunx-后端开发软件安装】Liunx安装nginx

【Liunx-后端开发软件安装】Liunx安装nginx
使用安装包安装
一、简介
nginx,这个家伙可不是你厨房里的那位大厨,它可是互联网世界的“煎饼果子摊主”。想象一下,在熙熙攘攘的网络大街上,nginx挥舞着它的锅铲——哦不,是高性能服务器软件,为络绎不绝的客户端提供超快速、稳定的网页服务。这位“煎饼果子师傅”特别擅长处理并发请求,一个煎饼(响应)接一个煎饼地迅速出锅,让每个饥肠辘辘的浏览器都满意而归。

为什么我们要学nginx呢?首先,因为这位“煎饼果子摊主”效率奇高,能同时应对成千上万的顾客(连接),而且对资源吝啬得像葛朗台,占用内存少到令人难以置信。其次,它还是个全能选手,不仅精通静态文件服务,还能干反向代理、负载均衡、缓存加速等一揽子活儿,简直是Web服务器界的瑞士军刀。再者,如果我们的网站是个大型综合体,有前端应用、后端API等各种业务需求,那么nginx就是那个能完美协调各个部门工作的优秀经理人。

所以,掌握nginx就相当于掌握了在互联网高速公路上摆摊儿的艺术,不仅能提升你的技术实力,还能让你在IT江湖中独步天下,成为众多线上流量的秘密武器。而且,现在连百度、腾讯这些“互联网大佬”都在用它来招待亿万级别的访客,你说,我们怎能不学一手这样的好手艺呢?

二、准备工作
1、下载安装包
官网下载地址:http://nginx.org/download/
进入之后找到自己打算安装的版本,下载即可,此处我使用的是1.9.2版本的
在这里插入图片描述
2、安装需要的环境(liunx环境不同,安装命令也不同)

# 对于大部分Linux发行版,安装gcc和一些Nginx需要的库
sudo apt install build-essential zlib1g-dev libpcre3 libpcre3-dev openssl libssl-dev # Ubuntu/Debian
sudo yum install gcc-c++ zlib-devel pcre-devel openssl-devel # CentOS/RHEL# 如果你的系统没有wget,用于下载文件,也请安装它
sudo apt-get install wget # Debian/Ubuntu
sudo yum install wget # CentOS/RHEL

为什么要安装这些环境,解释如下:
(1)gcc-c++:这是GNU C++编译器,用于将源代码编译成可执行文件。安装Nginx时通常需要C/C++编译器来编译从源代码下载的Nginx程序。
(2)zlib-devel:包含了zlib库的开发头文件和链接库,zlib是一个广泛使用的数据压缩库,Nginx使用它来处理HTTP内容编码(如gzip压缩)。
(3)pcre-devel:提供了Perl Compatible Regular Expressions(PCRE)库的开发文件,包括头文件和库文件。Nginx使用PCRE来进行正则表达式匹配,例如在处理HTTP请求的location块、重写规则等地方。
(4)openssl-devel:包含OpenSSL加密库的开发文件。OpenSSL提供了一系列安全相关的功能,比如SSL/TLS协议的支持,这对于搭建支持HTTPS的Nginx服务器是必不可少的。
因此,在安装Nginx之前执行这一步骤是为了确保系统具备编译和构建Nginx所需要的全部依赖环境,特别是当计划从源码编译Nginx时。如果只是通过官方或第三方提供的RPM包安装预编译好的Nginx二进制包,虽然可能不需要gcc-c++进行编译,但仍然需要其他的依赖库(如zlib、pcre和openssl的运行时库)。

三、安装
首先将下载好的文件上传到服务器,我的是上传到/usr/local/soft/,然后进行下面操作
1、解压文件

 tar -zxvf nginx-1.9.2.tar.gz

2、进入nginx目录生成Makefile文件

cd nginx-1.9.2/
./configure当用户运行 ./configure 时,它会:
检查当前系统是否存在必要的编译工具(如GCC)以及依赖库。
根据用户指定的选项或系统默认设置来确定软件的安装路径、功能模块启用/禁用等配置信息。
根据检测结果生成一个或多个Makefile文件,这些文件指导后续的编译器如何编译和链接源代码以产生可执行程序或库文件。

3、修改Makefile配置文件内容

vim objs/Makefile

将CFLAGS后面的 -Werror去掉,因为这个配置的意思是警告会被当作错误处理而中止编译过程,会导致安装失败,所以需要去除。修改成如下配置
在这里插入图片描述
4、修改vim src/os/unix/ngx_user.c,防止报如下错误:

make[1]: *** [objs/Makefile:732: objs/src/os/unix/ngx_user.o] 
Error 1 make[1]: Leaving directory '/usr/local/soft/nginx-1.9.2' make: 
*** [Makefile:8: build] Error 2

之后进入编辑,把里面第36行的进行注释,修改如下:
在这里插入图片描述
对上面报错原因解释如下:
针对错误提示“make: *** [Makefile:8: build] Error 2”,以及与ngx_user.o编译相关的错误,注释掉cd.current_salt[0] = ~salt[0];这一行的原因在于,该行代码在特定版本的Linux内核或glibc库中不适用,因为它引用了struct crypt_data结构体的一个成员(current_salt),而这个成员在某个时间点之后从Linux系统的密码哈希相关头文件中被移除或者不再存在。
在Nginx的部分旧版本源码中,可能尝试对用户密码进行某种特殊的处理,包括使用到crypt(3)函数,并且在调用前修改盐值。然而,随着系统库和API的变化,某些自定义或过时的做法可能会导致编译失败。
因此,在遇到这样的编译错误时,一种解决办法是注释掉这条语句以适应当前环境下的编译需求。不过,更好的做法通常是更新到与当前系统兼容的Nginx版本,或者寻找官方提供的针对特定环境的解决方案。

5、编译和安装

make && make install

对make和make install命令的解释如下:

  • make:这个命令是用来执行Makefile文件中的指令。当你下载了Nginx的源代码,并且配置好相关选项(通过运行./configure [options]生成Makefile文件后),运行make会根据Makefile中的规则来编译源代码。这一步骤将把Nginx的所有C源代码和其他支持文件编译成可执行的目标文件和库文件。
  • make install:该命令同样基于Makefile,但它负责的是将上一步编译好的目标文件、配置文件、帮助文档等按照预定义的方式复制到系统中相应的目录结构下。对于Nginx来说,它会把编译好的nginx二进制文件放到如/usr/local/nginx/sbin这样的目录下,并放置配置文件到指定的位置,以及可能创建必要的系统链接和初始化脚本等,完成最终的安装过程。

总结起来,make && make install就是先编译Nginx源代码,如果编译成功,则继续执行安装步骤,将编译好的Nginx程序部署到系统中适当的位置,以便后续能够启动、停止和配置Nginx服务。
6、启动nginx,安装编译好的nginx默认会在/usr/local/nginx/下面

cd /usr/local/nginx/
cd bin/
# 启动命令
./nginx
# 停止命令
./nginx -s stop
# 重启命令
./nginx -s reload

四、验证是否启动成功
登录机器ip加端口,例如:127.0.0.1:80,默认端口是80,看到如下图表示安装成功
在这里插入图片描述
五、自定义nginx配置
以下给出一份常见配置给大家借鉴使用,实际的配置要根据机器情况和项目情况修改

user root; # 设置Nginx运行的工作用户为root,在生产环境中通常建议使用非特权用户worker_processes auto; # 自动检测CPU核心数并设置相应的工作进程数量worker_rlimit_nofile 65535; # 设置每个工作进程允许的最大文件描述符数,用于处理大量并发连接pid /opt/nginx/nginxServer/logs/nginx.pid; # 指定Nginx主进程ID文件的位置events { # 事件驱动模块配置use epoll; # 使用epoll作为Linux系统上的高效I/O多路复用机制worker_connections 20480; # 每个工作进程允许的最大并发连接数
}http { # HTTP服务器模块配置include mime.types; # 包含MIME类型定义文件,用于响应内容类型识别default_type application/octet-stream; # 默认内容类型为二进制流error_log /opt/nginx/nginxServer/logs/error.log info; # 错误日志文件路径及级别(info)log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'; # 定义自定义日志格式access_log /opt/nginx/nginxServer/logs/access.log main if=$loggable; # 访问日志文件路径及格式,通过$loggable变量控制开关sendfile on; # 开启高效文件传输模式,减少磁盘I/O操作keepalive_timeout 65; # 设置客户端与服务器间的长连接超时时间vhost_traffic_status_zone; # 启用vhost_traffic_status模块,记录虚拟主机流量状态信息vhost_traffic_status_filter_by_host on; # 根据Host过滤显示流量统计gzip on; # 开启gzip压缩功能gzip_min_length 1k; # 压缩最小数据大小阈值gzip_buffers 4 16k; # 分配给压缩缓冲区使用的内存空间gzip_comp_level 2; # 设置压缩级别(1-9),数值越大压缩率越高,CPU占用也可能更高gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 需要启用压缩的内容类型gzip_vary off; # 是否发送Vary: Accept-Encoding头gzip_disable "MSIE [1-6]\."; # 对早期IE浏览器禁用gzip压缩client_max_body_size 2048m; # 设置上传请求体最大允许大小proxy_max_temp_file_size 4096m; # 设置代理缓存临时文件的最大大小upstream XXX_backend { # 定义后端服务集群tradeSysserver 127.0.0.1:9001; # 添加一个后端服务器地址和端口server 127.0.0.1:9002; # 负载的第二个后端服务# 添加其他后端服务器以实现负载均衡}# 防止恶意攻击的通用规则map $http_host $loggable {default 1; # 默认情况下记录访问日志"~^(www\.)?baidu\.com$" 0; # 不记录指定域名的日志,www和baidu换成自己的域名}# 处理恶意访问80443端口server {listen 80 default_server; # 监听80端口,作为默认服务器server_name _; # 匹配任何未明确指定的主机名access_log off; # 关闭该服务器的访问日志return 403; # 返回HTTP 403 Forbidden错误}# 跳转到www子域名server {listen 80;server_name baidu.com;return 301 https://www.baidu.com$request_uri; # 将所有来自baidu.com的HTTP请求重定向到www子域名下的HTTPS,www.baidu.com修改成自己的地址}# www.baidu.com静态资源服务server {listen 80;server_name www.baidu.com;return 301 https://$host$request_uri; # 强制将HTTP请求重定向到HTTPS}# HTTPS服务:www.baidu.comserver {listen 443 ssl; # 监听443端口,开启SSL加密server_name www.baidu.com;ssl_certificate /opt/cert/baidu.com.crt; # SSL证书公钥文件路径ssl_certificate_key /opt/cert/baidu.com.key; # SSL证书私钥文件路径ssl_session_cache shared:SSL:1m; # 共享SSL会话缓存大小ssl_session_timeout 5m; # SSL会话超时时间ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 安全的SSL密码套件列表ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的TLS协议版本ssl_prefer_server_ciphers on; # 优先选择服务器支持的最高优先级cipherlocation / {root /path/to/www.baidu.com/static; # 静态资源根目录index index.html index.htm; # 默认索引文件try_files $uri $uri/ =404; # 尝试查找URI对应的文件或目录,否则返回404}}# test.baidu.com Vue应用服务server {listen 80;listen 443 ssl;server_name test.baidu.com;ssl_certificate /opt/cert/baidu.com.crt;ssl_certificate_key /opt/cert/baidu.com.key;...location / {root /opt/nginx/nginxServer/html/test; # 前端文件地址index index.html index.htm;try_files $uri $uri/ /index.html; # 单页应用路由处理}location /api {proxy_pass http://XXX_backend/api/; # 将API请求转发到后端XXX集群# 代理相关设置(如缓存策略)...}}# 其他服务器组和location配置...
}

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

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

相关文章

消息队列面试题

目录 1. 为什么使用消息队列 2. 消息队列的缺点 3. 消息队列如何选型? 4. 如何保证消息队列是高可用的 5. 如何保证消息不被重复消费(见第二条) 6. 如何保证消息的可靠性传输? 7. 如何保证消息的顺序性(即消息幂…

总说上下文切换耗性能,那他到底耗了多少性能?

大家好,我是「云舒编程」,今天我们来聊聊上下文切换性能消耗。 文章首发于微信公众号:云舒编程 关注公众号获取: 1、大厂项目分享 2、各种技术原理分享 3、部门内推 一、前言 众所周知,操作系统是一个分时复用系统&…

.NET高级面试指南专题十九【 数据库设计-4范式】

数据库范式设计是关系数据库设计中的重要概念,旨在减少数据冗余和提高数据的一致性。 范式设计的目的是提高数据库的数据质量、一致性和可维护性。通过将数据结构化为不同的范式,可以降低数据冗余,减少数据更新异常,提高数据的可靠…

Java八股文(MyBatis Plus)

Java八股文のMyBatis Plus MyBatis Plus MyBatis Plus MyBatis Plus 是什么?它与 MyBatis 有什么区别? MyBatis Plus 是基于 MyBatis 进行扩展的一款持久层框架,它提供了一系列增强功能,简化了 MyBatis 的使用。 与 MyBatis 相比…

C++学习基础版(一)

目录 一、C入门 1、C和C的区别 2、解读C程序 3、命名空间 4、输入输出 (1)cout输出流 (2)endl操纵符 (3)cin输入流 二、C表达式和控制语句 1、数据机构 特别:布尔类型bool 2、算数运…

数据结构的基本框架以及泛型

目录 集合框架复杂度大O的渐进表示法 装包(箱)或者拆包(箱)装包拆包 泛型泛型的上界泛型方法求最大值 集合框架 Java的集合框架,Java Collection Framework 又被称为容器container, 定义在java.util包下的一组 interfaces 和其实现类 classes interface: 接口 abstracb class…

【LeetCode热题100】24. 两两交换链表中的节点(链表)

一.题目要求 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 二.题目难度 中等 三.输入样例 示例 1: 输入&am…

Docker 哲学 - 容器操作 (二)

命令行启动 参数键值之间可以使 " " 或者 空格 卷的挂载是在容器创建时指定的,不能在容器运行时再添加 当加上 --network-alias 设置同一网络下别名参数后 ,inspect 该容器发现 会同步到 容器信息中 2、给容器打日志 docker logs 【-…

深度学习_ResNet_5

ResNet学习目标 什么是ResNet为什么要引入ResNet?ResNet网络结构的特点利用ResNet完成图像分类 什么是ResNet? ResNet(Residual Network)是一种深度残差网络,由何凯明等人在2015年提出,是深度学习领域中一…

Leetcode 31. 删除无效的括号

心路历程: 一开始看到有点懵,后来发现有点像按照一定规则穷举所有可能情况,想到了排列组合问题,再结合问题长度不固定,无法用已知个for循环表示,从而想到了回溯。这个题相当于需要在一定规则下枚举。 按照…

力扣题目训练(22)

2024年2月15日力扣题目训练 2024年2月15日力扣题目训练563. 二叉树的坡度637. 二叉树的层平均值643. 子数组最大平均数 I304. 二维区域和检索 - 矩阵不可变154. 寻找旋转排序数组中的最小值 II 2024年2月15日力扣题目训练 2024年2月15日第二十二天编程训练,今天主要…

Redis-2 Redis基础数据类型与基本使用

高级Redis应用进阶 一站式Redis解决方案-Redis-2 Redis基础数据类型与基本使用 源代码在GitHub - 629y/food-social-contact-parent: redis项目-美食社交APP 1. Redis基本数据类型 1.字符串(strings) set username zhangsan get username mset age 18 …

ECMAscript6学习

ECMAscript6介绍 ECMA是一个浏览器脚本标准制定的公司,Netscape 创造了 JavaScript 由于商标原因, 后面ECMA公司取名ECMAscript 1 发布,JavaScript 也就是 ECMAscript.到现在最新的版本是6,简称es6. 新增let 与const let 与const …

【数据分析可视化】动态生成柱状图

import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker from matplotlib.animation import FuncAnimation import matplotlib.patches as mpatches from matplotlib.animation import FFMpegWriter# 定义一个函数,用于生成…

探秘酒店业黑科技:3D可视化引领管理新风尚

在信息化飞速发展的今天,酒店管理已不再是传统的模式所能满足。 想象一下,你站在一个巨大的3D地图上,轻轻一点,就能瞬间进入酒店的任何一个角落。你可以看到客房的布置、餐厅的摆设、会议室的布局……一切都如同身临其境&#xff…

shell编程中 for while until循环的使用方法及案例

CSDN 成就一亿技术人! 作者主页:点击! Shell编程专栏:点击! CSDN 成就一亿技术人 ————前言———— Shell脚本编程中,有几种常见的循环结构,包括for循环、while循环和until循环&#xf…

C goto 语句

C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语…

PWM驱动舵机

PWM驱动舵机 接线图 程序结构图: pwm.c部分代码 #include "stm32f10x.h" // Device headervoid PWM_Init(void){// 开启时钟,这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代…

2.27线性模型

可以利用无监督学习解决的问题,大致分为两类: 关联分析:发现不同事物之间同时出现的概率。在购物篮分析中被广泛地应用。如果发现买面包的客户有百分之八十的概率买鸡蛋,那么商家就会把鸡蛋和面包放在相邻的货架上。 聚类问题&a…

onnx 格式模型可视化工具

onnx 格式模型可视化工具 0. 引言1. 可视化工具2. 安装 Netron: Viewer for ONNX models 0. 引言 ONNX 是一种开放格式,用于表示机器学习模型。ONNX 定义了一组通用运算符(机器学习和深度学习模型的构建基块)和通用文件格式,使 A…