开发者(KaiFaX)

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

nginx安装

Nginx安装完成,没有sbin目录

cd进入到nginx-1.18.0目录内执行

[root@centos7 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx
[root@centos7 nginx-1.18.0]# make
[root@centos7 nginx-1.18.0]# make install

ps:–prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录,默认使用 /usr/local/nginx

这步你会看到local目录下有一个跟你安装的nginx1.12.2同级的nginx目录,里面就有sbin目录了。

基础指令

listen:该指令用于配置网络监听。

listen *:80 | *:8080      #监听所有80端口和8080端口
listen  IP_address:port   #监听指定的地址和端口号
listen  IP_address        #监听指定ip地址所有端口
listen port               #监听该端口的所有IP连接

server_name:该指令用于虚拟主机的配置。

a. 基于名称的虚拟主机配置

server_name   name ...;

b. 基于 IP 地址的虚拟主机配置

server_name 192.168.1.1

location:该指令用于匹配 URL。

location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

location的语法

  • =开头表示精确匹配

  • 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。

  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配

  • ~ 开头表示区分大小写的正则匹配;

  • ~* 开头表示不区分大小写的正则匹配

  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

Location正则案例

#精确匹配,/后面不能带任何字符
server {listen       80;server_name  www.itmayiedu.com;#精确匹配,注解后面不能带任何字符location =/ {proxy_pass http://127.0.0.1:8080;index  index.html index.htm;}
}#匹配所有以/开头请求
server {listen       80;server_name  www.itmayiedu.com;#匹配所有以/开头请求 location / {proxy_pass http://127.0.0.1:8080;index  index.html index.htm;}}
###  以开头/itmayiedu_8080拦截  默认开启不区分大小写server {listen       80;server_name  www.itmayiedu.com;###  以开头/itmayiedu_8080 最终跳转到http://127.0.0.1:8080/;location /itmayiedu_8080/ {proxy_pass http://127.0.0.1:8080/;index  index.html index.htm;}###  以开头/itmayiedu_8080 最终跳转到http://127.0.0.1:8081/;location /itmayiedu_8081/ {proxy_pass http://127.0.0.1:8081/;index  index.html index.htm;}}
### 开头区分大小写

proxy_pass:该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。

语法结构如下:

proxy_pass URL;

index:该指令用于设置网站的默认首页。

域名重定向

server
{listen 80 ;server_name mxiaoqi.top aaa.com;if ( $host = mxiaoqi.top )#增加判断条件,当访问域名是mxiaoqi.top的时候{rewrite /(.*)  http://aaa.com/$1 permanent;#把mxiaoqi.top/后面的内容重新写到aaa.com/后面如果后面有多段则使用$2、$3以此类推#permanent是转发状态码}index index.html index.htm index.php;root /data/wwwroot/mxiaoqi.top;}

反向代理

使用 nginx 反向代理 www.123.com 直接跳转到127.0.0.1:8080

server {listen       80;server_name  www.123.com;location / {proxy_pass http://127.0.0.1:8080;# 欢迎页面,按照从左到右的顺序查找页面index  index.html index.htm index.jsp;}}

监听80端口,访问域名为www.123.com,不加端口号时默认为80端口,故访问该域名时会跳转到127.0.0.1:8080路径上。

限流配置

漏桶算法与令牌桶算法区别:主要区别在于“漏桶算法”能够强行限制数据的传输速率,

而“令牌桶算法”在能够限制数据的平均传输速率外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,因此它适合于具有突发特性的流量。

Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。

  • limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。

  • limit_req_conn 用来限制同一时间连接数,即并发限制。

limit_req_zone 参数配置

Syntax:    limit_req zone=name [burst=number] [nodelay];
Default:    —
Context:    http, server, location

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

  • 第一个参数:$binary_remote_addr表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。

  • 第二个参数:zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。

  • 第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。

limit_req zone=one burst=5 nodelay;

  • 第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。

  • 第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。

  • 第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

ngx_http_limit_conn_module 参数配置

这个模块用来限制单个IP的请求数。并非所有的连接都被计数。只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。

Syntax:    limit_conn zone number;
Default:    —
Context:    http, server, locationlimit_conn_zone $binary_remote_addr zone=addr:10m;
server {location /download/ {limit_conn addr 1;}

一次只允许每个IP地址一个连接。

负载均衡

#user  nobody;
worker_processes  1;
error_log  logs/error.log;# 开启日志
pid        logs/nginx.pid;
...upstream lyf {server 192.168.37.220:8001; # 3个tomcat服务server 192.168.37.220:8002;server 192.168.37.220:8003;}server {listen       80;server_name  192.168.37.220;# 监听iplocation / {proxy_pass   http://lyf;  # 设置代理index  index.html index.htm;}
}

keepalive 长连接提高吞吐量
keepalived :设置长连接处理的数量
proxy_http_version :设置长连接http版本为1.1
proxy_set_header :清除connection header 信息

upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}

工作方式

轮询方式是Nginx负载默认的方式

权重方式 指定每个服务的权重比例,weight和访问比率成正比

upstream  dalaoyang-server {server    localhost:10001 weight=1;server    localhost:10002 weight=2;
}

iphash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

upstream  dalaoyang-server {ip_hash; server    localhost:10001 weight=1;server    localhost:10002 weight=2;
}

最少连接

将请求分配到连接数最少的服务上。

upstream  dalaoyang-server {least_conn;server    localhost:10001 weight=1;server    localhost:10002 weight=2;
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream  dalaoyang-server {server    localhost:10001 weight=1;server    localhost:10002 weight=2;fair;
}

Consul+upsync+Nginx  实现无需raload动态负载均衡 https://www.cnblogs.com/a1304908180/p/10697278.html

传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件,

因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upstream可配置化、动态化,无需人工重新加载nginx.conf。

LVS+Keepalived+Nginx+Tomcat搭建高可用双机主从热备集群

https://blog.csdn.net/dsen726/article/details/89519013

需要明确的是:

  • Nginx两台是主备关系,只有一台在工作。后面的tomcat是集群,同时工作的。

  • keepalived是同时安装在两台Nginx上的,不过文件配置不一样

  • 这里的双机热备是指LVS,Nginx则是集群

keepalived

健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。lvs目前是集成在Linux内的。

为什么要LVS+Nginx?

一、ngix(应用层 网络七层负载均衡)

1、异步转发,请求数据和相应数据都要经过ngix,ngix和客户端建立连接

2、轮询所有的tomcat服务器,保证请求成功或者最后一台tomcat服务器也请求失败

二、lvs(网络层  网络四层负载均衡)

1、同步转发接受请求数据,lvs转发到服务器,服务器直接和客户端建立连接

nginx要承受所有的流量,当一台nigx承受不了,就需要搭建ngix集群。ngix+ngix 外层的ngix还是要承受所有流量。

lvs+ngix:lvs同步转发不会接受相应数据,LVS采用DR模式时不用响应服务器返回的内容。(通常请求数据是比较小的,响应数据会比较大)

静态资源配置

location ~ .*\.(jpg|gif|png)$ {gzip on;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/javascript image/jpeg image/gif image/png;root   /usr/share/nginx/images;}location ~ .*\.(txt|xml)$ {gzip on;gzip_http_version 1.1;gzip_comp_level 1;gzip_types text/plain application/javascript image/jpeg image/gif image/png;root   /usr/share/nginx/code;}location ~ ^/download {gzip_static on;tcp_nopush on;root /opt/app/code;}

sendfile on | off,文件读取配置

默认sendfile是关闭的,可以配置在http,server,location,if in location中

tcp_nopush on | off,多个包整合

默认是关闭状态,可以在http,server,location中配置,它的作用是在sendfile开启的情况下,提高网络包的传输效率。什么意思呢,假设服务端收到请求,需要推送10个包,为了提高传输效率,这10个包不会一个一个返回给客户端,而是将10个包攒够了后一起返回回去。

tcp_nodelay on | off,网络包的实时性传输

默认开启,可以在http,server,location中配置,它的作用是在keepalive链接下,提高网络包的传输实时性。

gzip on | off,压缩

默认是关闭状态,可以在http,server,location,if in location中配置,作用是压缩传输。一般来说浏览器是可以对压缩后的内容进行解压的。

gzip_comp_level level;压缩级别

默认的压缩级别是1,可以在http,server,location中配置,级别配置的越高,压缩的越好,但是压缩会耗费服务端的计算资源,所以要控制好压缩级别

gzip_http_version 1.0 | 1.1,压缩对http协议的支持

默认对HTTP/1.1协议的请求才会进行gzip压缩,可以配置在http,server,location中配置。当用户想要读取一个1.html文件,首先会在目录中找寻1.html.gz是否存在,所以这就导致了磁盘资源的浪费,必须要存储两份文件。

###静态资源访问server {listen       80;server_name  static.itmayiedu.com;location /static/imgs {root F:/;index  index.html index.htm;}}###动态资源访问server {listen       80;server_name  www.itmayiedu.com;location / {proxy_pass http://127.0.0.1:8080;index  index.html index.htm;}}

跨域配置

跨域就是在原站点访问域名不同的其他站点,同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

CORS 是跨域资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,属于跨源 AJAX 请求的根本解决方法。

1、普通跨域请求:只需服务器端设置Access-Control-Allow-Origin

2、带cookie跨域请求:前后端都需要进行设置

#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;

防盗链

#对源站点验证
valid_referers *.imooc.com;
#非法引入会进入下方判断
if ($invalid_referer) { return 404; }

source: https://www.yuque.com/molizhuzhu/thrgrk/rtslmc


1. 回复“m”可以查看历史记录;

2. 回复“h”或者“帮助”,查看帮助;

开发者已开通多个技术群交流学习,请加若飞微信:1321113940  (暗号k)进开发群学习交流

说明:我们都是开发者。视频或文章来源于网络,如涉及版权或有误,请您与若飞(1321113940)联系,将在第一时间删除或者修改,谢谢!

开发者:KaiFaX

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

一张小图看尽 Nginx相关推荐

  1. 一张脑图说清 Nginx 的主流程

    一张脑图说清 Nginx 的主流程 这个脑图在 nginx-1.14.0-research 上.这是我在研究nginx的http模块的时候画的.基本上把 Nginx 主流程(特别是 HTTP 的部分) ...

  2. 一张图看懂数据库十年大格局!

    [欢迎关注微信公众号:厦门微思网络] 数据库大佬们的十年兴衰 一张图看尽! ↓ 这个TOP10排名 包含了SQL和NoSQL 原始数据在这里 [数据库市场份额十年走势图] ↓ (小图看不清,点击看大图 ...

  3. 一张图看懂微服务架构路线

    目录 一张图看懂微服务架构路线 我为什么选择微服务架构? 微服务架构路线 基本思路 Docker 容器编排 Docker 容器管理 API网关 负载均衡 服务发现 事件总线 日志记录 监控和警报 分布 ...

  4. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  5. 【转】几张图看懂列式存储

    几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

  6. 一张图看懂阿里云网络产品[二] 专有网络VPC

    摘要: 一张图看懂网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 一张图看懂阿里云网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 系 ...

  7. 一张图看懂2017双11中的网络产品和技术

    摘要: 大家都知道,2017年双11又创造了新纪录,全天交易额1682亿,交易峰值32.5万笔/秒,支付峰值25.6W笔/秒,狂欢的背后是极其复杂庞大的技术系统,其中就有大量阿里云云计算相关的产品和技 ...

  8. 鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

    原标题:一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验 [手机中国新闻]9月10日下午,华为召开HDC2020大会,全新的HarmonyOS 2.0正式发布.新系统的分布式能力全面升级,同时 ...

  9. 一张图看懂SOA与微服务

    一张图看懂SOA与微服务 图片来自普元 1.SOA是站在整个企业系统的角度的治理 2.微服务的概念则小一点 3.ESB主要解决的是系统集成的问题,而且是面向已有的信息资产

  10. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...

    一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 转载于:https://www.cnblogs.com/jingzhishen/p/589278 ...

最新文章

  1. Colocation Guard公司再增1万平方英尺的数据中心空间
  2. js颜色选择器 制作分析
  3. 获取本机IP地址[JavaScript / Node.js]
  4. 【自定义排序规则】剑指 Offer 45. 把数组排成最小的数
  5. hdu 4414 Finding crosses
  6. MVC2中Area的路由注册实现
  7. 消息中间件Client模块划分
  8. 美国顶尖大学的博士是怎样练成的?
  9. laydate点击输入框闪一下不见了_爱剪辑:如何制作抖音、苹果风格的快闪视频...
  10. 背景图怎么置于底层_Ps素材教程含有刻度的背景图
  11. DoYourData Start Menu for Mac界面介绍使用指南
  12. Mariadb 10.0.12 服务器my.cf配置
  13. 优酷吃土豆后果严重么?
  14. 数值优化学习十八——SQP
  15. GSMA公布MWC19上海最新进展
  16. 大数据商机VS个人隐私 车联网的攻与守
  17. 何先振第1期:Java编程入门计算机介绍
  18. 需求工程:软件建模与分析 读书笔记三
  19. 超猛tuntap虚拟网卡实现超猛UDP隧道
  20. 苹果开发者续费以及查看账号到期时间

热门文章

  1. 谈谈目前国内IDC主机管理系统现状和使用感受
  2. 计算机鼠标左右键作用,鼠标的左右键的用途
  3. overflow解决float浮动后高度自适应问题
  4. mysql handler socket_mysql-handlersocket
  5. PyTorch手写字体识别
  6. 用友U8来料检验单参照不到报检单
  7. 在vue中使用echarts之世界各地到中国某些城市的航线
  8. 微软Win10最新补丁KB5017380更新了什么?
  9. SpringMVC中的Model和ModelAndView详解
  10. 运维工具之科来网络分析系统安装和使用