当前位置: 首页 > news >正文

ngxin

一、什么是nginx

nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡。

二、nginx如何处理请求

nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址

 server {            						# 第一个Server区块开始,表示一个独立的虚拟主机站点listen       80;      					# 提供服务的端口,默认80server_name  localhost;       			# 提供服务的域名主机名location / {            				# 第一个location区块开始root   html;       				# 站点的根目录,相当于Nginx的安装目录index  index.html index.htm;      	# 默认的首页文件,多个用空格分开}          								# 第一个location区块结果

三、说一下什么是正向代理和反向代理

正向代理:在客户端部署的一个代理服务器,类似于vpn
反向代理:在服务器端部署的一个代理服务器。
nginx反向代理优点:
占内存小,可实现高并发连接,处理响应快
可实现http服务器、虚拟主机、方向代理、负载均衡
nginx配置简单
可以不暴露正式的服务器IP地址

四、nginx的配置我呢见nginx.conf有哪些模块

worker_processes  1;                					# worker进程的数量
events {                              					# 事件区块开始worker_connections  1024;            				# 每个worker进程支持的最大连接数
}                                    					# 事件区块结束
http {                               					# HTTP区块开始include       mime.types;            				# Nginx支持的媒体类型库文件default_type  application/octet-stream;     		# 默认的媒体类型sendfile        on;       							# 开启高效传输模式keepalive_timeout  65;       						# 连接超时server {            								# 第一个Server区块开始,表示一个独立的虚拟主机站点listen       80;      							# 提供服务的端口,默认80server_name  localhost;       					# 提供服务的域名主机名location / {            						# 第一个location区块开始root   html;       						# 站点的根目录,相当于Nginx的安装目录index  index.html index.htm;      			# 默认的首页文件,多个用空格分开}          										# 第一个location区块结果error_page   500502503504  /50x.html;     		# 出现对应的http状态码时,使用50x.html回应客户location = /50x.html {          				# location区块开始,访问50x.htmlroot   html;      							# 指定对应的站点目录为html}}  ......

五、配置nginx的动静分离

配置nginx的动静分离:假设我们有两台服务器,一台用于处理动态请求 IP 地址为192.168.1.100;另一台用于提供静态资源(如图片、CSS、JavaScript 文件等),IP 地址为192.168.1.101。

http {#... other configurations...upstream dynamic_servers {server 192.168.1.100:80;}upstream static_servers {server 192.168.1.101:80;}server {listen 80;server_name your_domain_name;location / {proxy_pass http://dynamic_servers;}location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {proxy_pass http://static_servers;}}
}

六、配置nginx的虚拟主机(区分内部网站与外部网站)

# 假设/var/www/example1;是内网   /var/www/example2:81;是外网
http {#... other configurations...server {listen 80;                               listen 8080;server_name example1.com;                server_name example.com; location / {root /var/www/example1;}}server { listen 80;                                listen 80;server_name example2.com;                 server_name example.comlocation / {root /var/www/example2;               proxy_pass http://127.0.0.1:8080}}
}#当你在浏览器中输入example1.com:80时访问的是内网网址;访问example2.com时,访问的是外网网址。
#如果你的服务器没有绑定这些域名,可以通过修改本地的hosts文件
#(在 Windows 系统中位于C:\Windows\System32\drivers\etc\hosts,在 Linux 和 macOS 系统中位于/etc/hosts),
#添加以下内容来模拟域名访问:127.0.0.1 example1.com
127.0.0.1 example2.com

七、location的用法

匹配符匹配规则优先级
=精确匹配1
^~以某个字符串开头2
~区分大小写的正则匹配3
~*不区分大小写的正则匹配4
!~区分大小写不匹配的正则5
!~*不区分大小写不匹配的正则6
/通用匹配,任何请求都会匹配到7
#优先级1,精确匹配,根路径location =/ {return 400;}#优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写location ^~ /av {root /data/av/;}#优先级3,区分大小写的正则匹配,匹配/media*****路径location ~ /media {alias /data/static/;}#优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里location ~* .*\.(jpg|gif|png|js|css)$ {root  /data/av/;}#优先7,通用匹配location / {return 403;}

八、nginx负载均衡的算法有哪些

1 轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。upstream backserver { server 192.168.0.12; server 192.168.0.13; } 
2 权重 weight
weight的值越大分到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。
其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。	upstream backserver { server 192.168.0.12 weight=2; server 192.168.0.13 weight=8; } 
3 ip_hash( IP绑定)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题upstream backserver { ip_hash; server 192.168.0.12:88; server 192.168.0.13:80; } 
4 fair(第三方插件)
必须安装upstream_fair模块。	
对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。upstream backserver { server server1; server server2; fair; } 哪个服务器的响应速度快,就将请求分配到那个服务器上。5、url_hash(第三方插件)
必须安装Nginx的hash软件包	
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } 

九、如何实现反向代理和负载均衡

反向代理:
#使用proxy_pass指令将请求转发到后端服务器
server {listen 80;server_name example.com;location / {proxy_pass http://backend_server_ip:port;}
}
负载均衡
#使用upstream指令定义后端服务器组,然后在location中使用proxy_pass指向该服务器组。例如:
upstream backend_servers {server server1_ip:port;server server2_ip:port;
}server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;}
}

