8月4日上课内容 nginx(重要内容,面试必问)

国外主要还是apache

nginx高性能、轻量级的web服务软件。

nginx的特点

1、稳定性高。(没有apache稳定)

常用版本 1.12 1.20 1.22

2、系统资源消耗低。(处理http请求的并发能力很高,单台服务器可以处理30000-50000个并发请求。)

稳定:一般在企业中,为了保证服务器稳定,并发量的设置在20000个左右。占用内存2M左右。加上keep-alive也就3M左右。

nginx的主要功能:

1、静态文件服务:nginx可以直接提供静态文件的服务。HTML,CSS,JAVAScript,可以直接处理图片。

能够高效的处理并且响应静态文件的请求。

2、反向代理(重点,nginx最核心最强大的功能):可以作为反向代理的服务器,将客户端的请求转发给后端多个服务器,可以实现负载均衡,高可用。提高整个机器的性能以及可靠性。

正向代理(了解即可)

特点:已知后端服务器,请求只会往固定的服务器发送请求(保证用户一定程度上的隐私安全)

例:访问web服务器通过代理vpn的地址来进行访问

反向代理

反向代理的核心功能:客户端在请求时,通过代理服务器,会把请求的流量安装轮询算法转发到后台不同的服务器,实现负载均衡和高可用。

3、处理动态内容,nginx处理动态内容的能力很差,需要通过php node.js java python这些能够处理动态服务的应用才配合它来进行处理,nginx可以代理请求,发送到后端的动态服务处理,动态服务器处理之后,nginx来把动态请求,响应给客户端。

4、SSL/TLS加密,HTTPS的加密方式,数字证书验证机制。

5、虚拟主机:nginx可以在一台服务器上设置多个虚拟主机,同一个服务器上可以有多个域名和站点。

6、URL重定向。可以实现灵活的url重写和重定向

7、缓存功能,nginx自带缓存功能。

3个重要的核心功能,必须掌握

缓存示例:

get web服务器上的内容 html页面 获取到了之后

从web服务器到nginx  nginx最终再把内容响应给用户

在这个过程中web的内容就会被nginx保存到本地,下一次再请求就不用再到服务器上请求,加快了访问速度

(就是第一次访问之后,把内容保存到了本地,这既是缓存)

8、日志功能,可以详细的记录请求的信息,包括访问时间,请求路径,ip地址,响应状态,有助于故障排查。(系统控制的日志记录在/var/log/messages业务日志:access.log error.log

access记录的谁访问我了,都是访问成功的记录。

error日志:也记录谁访问了我,但是记录的是访问失败的记录。)

nginx的主要应用场景

1、静态服务

2、反向代理、负载均衡

3、缓存服务

4、动态服务

nginx是如何实现高并发的?(面试题)

1、nginx自身代码的问题,通过大量的底层代码进行了优化,同时自带了一个功能模块。epoll模块,支持高并发

2、nginx也是一个master进程控制多个worker进程。master负责收集和分发请求,worker是实际执行者。每一个请求进来时,master就会拉起一个worker进程处理请求。同时master进程也负责监控worker的状态,worker的数量和cpu要一致,或者是cpu的两倍

worker在处理请求的过程中,只受内存大小的限制。所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到并发处理的能力。

二者之间相互依赖,相互补充。

安装依赖环境

gcc环境

同样创建用户组

useradd -M -s /sbin/nologin nginx

解包之后编译安装一下

cd /opt/

tar -xf nginx

cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

--prefix=/usr/local/nginx       指定了Nginx的安装目录。在这种情况下,它将安装在 /usr/local/nginx 目录下。
--user=nginx 和 --group=nginx  指定了运行Nginx进程的用户和组。在这种情况下,它将是用户和组 nginx。
--with-http_ssl_module         启用了对HTTP连接的SSL/TLS加密支持。(http协议的加密模块)
--with-http_v2_module          启用了对HTTP2.0协议的支持。
--with-http_realip_module      允许Nginx从X-Real-IP或X-Forwarded-For头部获取客户端的真实IP地址。
--with-http_stub_status_module 启用了 stub_status 模块,提供了访问Nginx状态信息的方法。
--with-http_gzip_static_module 启用了支持使用 .gz 扩展名提供预压缩文件的功能。
--with-pcre                    启用了对Perl Compatible Regular Expressions(PCRE)库的支持。
--with-stream                  启用了对TCP/UDP代理模块的支持。
--with-stream_ssl_module       启用了对TCP/UDP连接的SSL/TLS加密支持。
--with-stream_realip_module    允许Nginx从PROXY协议头部获取客户端的真实IP地址。

 

