Nginx教程(1)

news2025/1/18 18:49:38

文章目录

    • 1.1 简介
    • 1.2 常见的服务器
    • 1.3 反向代理
    • 1.4 Nginx的安装与运行
    • 1.5 Nginx的进程模型
    • 1.6 Nginx处理Web请求机制解析
    • 1.7 Nginx核心配置文件nginx.conf解析
    • 1.8 Nginx常用命令解析
    • 1.9 Nginx日志切割
    • 1.10 Nginx为静态资源提供服务
    • 1.11 使用Gzip压缩提高请求效率
    • 1.12 location匹配规则解析

1.1 简介

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务,主要功能是反向代理,通过配置文件可以实现集群和负载均衡,还可以实现静态资源虚拟化。
在这里插入图片描述

1.2 常见的服务器

  1. MS IIS:asp.net
  2. Weblogic、Jboss:用于传统行业,如ERP/物流/电信/金融
  3. Tomcat、Jetty:用于J2EE开发
  4. Apache、Nginx:用于发布一些静态服务实现反向代理
  5. Netty:高性能服务器编程

以下是Netcraft统计的服务器市场使用率

在这里插入图片描述

1.3 反向代理

正向代理:客户端请求目标服务器之间的一个代理服务器,请求会先经过代理服务器,然后再转发请求到目标服务器,获得内容后最后响应给客户端,这个处于中间的服务器就是所谓的正向服务器,代理的是客户端
反向服务:用户请求目标服务器,由代理服务器决定访问哪个ip(服务器ip),代理的是服务器

在这里插入图片描述

1.4 Nginx的安装与运行

我的开发环境为Centos7+Finalshell

nginx的下载地址,下载稳定版即可
在这里插入图片描述
然后将下载好的文件通过Finalshell上传到Centos 7服务器的指定的文件夹下:
在这里插入图片描述
安装依赖环境

  1. 安装gcc环境:yum install gcc-c++
  2. 安装PCRE库,用于解析正则表达式:yum install -y pcre pcre-devel
  3. zlib压缩和解压缩依赖:yum install -y zlib zlib-devel
  4. SSL安全的加密的套接字协议层,用于HTTP传输,也就是https:yum install -y openssl-devel

解压

tar -zxvf nginx-1.22.1.tar,注意解压后得到的是源码,源码需要编译后才能安装

编译

编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错mkdir /var/temp/nginx -p

在nginx目录,输入如下命令进行配置,目的是为了创建mkefile文件

cd进入解压后的nginx的目录

./configure \
 --prefix=/usr/local/nginx \
 --pid-path=/var/run/nginx/nginx.pid \
 --lock-path=/var/lock/nginx.lock \
 --error-log-path=/var/log/nginx/error.log \
 --http-log-path=/var/log/nginx/access.log \
 --with-http_gzip_static_module \
 --http-client-body-temp-path=/var/temp/nginx/client \
 --http-proxy-temp-path=/var/temp/nginx/proxy \
 --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
 --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
 --http-scgi-temp-path=/var/temp/nginx/scgi

在这里插入图片描述

命令解释
–prefix指定nginx的安装目录
–pid-path指定nginx的pid
–lock-path锁定安装文件,防止被恶意篡改或误操作
–error-log指定错误日志路径
–http-log-pathhttp日志路径
–with-http_gzip_static_module启用gzip模块,在线实时压缩输出数据流
–http-client-body-temp-path设定客户端请求的临时路径
–http-proxy-temp-path设定http代理临时目录
–http-fastcgi-temp-path设定fastcgi临时目录
–http-uwsgi-temp-path设定uwsgi临时目录
–http-scgi-temp-path设定scgi临时目录

make编译

make

安装

make install

测试安装结果

进入 /usr/local/nginx(前面配置的nginx安装目录)下的sbin目录启动nginx

./nginx -s stop #停止服务
./nginx #启动服务
./nginx -s reload #重启服务

本机访问虚拟机的ngnix服务(注意关闭防火墙)

在这里插入图片描述

默认index.html显示原理解析:
上面我们已经安装好nginx并访问到了默认主页,其原理是,首先我们在浏览器端输入我们要访问的nginx服务所在的服务器ip,并访问发起请求,服务器端Nginx会持续监听80端口,在接受到用户的访问请求后会找到对应的Server,然后映射路由到index.html,访问成功。下面是nginx.conf这一核心配置文件中服务器的配置内容:

