认识nginx

文章目录

    • nginx相关概念
      • 反向代理
      • 负载均衡
      • 动静分离
    • linux下nginx常用命令
      • 启动命令
      • 停止命令
      • 重启命令
    • nginx核心配置文件
    • nginx虚拟主机配置
      • location匹配规则
      • 实际使用建议

nginx相关概念

nginx是用c语言开发的一款非常高效优秀的web服务器
特点:nginx响应速度更快,在高峰时处理更快,高扩展、高可用、低内存消耗、支持高并发、支持热部署、协议更自由。

反向代理

说反向代理前,先理解什么是正向代理:
正向代理就是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得数据,客户端向代理服务器发送一个请求并指定目标服务器(原始服务器),然后代理服务器向目标服务器转交请求并将获得的内容返回客户端。
比如,访问国外的网站,可能不能直接去访问,这时就需要一台代理服务器。
认识nginx_第1张图片
反向代理:
就是位于用户和目标服务器之间,但对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端做任何设定。
认识nginx_第2张图片

负载均衡

先来了解单体架构:
认识nginx_第3张图片
特点:快速、简单。
缺点:抗压能力低,一个挂了整个服务就挂了

为了避免“一个挂了整个服务就挂了”的局面,就有了服务集群部署:
认识nginx_第4张图片
那么问题来了,多个服务用户改怎么访问,不可能让用户把每个服务的地址都记住吧,这个挂了让用户试试那个。这显然是不可能得,那么就需要有一个“东西”来管理这些集群的服务,并且对外只提供一个访问地址。这个东西就是“负载均衡”。
负载均衡:
负载均衡,英文名Load Balance,其含义是将负载(工作任务)进行平衡,分摊到多个操作单元上进行运行。
认识nginx_第5张图片

动静分离

动静分离就是在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开放在不同的系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
没有分离的场景:
动态静态资源都去一个服务器访问,如果访问静态资源过大,就可能会导致请求动态资源时间延迟
认识nginx_第6张图片
动静分离场景:
认识nginx_第7张图片

linux下nginx常用命令

启动命令

/usr/local/nginx/sbin/nginx (默认加载 conf/nginx.conf 配置文件)
/usr/local/nginx/sbin/nginx -c conf/nginx.conf (指定启动时加载的配置文件)
/usr/local/nginx/sbin/nginx -g “pid/usr/local/nginx/nginx.pid;” (指定启动时将进程id输出到哪个文件)

查看是否启动成功:
1.ps -ef | grep nginx (查看进程编号)
2.也可以查看对应的pid文件,看到对应的master进程编号表示启动成功
3.nginx默认端口是80,在浏览器中访问成功说明启动成功

停止命令

信号量停止:停止nginx的方法有很多种,一般是通过发送系统信号给nginx主进程的方式来停止服务
语法:kill 信号量类型 master进程pid
1.从容停止(kill -quit pid)
允许nginx服务将当前正在处理的网络请求处理完成,但不再接受任何新的请求

2.快速停止(kill -term pid)
立即停止当前nginx正在处理的所有网络请求

3.强制停止(kill -9 pid)
这个需要分别干掉master进程和worker进程,不推荐使用

重启命令

如果改变了nginx的配置文件想要重新加载配置的同时也不想停止服务重启服务,那么可以使用动态加载命令。
首先最好验证一下配置文件是否有语法错误的问题:
/usr/local/nginx/sbin/nginx -t
然后动态加载配置:
/usr/local/nginx/sbin/nginx -s reload

nginx核心配置文件

认识nginx_第8张图片

main块:
user nobody :设置worker进程的归属用户组
worker_processes:指定worker进程数
error_log:指定错误日志输出位置及级别
pid:指定master进程编号输出位置
events块:
worker_connections:设置单个worker进程的最大连接数
use epoll:设置网络IO模型
http块:
主要包含:
server块:一个server块就是一个web服务,可配置多个
listen:就是这个server监听的端口
server_name:这个server所对应的服务名称
location块:定义访问的资源
location下的root:定义当前web服务资源存放的位置
location下的index:系统访问的首页
error_page:可配置对应错误跳转的页面

注意:
1、每行配置的结尾需要加分号‘;’
2、如果配置项值中包含语法符号,比如空格、那么需要使用单引号或双引号括住配置项值,否则nginx会报语法错误
3、“#”是注释符

nginx虚拟主机配置

如下图所示,这三个客户端请求,域名解析出来都指向同一个ip,nginx会根据请求的域名来调用对应的服务来处理请求。
认识nginx_第9张图片
server配置:
server_name:就是域名
root:资源存放路径
index:访问的首页

location匹配规则

location会尝试根据用户请求中的URI来匹配location后跟的表达式,如果可以匹配,就选择location{}块中的配置资源来处理用户请求。
语法:location [ = | ~ | ~* ] /uri/{…}
~ :波浪线表示执行一个正则匹配,区分大小写
~ * : 表示一个正则匹配,不区分大小写
= :表示进行普通字符精确匹配
location指令分为两种模式:
1、普通字符匹配:以=开头或者没有正则引导符号
2、正则匹配:以~开头或者以 ~ *开头
普通匹配规则:
如访问http://localhost:8080/demo
nginx配置的location为:
location /demo{…}
location / {…}
nginx配置两个location都能匹配上,就会优先选用最长的匹配规则。
在普通匹配规则中可以细分出一种“精准匹配模式”,也就是通过=来直接匹配的:location =/demo{…}
注意:精准匹配模式优先级比普通匹配高

正则匹配:
比如动静分离时,静态资源访问匹配:
location ~*.(jpg|png|gif|css|js)$ {…}
意为不区分大小写匹配以.jpg或者.png或者…结尾的访问路径

匹配优先级:
1.首先看有没有精准匹配,如果有,则直接返回并停止匹配
2.判断普通命中,如果有多个命中则“记录”下最长的命中结果,但不结束匹配。
3.继续判断正则表达式,按配置里的正则顺序为准,由上到下匹配,一旦匹配成功一个,立即返回结果并结束匹配。
注意:
1.普通命中与顺序无关,因为和匹配规则长短来决定
2.正则匹配和顺序有关,从上往下匹配
认识nginx_第10张图片

实际使用建议

第一必选规则:
location =/ {proxy_pass 跳转路径}

第二必选规则:
处理静态文件请求,这是nginx作为http服务器的强项。
有两种配置模式,目录匹配或者后缀匹配,任选其一或搭配匹配使用。
目录匹配:location ^~ /static/ {root 路径}
后缀匹配:location ~*.(jpg|png|gif|css|js)$ {…}

通用规则:
用来转发动态请求到后端应用服务器:
location / {prox_pass …}

你可能感兴趣的:(nginx,nginx,linux,java,分布式,运维)