make -j 4 && make install

chown -R nginx.nginx /usr/local/nginx #修改属主和属组

安装好后生成四个文件功能如下

1. conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,
其他的.conf则是用来配置nginx相关的功能的.
例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,
配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。

2. html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,
另外还有一个50x的web文件是默认的错误页面提示页面。

50x.html是nginx默认的错误页面的提示。

3. logs:用来保存nginx服务器的访问日志错误日志等日志,
logs目录可以放在其他路径,比如/var/logs/nginx里面。

4. sbin:保存nginx二进制启动脚本,可以接受不同的参数实现不同的功能
 

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/        #让系统识别nginx的操作命令

nginx常用的服务

nginx -t 检查配置文件是否正确。

nginx -v 查看nginx的版本号(用的较多)

nginx -s 向主进程传输信号 停止,开启,重启,加载

nginx -c 设置配置文件的默认控制

添加Nginx系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

[Unit] 部分描述了单元的用途,以及文档的位置。
它还规定了在 Nginx 启动前需要启动的服务的依赖关系和顺序。

[Service] 部分包含了 Nginx 服务的配置,包括服务类型(在这种情况下是 forking)、PID 文件的位置
以及启动、重新加载和停止服务的命令。

最后,[Install] 部分指定了服务安装的目标。
ExecReload=/bin/kill -s HUP $MAINPID  #相当与restart
ExecStop=/bin/kill -s TERM $MAINPID   #相当与stop

因为指定了pidfile的位置,所以要创建一个run的目录

vim /usr/local/nginx/conf/nginx.conf
#修改配置文件

修改之前先把配置文件做一个备份
pid /usr/local/nginx/run/nginx.pid;
#因为指定了pid号,所以pid的位置要修改  

systemctl daemon-reload 
#重新加载配置
systemctl restart nginx 重启服务 

 

这是nginx就已经装完了,测试一下

如果不添加到系统服务当中,就通过nginx -s的方式

nginx -s stop

nginx -s start

nginx -s reload

-s 参数只能用来发送信号给Nginx主进程,不能开启nginx服务

工作当中一般都会添加到系统服务当中,通过systemctl来控制

信号符:

信号符结合kill命令(传递信号):

kill -USR1 pid号(nginx服务的pid号) 日志分割(日志分割很重要)

kill -s HUP pid号 重新加载

注:只要用kill,后面只能跟pid号

killall -s HUP nginx 可以跟服务名,也可以用pid号

kill -s QUIT pid号 优雅退出,有人访问时不会结束进程,访问完了,才会结束进程。

kill -s WINCH pid号 优雅的结束worker,直到请求完成,才会介绍worker进程

yum安装nginx,必须要epql源(在线源)

yum install -y epel-release

yum install nginx -y

nginx的主配值文件详解(很重要,面试会问,工作当中常用)

主配置文件指的就是 nginx.conf

全局配置

全局配置,对所有服务,模块都生效

#user nobody;                #运行用户,若编译时未指定则默认为nobody

worker_processes 1;          #工作进程数量,一般配置成cpu数一致,或者2倍,如果网站访问量不大,一般来说小网站设为1就够用了
#error_log logs/error.log;   #错误日志文件的位置
#pid logs/nginx.pid;         #PID文件的位置

events块

events {
    use epoll;               #使用epoll模型, 2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 1024; #每个进程可以处理的最大连接数,默认为1024
}


#如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)
#可使用"ulimit -a"命令查看系统允许当前用户进程打开的文件数限制。 

如何修改linux服务器文件的最大打开数量(很重要,面试题,工作中常用)

ulimit -n 65535 临时修改,linux只支持打开65535个文件

永久修改: 

vim  /etc/security/limits.conf
注:65535 为Linux系统最大打开文件数
* soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。
* hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。
* soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。
* hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。