在这里插入图片描述

1.5 Nginx的进程模型

  1. master:主进程
  2. worker:工作进程

在这里插入图片描述
我们可以在nginx.conf配置worker的进程数量(worker_processes:n),配置后重启服务即可

在这里插入图片描述

在具体的工作过程中,首先程序员将操作命令发送给master进程,master进程会将命令一个个分发给worker进程,然后每个worker会连接处理每一个客户端请求,并响应请求

在这里插入图片描述

1.6 Nginx处理Web请求机制解析

worker抢占机制:

当客户端发送请求到代理服务器时,各个worker进程会抢占一个一个互斥锁来进行服务,抢占到互斥锁的woker进程可以处理客户的请求(这个就是Nginx的Worker抢占机制)

在这里插入图片描述
传统服务器事件处理:

假设现在master进程仅仅fork一个worker进程,而woker1处理一个客户的请求时由于某些原因发生了阻塞,现在又来了一些新的请求,按照传统服务器的处理方式所有的进程都会被阻塞等待,此时,master进程会fork一个新的worker进程去处理这些新来的客户请求。这里是传统的服务器事件处理,而nginx在阻塞后worker进程会放弃继续处理当前阻塞的请求而出处理新的客户端请求(这是一种异步非阻塞的模型),同样worker的最大连接数可以在核心配置文件中进行配置。

在这里插入图片描述

1.7 Nginx核心配置文件nginx.conf解析

nginx.conf配置结构

main 全局配置
event:配置工作模式以及连接数
http:http模块的相关配置{

server:虚拟主机配置,可以有多个

location:路由规则,表达式
upstream:集群,内网服务器

在这里插入图片描述

user nobody:标志worker进程所属用户(这里是可以修改的),默认是nobody
worker_processes:worker进程的数量

在这里插入图片描述

配置日志和进程的信息,同样可以修改

在这里插入图片描述

工作模式默认是epoll
worker_connections:每个worker运行连接的客户端最大连接数

在这里插入图片描述

include:可以导入外部的配置文件
default_type:默认的type类型
log_format:日志的格式
access_log:每次请求都会记录到acces.log文件中
sendfile:用于进行文件的高校传输
tcp_nopush:和sendfile一起使用,表示当数据包累积到一定大小时才会发送
keepalive_timeout:客户端连接的超时时间
gzip:内容的传输会压缩成zip,提升传输效率

在这里插入图片描述

一个server代表一个虚拟主机
listen:服务监听窗口
server_name:服务器名
location:默认路由(会把index首页展示出来)
error_page:默认错误展示页面

1.8 Nginx常用命令解析

关闭nginx

  1. 暴力关闭:./nginx -s stop,会关闭所有的用户连接,对用户是很不友好的
  2. 优雅关闭:./nginx -s quit,当当前还有用户连接时不会关闭直到没有用户连接时会关闭

更改配置文件后监测语法是否正确

./nginx -t

查看nginx当前版本号

./nginx -v:粗略的查看版本信息
./nginx -V:详细的查看nginx信息

在这里插入图片描述

1.9 Nginx日志切割

根据我们之前的配置可以知道,日志文件都放置在/var/log/nginx文件夹下,随着nginx服务器的运行,所保存的日志信息会越来越判断,所以我们需要针对日志进行切割下面有两种切割方式:
手动日志切割

现有的日志都会保存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积也会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天或者半小时对日志切割一下:

  1. 创建一个shell可执行文件:cut_my_log.sh,内容为
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M).log #
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
kill -USR1 'cat $PID'
  1. 为cut_my_log.sh添加可执行权限
    chmod +x cut_my_log.sh

定时切割
3. 安装定时任务

yum install crontabs

  1. crontab -e 编辑并且添加一行新的任务

*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

  1. 重启定时任务

service crond restart

常见定时任务命令(可以看我这篇博客)
service crond start #启动服务
service crond stop #关闭服务
service crond restart #重启服务
service crond reload #重新载入配置
crontab -e #编辑任务
crontab -l #查看任务列表

1.10 Nginx为静态资源提供服务

常见的静态资源可以分为两类,第一类是我们的html页面,css文件等,另一类如视频、音频和图片

  1. 设置server
    在这里插入图片描述
  2. 上传静态文件到server中配置的路径下(下载地址)

