nginx

文章目录

  • nginx
    • 什么是nginx?
    • nginx配置文件
    • 正向代理
    • 反向代理
    • 负载均衡
    • 动静分离
    • 高可用

什么是nginx?

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

nginx的作用:
1.作为web服务器,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应.
2.反向代理,负载均衡服务器,当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
3.HTTP服务器,动静分离,即动态资源与静态资源的分离
4.解决跨域问题
5.限制用户请求次数,设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟个请求)。

nginx配置文件

Nginx的核心配置文件默认是放在**/usr/local/nginx/conf/nginx.conf**。

#指令名 指令值;  #全局块,主要设置Nginx服务器整体运行的配置指令
worker_processes  1;#events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events {worker_connections  1024;
}#http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...
http {#指令名  指令值;include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;#server块,是Nginx配置和虚拟主机相关的内容server {listen       80;server_name  localhost;#location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理location / {#指令名 指令值;root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

nginx中有三大块:全局块、events块、http块

全局块:主要设置Nginx服务器整体运行的配置指令
主要设置
user [user group]:用于配置运行Nginx服务器的worker进程的用户和用户组,默认为nobody。
worker_processes [数字]:生成工作进程的数量,默认为1.
daemon [off|on]:设置nginx是否以守护进程启动,默认值未on
pid [路径]:用来配置Nginx当前master进程的进程号ID存储的文件路径,默认为:/usr/local/nginx/logs/nginx.pid
error_log [路径+日志级别]:用来配置Nginx的错误日志存放路径,error_log logs/error.log error;
include [file]:用来引入其他配置文件,使Nginx的配置更加灵活

events块:主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
主要设置
accept_mutex [on|off]:用来设置Nginx网络连接序列化,解决惊群现象,默认为on
multi_accept [on|off]:用来设置是否允许同时接收多个网络连接,默认为off
worker_connections [数量]:用来配置单个worker进程最大的连接数,默认为512
use [method]:用来设置Nginx服务器选择哪种事件驱动来处理网络消息,默认根据操作系统定

http块:是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置,里面又包含server块location块
default_type [mine type]:用来配置Nginx响应前端请求默认的MIME类型。默认值default_type text/plain;
access_log:用来设置用户访问日志的相关属性,记录用户访问的所有请求
log_format:用来指定日志的输出格式。
sendfile [on|off]:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能,默认为off
keepalive_timeout [time]:用来设置长连接的超时时间,默认为75s
keepalive_requests [数量]:用来设置一个keep-alive连接使用的次数,默认为100

server块
listen:用来配置监听端口,默认监听80端口
server_name:用来设置虚拟主机服务名称,就是ip地址或者域名,默认值为“”

location块:
location [ = | ~ | ~ | ^~ |@ ] uri{…}*:用来设置请求的URI,可以不包含正则表达式,也可以包含正则表达式
root [path]:设置请求的根目录,默认为html
alias [path]:用来更改替换location的URI
index [file]:设置网站的默认首页
error_page [code … [=[response]] uri;]:设置网站的错误页面

正向代理

什么是正向代理?
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端(目的是为了保护客户端用户),比如客户端使用的是内网,正常情况下,是无法访问外网的网址的,此时需要一个代理服务器,客户端请求代理服务器,然后转发到目标服务器,获取的结果再返回到客户端。

反向代理

什么是反向代理?
在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。也就是说客户端访问的是反向代理服务器的ip地址,然后通过特定的匹配去转发到目标服务器上,客户端是不知道目标服务器的地址。

nginx反向代理配置文件的修改(主要修改server_name和proxy_pass)
server_name:主机名,这里填写反向代理服务器的地址
proxy_pass:nginx 代理到的地址

负载均衡

什么是负载均衡?
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。nginx默认使用轮询算法来实现负载均衡。

nginx负载均衡的配置文件的主要设置:
1.轮询
http块中设置:

upstream myserver { server ip地址; server ip地址;
}

在location块中设置:

proxy_pass  http://myserver

默认就实现轮询算法来实现负载均衡。
2.指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
http块中设置:

upstream myserver { server 192.168.0.14 weight=8; server 192.168.0.15 weight=10;
}

3.IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。也就是说通过ip地址和后端的机器数量来计算hash值,客户端发来的请求就固定在hash值一样的服务器上。
http块中设置:

upstream myserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80;
}

4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
http块中设置:

upstream myserver { server server1; server server2; fair;
}

动静分离

什么是动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,将静态资源部署在Nginx上(也可以是一个单独的服务器上),当一个请求来的时候,如果是静态资源的请求,就直接到nginx配置的静态资源目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离。

动静分离的主要配置文件修改
多加几个location块去映射到静态资源中,这样反向代理服务会直接拿到/data/image下的静态资源
在server块中:

location /image{root  /data;index index.html;
}

高可用

什么是高可用
高可用是指同一时间提供服务的只有一台设备,提供服务的设备挂掉之后,备份服务器便开始提供服务.
什么是Keepalived
它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。我们使用keepalived来管理两台设备的Nginx,并虚拟出一个IP,我们现在两台装有Nginx的设备分别是192.168..和192.168..,那么我们可以虚拟出一个192.168.xx.xx的IP,外界请求直接访问虚拟IP而不是真正的Nginx,让虚拟IP去访问提供服务的Nginx,然后再由Nginx去访问tomcat。