十、如何根据服务器的cpu核心数来配置适当的worker进程

1.确定服务器的 CPU 核心数:cat /proc/cpuinfo | grep "processor" | wc -l
2.修改 Nginx 配置文件(nginx.conf):找到worker_processes指令,设置其值为合适的进程数。例如,如果服务器有 4 个 CPU 核心,可以设置为:worker_processes 4;
3.检查配置并重启 Nginx:使用以下命令检查 Nginx 配置文件的语法正确性:nginx -t如果配置正确,重启 Nginx 使配置生效:sudo systemctl restart nginx

十一、对 Nginx 性能优化的方法有哪些?

1.调整 worker 进程数:根据服务器的 CPU 核心数来设置适当的 worker 进程数。2.优化连接参数:如设置keepalive_timeout来保持长连接,减少连接建立和关闭的开销。keepalive_timeout指令有两个参数:第一个参数指定了客户端与服务器保持连接的超时时间。如果在这个时间内没有新的请求,连接将被关闭。第二个参数(可选)指定了在响应一个请求后,保持连接在服务端等待下一个请求的超时时间。例如:keepalive_timeout 65;表示客户端连接超时时间为 65 秒,服务端等待下一个请求的超时时间默认为同客户端连接超时时间。keepalive_timeout 65 5;表示客户端连接超时时间为 65 秒,服务端等待下一个请求的超时时间为 5 秒。场景分析:2.1.如果是高并发的 Web 应用,如在线购物网站、社交媒体平台等,较长的连接超时时间可以减少连接建立的开销,提高性能。2.2.如果网络延迟较高,可能需要设置较长的超时时间,以避免频繁地关闭和重新建立连接。2.3如果服务器负载较高,较短的超时时间可以确保连接及时释放,避免资源耗尽。建议设置一般情况下,从一个适中的值开始,如keepalive_timeout 60;(60 秒)。通过性能测试和监控来观察连接的使用情况和服务器的性能指标。如果发现连接频繁建立和关闭,可以适当延长超时时间。如果服务器资源紧张,可以考虑缩短超时时间。对于移动应用或网络不稳定的环境,可以设置相对较长的超时时间,以适应网络波动。例如keepalive_timeout 90;。对于内部网络或低延迟环境,可以设置较短的超时时间,如keepalive_timeout 30;。3.启用缓存:对于静态资源可以启用缓存,提高响应速度。方法1:在 Nginx 配置文件(通常是nginx.conf)中,找到处理静态资源的location块。在这个location块中添加expires指令来设置缓存时间:location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {expires 7d;}例如,设置缓存时间为 7 这里的7d表示 7 天,可以根据实际需求调整缓存时间。方法2:开启文件缓存Nginx 可以利用操作系统的文件缓存来提高静态资源的访问速度。在http块中添加以下指令:http {#...open_file_cache max=1000 inactive=60s;open_file_cache_valid 80s;open_file_cache_min_uses 2;open_file_cache_errors on;#...}这些指令的含义如下:open_file_cache max=1000 inactive=60s:设置文件缓存的最大数量为 1000,并且如果一个文件在 60 秒内没有被访问,就从缓存中移除。open_file_cache_valid 80s:设置缓存验证的时间为 80 秒。在这个时间内,如果文件没有被修改,就继续使用缓存中的内容。open_file_cache_min_uses 2:设置一个文件至少被访问 2 次才会被缓存。open_file_cache_errors on:当打开文件出现错误时,也将错误信息缓存起来,以便下次快速返回错误信息,而不是再次尝试打开文件。

十二、如果 Nginx 无法启动,你会从哪些方面进行排查?

1.检查配置文件是否正确,语法是否有错误。可以使用nginx -t命令进行语法检查。
2.查看日志文件,logs/error.log通常会记录启动过程中的错误信息。
3.检查端口是否被占用,如果 Nginx 尝试监听的端口已经被其他程序占用,将无法启动。
4.检查 Nginx 进程是否已经在运行,如果有残留的 Nginx 进程,可能会导致新的启动失败。

十三、当 Nginx 出现高负载时,你该如何处理?

1.检查后端服务器的状态,是否有服务器出现故障或性能问题。
2.分析访问日志,确定哪些请求导致了高负载,是否有异常的请求模式。
3.调整负载均衡策略,如增加后端服务器数量、调整权重等。
4.考虑优化 Nginx 的配置,如增加缓存、调整连接参数等。

十四、centos如何安装部署nginx

1.安装依赖 gcc sudo yum install gcc pcre-devel zlib-devel
2.下载nginx安装包sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
3.解压
4. 配置和编译 nginxsudo./configuresudo makesudo make install
5.进入sbin/nginx启动nginxcd /usr/local/nginx/sbinsudo./nginx
6.  重新加载配置文件sudo./nginx -s reload

相关文章:

  • FileLink跨网文件传输 | 一站式跨网文件交换平台,重塑企业信息流通生态!
  • mysql数据库的基本管理
  • ansible实用模块
  • LLM基础概念:Prompt
  • Desmos图形计算器分段函数
  • SpringBoot日志详解
  • 传输大咖47 | 软件企业文件传输难题?这款FTP替代工具了解一下
  • python/爬虫技术/lxml工具介绍/XML和HTML解析
  • LVS-DR实战案例,实现四层负载均衡
  • TomCat乱码问题
  • EasyAR自定义相机RTSP视频流(CustomCamera)
  • 【UR #1】外星人(dp思维技巧)
  • Java项目: 基于SpringBoot+mybatis+maven+vue图书进销存管理系统分前后台(含源码+数据库+毕业论文)
  • Linux开机logo设置
  • Unity中分辨率适配
  • 【技术性】Search知识
  • Bootstrap JS插件Alert源码分析
  • django开发-定时任务的使用
  • Fabric架构演变之路
  • javascript 哈希表
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Solarized Scheme
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 复杂数据处理
  • 基于 Babel 的 npm 包最小化设置
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 一道闭包题引发的思考
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 第二十章:异步和文件I/O.(二十三)
  • 交换综合实验一
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (3)llvm ir转换过程
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (SERIES10)DM逻辑备份还原
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三)SvelteKit教程:layout 文件
  • (十三)Maven插件解析运行机制
  • (四) 虚拟摄像头vivi体验
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转) Android中ViewStub组件使用
  • (转)Oracle存储过程编写经验和优化措施
  • (转)socket Aio demo
  • ***详解账号泄露:全球约1亿用户已泄露
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./configure,make,make install的作用
  • .form文件_SSM框架文件上传篇
  • .net core使用EPPlus设置Excel的页眉和页脚