在这里插入图片描述

在这里插入图片描述

1.11 使用Gzip压缩提高请求效率

在没有使用Gzip压缩方式之前,我们可以看到浏览器请求各类资源的大小

在这里插入图片描述

下面在核心配置文件中配置gzip(然后再次访问比较文件大小)

gzip  on;  #打开gzip服务

gzip_min_length 1; #设置压缩下限(小于1字节不压缩)

gzip_comp_level 3; #设置压缩级别(级别越高cpu消耗越到)
#设置压缩文件的类型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;

在这里插入图片描述

1.12 location匹配规则解析

location是一种路径的匹配规则,相当于ssm的控制器前面的路径映射

  1. location /:默认匹配规则,代表当前server的根路径(可以访问该路径下所有内容)
  2. location = /:代表路径精确匹配,这里表示只能匹配/
  3. location ~* \.(GIF|png|bmp|jpg){ root /home;}:正则表达式匹配方式。*代表不区分大小写,这里表示可以匹配home下指定文件后缀的文件
  4. location ^~ /home/img{ root /home;}:正则表达式,以某个字符路径开头请求,这里表示只能请求img下的文件资源

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

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

相关文章

React源码分析(二)渲染机制

准备工作 为了方便讲解&#xff0c;假设我们有下面这样一段代码&#xff1a; function App(){const [count, setCount] useState(0)useEffect(() > {setCount(1)}, [])const handleClick () > setCount(count > count)return (<div>勇敢牛牛, <sp…

java计算机毕业设计基于安卓Android的急救服务APP

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,急救服务系统就是信息时代变革中的产物之一。 任何系统都要遵循系统设…

Android9.0 Fiddler 模拟器抓包

目录 一、生成Fiddler证书并安装 二、制作证书 三、adb的配置 四、安装证书到Android手机 五、抓包 六、总结 一、生成Fiddler证书并安装 1.到官网下载fiddler插件 https://www.telerik.com/fiddler/add-onshttps://www.telerik.com/fiddler/add-ons 2.官网插件工具很多&a…

TCP/IP HTTP WebSocket Socket 路由

最近在写一个上位机&#xff0c;需要将采集到的数据上传到云平台&#xff0c;然后就考虑到使用WebSocket实现&#xff0c;但是WebSocket和Socket有啥区别&#xff0c;这两个东西分别是个啥&#xff0c;咱也不清楚&#xff0c;然后就查资料&#xff0c;发现有好多之前想了解但是…

Java面试基础篇-IO

UNIX提供5种I/O模型 var code “7cfcb088-556d-478a-b21d-12b255236dbd” BIO模型 在进程空间调用recvfrom时被阻塞,直到有数据才返回。 NIO模型 调用recvfrom时先返回EWOULDBLOCK错误&#xff0c;然后轮询是否有数据。 I/O复用 linux提供select/poll&#xff0c;其支…

Minecraft 1.19.2 Forge模组开发 07.拼图建筑(jigsaw)

如果你看过之前的Minecraft 1.19.2建筑生成的话&#xff0c;想必会更好理解这篇教程。 效果演示效果演示效果演示 1.我们本期准备生成的建筑分为4块&#xff0c;所以首先需要用4个结构方块将整个建筑包括起来&#xff1a; 2.之后我们需要用指令拿出拼图方块: give p minecraf…

数据结构与算法——Java实现递归、迷宫回溯问题、八皇后问题

目录 一、递归 1.1 介绍递归 二、迷宫回溯问题 2.1 代码实现 三、八皇后问题 3.1 基本介绍 3.2 分析思路 3.3 代码实现 一、递归 1.1 介绍递归 简单的说&#xff1a;递归就是方法自己调用自己&#xff0c;每次传入不同的变量。 递归有助于编程者解决复杂的问题&#x…

Efficient Zero-shot Event Extraction with Context-Definition Alignment论文解读

Efficient Zero-shot Event Extraction with Context-Definition Alignment code&#xff1a;tencent-ailab/ZED: This is the repository for EMNLP 2022 paper “Efficient Zero-shot Event Extraction with Context-Definition Alignment” (github.com) paper&#xff1a;…

【手把手】分布式定时任务调度解析之Elastic-Job