安装Keepalived
https://blog.csdn.net/xyang81/article/details/52554398

修改主和备nginx服务器上的keepalived 配置文件 /etc/keepalived/keepalived.conf 文件
主nginx

vrrp_script chk_http_port {script "/usr/local/nginx/nginx_check.sh"interval 2                              # 检测脚本执行的间隔weight 2
}
vrrp_instance VI_1 { state MASTER           #标示状态为MASTER 备份机为BACKUPinterface eth0         #设置实例绑定的网卡virtual_router_id 51   #同一实例下virtual_router_id必须相同priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99  advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒authentication {       #设置认证auth_type PASS     #主从服务器验证方式auth_pass 8888}virtual_ipaddress {    #设置vip192.168.101.100       #可以多个虚拟IP,换行即可}
}

备nginx

vrrp_script chk_http_port {script "/usr/local/nginx/nginx_check.sh"interval 2                              # 检测脚本执行的间隔weight 2
}
vrrp_instance VI_1 { state BACKUP           #标示状态为MASTER 备份机为BACKUPinterface eth0         #设置实例绑定的网卡virtual_router_id 51   #同一实例下virtual_router_id必须相同priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99  advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒authentication {       #设置认证auth_type PASS     #主从服务器验证方式auth_pass 8888}virtual_ipaddress {    #设置vip192.168.101.100       #可以多个虚拟IP,换行即可}
}

执行的脚本文件(用来判断nginx服务进程是否可用):

#!/bin/bash
A=`ps -C nginx ¨Cno-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致。
设置实例绑定的网卡:通过ifconfig查看本地主机的网卡名称

最通俗易懂的nginx相关推荐

  1. 通俗易懂:Nginx正反向代理,买瓶可乐就能理解

    我们都知道Nginx之所以强大,正式在于它的代理功能,特别是反向代理,在集群.负载均衡上可谓大显身手.那么什么是正向代理以及反向代理呢?今天我们不用专业术语,而是用简单易懂的买东西的原理来举例. 一. ...

  2. 通俗易懂的nginx入门

    nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...

  3. Nginx之父被抓,在职期间写的nginx竟属于公司?

    前言 前公司15年后出面声明项目所有权,在职期间写的Nginx竟属于公司? 网友:「 那么在职期间娶了个老婆,请问怎么办?」求大家赶紧帮我想想,我好慌啊- --正文从这里开始-- 俄罗斯搜索引擎Ram ...

  4. Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决

    文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...

  5. Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】

    nginx 这个轻量级.高性能的 web server 主要可以干两件事情:〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持):〉另外一个功能就是作为反向代理服 ...

  6. Nginx通俗易懂教程

    不会写配置的小伙伴可以看看反向代理神器--Nginx Proxy Manager这篇博文 Nginx简介   Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供 ...

  7. Nginx最新教程通俗易懂

    什么是Nginx?Nginx作用? ginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访 ...

  8. 【学相伴】Nginx最新教程通俗易懂-狂神说

    Nginx - 学相伴 分享人:秦疆(遇见狂神说) 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内 ...

  9. Nginx到底能干嘛?!Nginx是做什么用的?通俗易懂,前端必看!

    一. Nginx介绍 1. Nginx到底是什么,干什么用? Nginx是一个 轻量级/高性能的反向代理Web服务器,它是由C语言写的,所以速度非常快.性能非常优秀.它的主要功能就是反向代理.负载均衡 ...

最新文章

  1. SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)
  2. Qt 提取文件(exe, dll等)中的图标icon
  3. k3s 进入 CNCF 沙箱,首个进入 CNCF 的 k8s 发行版
  4. 人月神话阅读笔记02
  5. linux备份sqlserver数据库,Linux sqlServer数据库还原办法
  6. vue时间控件美化成IOS样式(移动端),vux组件datatime添加星期几/周几教程
  7. 反思对新项目如何快速上手
  8. 35岁电子工程师的艰难抉择
  9. 【深入浅出etcd系列】1. 架构概览
  10. nginx 子进程 woker process 启动失败的问题
  11. 【Google】谷歌搜索高级用法:包括指定文件类型
  12. js 计算个人所得税
  13. 软件测试周刊(第30期):专注 力量 敏捷 协作
  14. 看我横向打你内网--PthPtk
  15. 互联网寒冬来袭,面对裁员和竞争的双重压力,程序员该何去何从?
  16. hdu5399 Too simple
  17. kafka(一):kafka架构
  18. Refused to display ‘https://xxx.com.cn‘ in a frame because it set ‘X-Frame-Options‘ to ‘sameorigin‘
  19. SQL语句 sum函数为空时返回0
  20. 上海人工智能领军企业CIMC中集飞瞳先进产品领跑全球港口人工智能应用落地,先进码头人工智能科技引领智慧港口建设,降低接触提升效能

热门文章

  1. 2022年最新前端面试题、高频面试题、面试题总结
  2. 北斗导航公共服务平台首次落户四川
  3. 前端面试知识梳理(高级前端开发工程师)
  4. UI设计之什么是设计
  5. 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
  6. java方向考什么证_java认证证书两个工作方向
  7. JAVA----动态初始化数组的null判断
  8. html方法介绍,html中noframes标签的使用方法介绍
  9. 【Java加解密系列】- SM2生成密钥
  10. Python 淘宝系列(三): 模拟登陆成功后获取购物车信息