nginx学习总结(不包含安装过程)

1. nginx常见配置

http服务上支持【若干虚拟主机】。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置。

server{listen 80 default;server_name www.yonqin.com;index index.html index.htm index.php;root /data/www;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;}location ~ .*\.(js|css)?${expires      1h;}
}

  • listen 80; 监听端口,默认80,小于1024的要以root启动。可以为listen :80、listen 127.0.0.1:80等形式。
  • server_name www.yonqin.com 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名[www.baidu.comopen in new window | www.jd.comopen in new window],也可以进行正则匹配。
  • root /data/www 定义服务器的默认网站根目录位置。可以是linux的绝对路径(/xxx/xx),也可以是nginx安装目录的相对路径(html)。
  • index index.jsp index.html index.htm :定义路径下默认访问的文件名,一般跟着root放。
1.1 location 常见的配置项:

location通常用来匹配uri,其基本语法如下:

location [=|~|~*|^~] /uri/ {}

(1)=表示匹配uri时必须做到完全匹配,如

location = /index {}

(2)~表示匹配URI时是字母大小写敏感的,可以使用正则表达式。

(3)~*表示匹配URI时是忽略字母大小敏感的,可以使用正则表达式。

(4)^~表示匹配uri时只需满足前缀匹配即可

# 所有 /./img/开头的uri会全部匹配
location ^~ /./img/ {}

(5)uri参数中是可以使用正则表达式的,如匹配以 .gif .jpg和.jpeg结尾的uri,如下:

location ~* \.(gif|jpg|jpeg)$ {}

(6)以下方式可以匹配所有的uri

location / {}

(7)@ 指定一个命名的location,一般用于内部重定义请求:

location @name {…}
1.2文件路径的定义:

(1)以root方式设置资源路径

语法 root path ,默认 root html,可以在http、server、location模块中配置。

location ^~ /backend {root /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/backend/index/test.html这个文件。

(2)以alias方式设置资源路径

alias也是用来设置文件资源的,它和root不同点在于如何解读紧跟location后面的uri参数,可以在location中配置:

location ^~ /backend {alias /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/index/test.html文件。

alias会将location后的url部分丢弃掉,而root不会。

1.3 nginx做静态服务器

我们都知道,nginx的安装目录中有这样一个html的文件夹,这里只做一个基本的演示,进入后进行简单的修改即可, 修改index.html文件看 可以生效。

我们再结合nginx的基础配置文件中的以下内容:

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}
}

进入浏览器即可看到效果

2.反向代理解决跨域

在实现代理的过程中,我们需要将/api这个前缀删除掉,有以下两种方法,一种是重写url,如下:

location ^~ /api/ {rewrite ^/api(.*)$ $1 break;proxy_pass http://127.0.0.1:8080;
}

更简单的做法是,在代理地址的后边加/,这样做也会去掉前缀,但不如以上方式灵活:

location ^~ /api/ {proxy_pass http://127.0.0.1:8080/;
}

3. nginx为后端工程做负载均衡

3.1 upstream模块解读

nginx 的负载均衡功能依赖于 ngx_http_upstream_module模块。upstream 模块应该放于http{}标签内。

模块写法如下: 

upstream backend {ip_hash; server backend1.example.com;server backend2.example.com:8080;server 127.0.0.1:8080;server backup2.example.com:8080;
}

然后在location处使用如下写法:

location / {proxy_pass http://backend;
}

以上写法的意思就是,将来同一个url访问我们的服务时,服务可以由backend中的服务器按照某种特定规则轮流提供

3.2 ngixn负载均衡的五种算法

(1)round robin 轮询 (默认) 按时间顺序依次将请求分配到各个后台服务器中,挂掉的服务器自动从列表中剔除

upstream bakend {  server 192.168.0.1 down;    server 192.168.0.2;  
}

(2)weight 轮询权重 weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下,或在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

upstream bakend {  server 192.168.0.1 weight=20;  server 192.168.0.2 weight=10;  
}

(3)ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream bakend {  ip_hash;  server 192.168.0.1:88;  server 192.168.0.2:80;  
} 

(4)url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到同一台后端服务器,可以进一步提高后端服务器缓存的效率 ,Nginx本身不支持url_hash,需要安装Nginx的hash软件包。

upstream backend {  server 192.168.0.1:88;     //使用hash语句时,不能在使用weight等其他参数server 192.168.0.2:80;  hash $request_uri;  hash_method crc32;    //使用hash算法
}

(5)fair算法:可以根据页面大小和加载时间长短智能地进行负载均衡,根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,要安装upstream_fair模块才能使用。

upstream backend {  server 192.168.0.1:88;  server 192.168.0.2:80;  fair;  
}
简单的负载均衡的实践:

1. 创建简单的SpringBoot项目 ,写一个controller层的接口 返回当前Java进程的监听端口号

package spring.learn.nginx;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/nginx")
public class TestContoller {@Autowiredprivate Environment env;@RequestMapping("/test")public String test(){ // 打印当前端口return "nginx yonqin port: "+ env.getProperty("server.port");}
}

2. jar上传 并启动

3. 配置nginx.conf 

4.浏览器测试

三次请求访问不同的实例

4. nginx 做资源下载服务器

4.1 访问控制 allow/deny

Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配。如:

location /status {stub_status on;access_log off;allow 192.168.10.100;allow 172.29.73.0/24;deny all;
}
4.2、列出目录 autoindex 

打开nginx.conf文件,在location,server 或 http段中加入如下参数 ,通过配置可以做为资源下载站 下。

location ^~ /file {root   /data/www;autoindex on;autoindex_exact_size off;autoindex_localtime on;charset utf-8,gbk;
}
  • autoindex on;运行列出目录内容。另外两个参数最好也加上去。
  • autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB。
  • autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。

4.3 演示  在nginx.conf 中配置
4.4 在浏览其中访问

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

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

相关文章

贪心算法在背包问题上的运用(Python)

背包问题 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 这就是典型的背包问题(又称为0-1背包问题),也是具体的、没有经过任何延伸的背包问题模型。 背包问题的传统求解方法较为复杂,现定义有一个可以载重为8kg的背…

【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)