1、这货怎么没怎么听过 经常使用Quartz或者Spring Task的小伙伴们&#xff0c;或多或少都会遇到几个痛点&#xff0c;比如&#xff1a; 1、不敢轻易跟着应用服务多节点部署&#xff0c;可能会重复多次执行而引发系统逻辑的错误&#xff1b; 2、Quartz的集群仅仅只是用来HA&…

业主应该重视装修中的“道”而不是“术”!极家精工装修好不好!

业主应该重视装修中的“道”而不是“术”&#xff01;极家精工装修好不好&#xff01;看了很多业主问了很多关于装修中很琐碎的事儿&#xff0c;比如“装修流程”、“装修应该注意什么”、“装修哪些必须要重视”、“某某材料和某某材料相比哪个好”、“家里装了什么是你最不后…

Lua中的基本数据类型

Lua中的数据类型一、Lua基本数据类型1.1、nil1.2、boolean1.3、number1.4、string1.5、function1.6、table二、Lua 通用数据结构的实现总结后言Lua是一门动态类型的脚本语言&#xff0c;这意味着同一个变量可以在不同时刻指向不同类型的数据。Lua代码中 一般采用一下两种做法相…

Dubbo-admin+Zookeeper 的环境搭建实操与 Could-not-extract-archive 报错踩坑

$ brew install zookeeper > Downloading https://homebrew.bintray.com/bottles/zookeeper-3.4.13.mojave.bottle.tar.gz ...先来看dubbo-admin的安装&#xff1b;我们先找到它在apache下的官方GitHub&#xff0c;官方也有相关介绍&#xff0c;中英文版都有(毕竟原本是中国…

[附源码]Node.js计算机毕业设计高校学科竞赛管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

Kibana使用

简介 Kibana是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进行视觉探索和实时分析。 Kibana通常用于项目log日志收集分析、数据可视化分析等。 一、【Discover】搜索查询 Discover模块用于全文搜索文档(doucument),支持索引筛选、时间筛选、字段筛选、支持…

linux下syslog使用说明

syslog 系统日志应用 1) 概述 syslog是Linux默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。程序&#xff0c;守护进程和内核提供了访问系统的日志信息。因此&#xff0c;任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。 几乎所有的…

读《深入浅出MySQL数据库开发、优化与管理维护(第2版)》笔记1

上面3图是书中MySQL帮助的使用小节; 实测: 我用DATE_FORMAT(date,format)函数的时候经常会记不清格式化的字符是啥,这个时候我会去求助度娘,然后从零散的帖子里找一个合适的,测试一下可用,就拿来用了,但没法马上找到一个比较完整系统一点的帖子,从看此书本章节,可知使用MySQL的…

acm是什么?你准备好去打了吗?

1.引言2.acm究竟是什么&#xff1f;3.acm的时间安排重点网络赛的作用1.名额分配2.校内选拔icpc省赛省赛选拔赛(校内)4.acm该如何准备1.前期的算法积累1.Acwing 平台算法基础课 -y总业界良心。算法提高课 基本囊括了蓝桥杯的知识范畴算法进阶课&#xff08;选&#xff09; 算法中…

MYSQL 8.0 -- 事务中删除不存在的记录导致死锁

最近开发的某个功能中&#xff0c;线上偶尔会爆出死锁异常。再大佬同事的帮助下&#xff0c;最终排查出了原因&#xff0c;在此记录一下。 文章目录业务描述事务中删除行时锁的表现场景重现问题处理业务描述 在业绩信息维护中&#xff0c;可以维护相关人员列表&#xff0c;相关…

谁再问我 Kafka,我把这 43 张图甩给他

从Kafka诞生的早期&#xff0c;我就对Kafka投入了很多的关注&#xff0c;虽然不敢说精通Kafka, 但也算是非常熟悉了。 平时在工作之中&#xff0c;几乎天天都在跟这玩意儿打交道&#xff0c;在面试的时候&#xff0c;也会经常聊一些Kafka相关的内容。 Kafka 是一个优秀的分布…

二苯并环辛炔-二硫键-马来酰亚胺,DBCO-SS-Maleimide,DBCO-SS-Mal

基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a; CAS号&#xff1a;N/A 中文名&#xff1a;二苯并环辛炔-二硫键-马来酰亚胺 英文名&#xff1a;DBCO-SS-Maleimide&#xff0c;DBCO-SS-Mal 详细产品数据&#xff08;Detailed Product Data&#xff09;&am…