这里使用的通配符 * 表示对所有用户生效。
改完必须reboot重启之后才生效

 这时候再看,就更改成功了

events配置只影响nginx服务器与用户之间的网络连接。

http配置(重点模块)

主要是针对http请求的配置,代理,缓存,日志,反向处理,虚拟web主机,server块。

非http请求的方式,不能写在该模块当中。因为反向代理分七层, 四层代理不能写在http的模块当中,因为它不属于http请求。

http {
#文件扩展名与文件类型映射表
include  mime.types;

#默认文件类型
default_type appkgcation/octet-stream;

#日志格式设定
#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 logs/access.log main;

#支持文件发送(下载)
sendfile   on;

#此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据) ,
此选项仅在使用sendfile的时候使用
#tcp_nopush on;

#连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;(65秒)

#gzip模块设置,设置是否开启gzip压缩输出,取消注释就是打开页面压缩功能
gzip on;

http当中的server模块 

配置虚拟主机的相关参数,一个http模块当中可以有多个server块。

server {
   #监听地址及端口
   listen 80;
   #主机名,网址名,站点域名,可以有多个,用空格隔开
   server name www.kgc.com;
   #网页的默认字符集
   charset utf-8;

server模块当中的location块

location块匹配的是URI

例:https://www.baidu,com/images/search  URI是images/search
   #根目录配置
   location / {
   网站根目录的位置/usr/local/nginx/html
   root html;
   #内部错误的反馈页面
   error_page 500 502 503 504 /50x.html;
   #错误页面配置
   location = /50x.html {
   root html;
   }
  }
 }

location /代表的路径就是usr/local/nginx/html 

这个时候能够请求到,使用root做的是拼接

 

看一下日志:

alias /opt/加了/变成了opt//,这是一个特殊的机制

我们去掉/再看一下

 

看一下报错的日志,变成了opt目录下面

 测试一下:

总结:

location模块当中

root 拼接,root指定的目录和location匹配的uri之间做的一个拼接,/opt/ky30/ 这两个路径都必须真实存在,而且都是目录,并且,在uri目录里面要有

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【无标题】一篇文章带你彻底理解Java ArrayList数据结构详解

一篇文章带你彻底理解Java ArrayList数据结构详解 基本概念: ​ **之前创建数组的时候,需要声明提前声明数组的大小,**ArrayList是一个可以动态修改的数组,与普通数组的区别就是没有固定大小的限制,它会动态调整长度…

2023华数杯数学建模竞赛C题思路解析

如下为:2023华数杯数学建模竞赛C题 母亲身心健康对婴儿成长的影响 的思路解析 C题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。母亲心理健康状态的不…

Web-1-网站工作流程介绍

我们学习web开发,首先要知道什么是Web? Web: 全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站 比如我展示的这京东,淘宝唯品会都叫做网站,那么现在大家想一下,你还知道什…

2023-08-03 LeetCode每日一题(删除注释)

2023-08-03每日一题 一、题目编号 722. 删除注释二、题目链接 点击跳转到题目位置 三、题目描述 给一个 C 程序,删除程序中的注释。这个程序source是一个数组,其中source[i]表示第 i 行源码。 这表示每行源码由 ‘\n’ 分隔。 在 C 中有两种注释风…

Qt 中操作xml文件和JSON字符串

文章目录 1、概述1.1、xml介绍1.2、json介绍 2、xml文件增删改查2.1、写xml文件内容2.2、读xml文件内容2.3、删除xml文件内容2.4、修改xml文件内容 3、构建JSON字符串3.1、JSON字符串排版4、剪切板操作 1、概述 1.1、xml介绍 XML 指可扩展标记语言(EXtensible Mark…

复现原型链污染漏洞

目录 一、复现原型链污染漏洞 hackit 2018 1、创建hackit_2018.js文件 2、运行hackit_2018.js文件 3、寻找原型链漏洞 4、污染原型链 hackit 2018 1、创建hackit_2018.js文件 const express require(express) var hbs require(hbs); var bodyParser require(body-par…

【数据结构】快速排序

快速排序是一种高效的排序算法,其基本思想是分治法。它将一个大问题分解成若干个小问题进行解决,最后将这些解合并得到最终结果。 快速排序的主要思路如下: 选择一个基准元素:从待排序的数组中选择一个元素作为基准(…

计算机视觉(五)深度学习基础

文章目录 深度学习基础卷积神经网络与传统神经网络区别深度学习与神经网络的区别 目标函数选择合适的目标函数Softmax层 改进的梯度下降梯度消失的直观解释激活函数学习步长SGD的问题Momentum动量Nesterov MomentumAdagradRMSpropAdam 各种梯度下降算法比较关于算法选择的建议B…

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…

华为数通HCIP-PIM原理与配置

组播网络概念 组播网络由组播源,组播组成员与组播路由器组成。 组播源的主要作用是发送组播数据。 组播组成员的主要作用是接收组播数据,因此需要通过IGMP让组播网络感知组成员位置与加组信息。 组播路由器的主要作用是将数据从组播源发送到组播组成员。…

【Ansible】Ansible自动化运维工具之playbook剧本搭建LNMP架构

LNMP 一、playbooks 分布式部署 LNMP1. 环境配置2. 安装 ansble3. 安装 nginx3.1 准备 nginx 相关文件3.2 编写 lnmp.yaml 的 nginx 部分3.3 测试 nginx4. 安装 mysql4.1 准备 mysql 相关文件4.2 编写 lnmp.yaml 的 mysql 部分4.3 测试 mysql5. 安装 php5.1 编写 lnmp.yaml 的 …

Datax 数据同步-使用总结(一)

1,实时同步? datax 通常做离线数据同步使用。 目前能想到的方案 利用 linux 的定时任务时间戳的方式做增量同步。 2,同步速度快不快? 单表同步速度还是挺快的 但是如果遇到复杂的 sql 查询,其同步效率&#xff0c…

opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有…

《面试1v1》ElasticSearch 和 Lucene

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

问道管理:沪指窄幅震荡跌0.18%,有色、汽车等板块走低

3日早盘,沪指盘中窄幅震动下探,创业板逆市上扬;两市半日成交不足5000亿元,北向资金净卖出超15亿元。 到午间收盘,沪指跌0.18%报3255.88点,深成指跌0.23%,创业板指涨0.2%;两市算计成交…

6.如何用CSV文件生成异构图数据集

我们将使用GroupLens研究小组收集的MovieLens数据集。 这个数据集描述了MovieLens的五星评级和标记活动。该数据集包含来自600多名用户的9000多部电影的约10万个评分。我们将使用该数据集生成两种节点类型,分别保存电影和用户的数据,以及一种连接…

两个镜头、视野、分辨率不同的相机(rgb、红外)的视野校正

文章目录 背景实际效果查找资料资料1资料2 解决方案最终结果 背景 目前在做的项目用到两个摄像头,一个是热成像摄像头、另一个是普通的rgb摄像头。 一开始的目标是让他们像素级重合,使得点击rgb图像时,即可知道其像素对应的温度。但是在尝试…

spark history网络流量占用高问题记录

生产环境遇到一台机器网络流量占用高告警 由于监控只有机器总的网络流量,没有具体进程的 于是只能登陆服务器,安装nethogs:yum install nethogs 然后执行nethogs命令查看进程流量 观察到主要是spark history server这个进程占用流量高(最高…

【树】 二叉树 堆与堆排序 平衡(AVL)树 红黑(RB)树

目录 1 树1.1 认识树1.2 树的相关概念1.3 树的表示孩子兄弟表示法 2 二叉树2.1 概念2. 2 特殊二叉树2.3 二叉树的性质2.4 二叉树的存储结构 3 堆 — 完全二叉树的顺序结构实现3.1 堆的概念3.2 核心代码3.3 堆应用1 堆排序2 TOP-K问题 4 二叉树的链式存储4.1 二叉链结构与初始化…

4G WWAN设备类型

WWAN设备类型 USB dongle是设备接入互联网的重要方式之一,典型的通过USB接口与主设备连接,然后主设备通过4G/5G接入互联网,作为移动宽带设备,它有那些设备类型及暴露方式呢? 移动宽带设备类型:ModemManage…