使用ArcGIS Pro 正射拼接处理无人机数据流程化工具,不需要额外产品许可的支持,只需要桌面是高级版许可即可支持。ArcGIS Pro处理无人机摄影测量数据主要内容有:空三、生成DOM、DSM、DTM。 文章目录 一、创建映射项目二、提交自由空三三、添加控制点优化四、提交产品生产一、…

人工智能ACA(四)--机器学习基础

零、参考资料 一篇文章完全搞懂正则化(Regularization)-CSDN博客 一、 机器学习概述 0. 机器学习的层次结构 学习范式(最高层) 怎么学 监督学习 无监督学习 半监督学习 强化学习 学习任务(中间层&#xff0…

豆包MarsCode:小U的数字插入问题

问题描述 问题分析 问题的核心是找到将数字 b 插入到数字 a 的某个位置后,使形成的数字尽可能大。需要仔细分析以下几个要点: 1. 分析数字的特性 输入的两个数字: a 是一个正整数(例如 76543)。b 是一个非负整数&am…

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)

一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…

基础元器件的学习

1、二极管 1.1二极管的符号 ZD是稳压二极管 VD、V、D是普通二极管的符号。 1.2二极管的反向恢复时间 首先交流电为上正下负,然后下正上负。当二极管接到反向电压,二极管存在寄生电容,电压不能立刻突变,当输入频率变高时&#…

EdgeX物联网平台

一、概述 EdgeX Foundry是一个由Linux基金会支持的边缘计算开源平台。它的定位是作为通用工业物联网边缘计算通用框架,部署在路由器和交换机等边缘设备上。EdgeX Foundry为各种传感器、设备或其他物联网器件提供即插即用功能,并管理它们,进一步收集和分析它们的数据,或者导…

Linux之帮助命令

一、man帮助命令 语法: man 你要查找的命令例如:man ls 即可得到你要的命令说明,按q退出 二、内置命令和外部命令 一部分基础功能的系统命令是直接内嵌在shel中的,系统加载启动之后会随着shll一起加载,常驻系统内存中…

MONI后台管理系统-swagger3(springdoc-openapi)集成

springdoc-openapi Java 库有助于使用 Spring Boot 项目自动生成 API 文档。springdoc-openapi 通过在运行时检查应用程序来根据 Spring 配置、类结构和各种注释推断 API 语义。 该库会自动生成 JSON/YAML 和 HTML 格式的页面文档。生成的文档可以使用swagger-api注释进行补充。…

GFPS扩展技术原理(七)-音频切换消息流

音频切换消息流 Seeker和Provider通过消息流来同步音频切换能力,触发连接做切换,获取或设置音频切换偏好,通知连接状态等等。为此专门定义了音频切换消息流Message Group 为0x07,Message codes如下: MAC of Audio s…

LiteFlow决策系统的策略模式,顺序、最坏、投票、权重

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 想必大家都有听过或做过职业和性格测试吧,尤其是现在的毕业生,在投了简历之后经…

【计算机视觉基础CV-图像分类】02-入门详解图像分类、经典数据集、比赛与冠军图像模型演进史

前言 图像分类(Image Classification)是计算机视觉(Computer Vision)中一项基础且核心的任务。简单来说,就是让计算机从给定的类别集合中,为一张输入图片分配一个正确的类别标签。这个过程听起来直观&…

嵌入式驱动开发详解20(IIO驱动架构)

文章目录 前言IIO子系统简介主要结构体主要API函数 IIO子系统实现SPI框架IIO框架IIO通道详解通道结构体分析通道命名分析icm20608设备通道实现 读取函数写入函数 测试测试效果命令行读取应用程序读取 后续参考文献 前言 IIO 全称是 Industrial I/O,翻译过来就是工业…

Linux 网络维护相关命令简介

目录 零. 概要一. ping二. ip命令2.1 ip address2.2 ip route2.3 ip neighbour 三. traceroute四. DNS查询4.1 nslookup4.2 dig 五. ss 查看网络连接状态 零. 概要 ⏹在Linux系统中有2套用于网络管理的工具集 net-tools 早期网络管理的主要工具集,缺乏对 IPv6、网…

Jenkins持续集成部署——jenkins安装

前言 Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)。它为软件开发团队提供了一个易于使用的平台来自动化构建、测试和部署应用程序的过程。 Jenkins 主要功能 1. 持续集成 (CI) 自动构建…

PYG - Cora数据集加载 (自动加载+手动实现)

本文从Cora的例子来展示PYG如何加载图数据集。 Cora 是一个小型的有标注的图数据集,包含以下内容: data.x:2708 个节点(即 2708 篇论文),每个节点有 1433 个特征,形状为 (2708, 1433)。data.ed…

机器学习基础算法 (二)-逻辑回归

python 环境的配置参考 从零开始:Python 环境搭建与工具配置 逻辑回归是一种用于解决二分类问题的机器学习算法,它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优,并结合垃圾邮件分类案例进…

BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)

Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出) 目录 Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)分类效果基本描述…

51c大模型~合集94

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897659 #D(R,O) Grasp 重塑跨智能体灵巧手抓取,NUS邵林团队提出全新交互式表征,斩获CoRL Workshop最佳机器人论文奖 本文的作者均来自新加坡国立大学 LinS Lab。本文的共同第一作者为上海交通大…

【大学英语】英语范文十八篇,书信,议论文,材料分析

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…