Web前端必备-Nginx知识汇总

一、Nginx简介

Nginx是一个高性能、轻量级的Web和反向代理服务器, 其特点是占有内存及资源少、抗并发能力强。

Nginx安装简单、配置简洁、启动快速便捷、支持热部署、支持 SSL、拥有高度模块化的设计。

Nginx的主要功能有:

  • Web服务器
  • 反向代理
  • 负载均衡

二、运行和控制Nginx

备注: 以下命令中的 /usr/local/nginx 是nginx二进制文件的绝对路径,需根据自己实际的安装路径而定。

1.启动

/usr/local/nginx/sbin/nginx

2.重新打开日志文件

/usr/local/nginx/sbin/nginx -s reopen

3.重新载入配置文件

/usr/local/nginx/sbin/nginx -s reload

4.停止

/usr/local/nginx/sbin/nginx -s stop

5.从容停止

(1) 查看进程号

ps -ef|grep nginx

(2) 杀死进程

kill -QUIT <进程号> 或 kill -TERM <进程号>

6.强制停止

pkill -9 nginx

三、Nginx作为Web服务器

Nginx作为Web服务器, 需要定义server虚拟主机,让这些虚拟主机去处理对于特定域名或IP地址的请求。

每个server虚拟主机都定义了 location 指令,location 定义了对于指定的一组 URI 是如何匹配和进行处理的。

1.web服务器基本实例

server {
  listen 80;
  server_name www.example.com;
  location / {
  root /usr/local/www;
    index index.html;
  }
}

参数说明:

  • server 代表1个虚拟主机,可以有多个
  • server_name 匹配请求的指定域名或IP地址
  • location 配置请求的路由,匹配对应的URI
  • root 查找资源的路径(文件夹目录)
  • index 默认查找

2.location匹配规则(请求过滤)

(1) 语法

server {
   location 表达式 {
   }
}

(2) location表达式的类型

  • @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
  • / 通用匹配,任何请求都会匹配到
  • = 开头, 表示精确匹配, 只有请求的url路径与=后面的字符串完全相等才会匹配到(优先级最高)
  • ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location
  • ~ 开头表示区分大小写的正则匹配
  • ~* 开头表示不区分大小写的正则匹配

(3) location表达式的优先级

  • = 的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  • ^~ 类型表达式。一旦匹配成功,则不再查找其他匹配项。
  • ~ 和 ~* 的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
  • 常规字符串匹配类型。按前缀匹配。

3.URL重写

URL重写是指: 当请求的URL满足事先定义好的规则时, 将跳转/定向到某个规则,比如常见的伪静态、301重定向、浏览器定向等。

(1) 语法

server {
   rewrite 规则 定向路径 重写类型;
}

rewrite参数说明:

  • 规则:字符串或者正则来表示想匹配的目标url
  • 定向路径:匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组
  • 重写类型:
    • last :表示完成rewrite,浏览器地址栏URL地址不变
    • break;本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变
    • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
    • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

(2) 示例

域名跳转: 访问 http://www.aaa.com 跳转到 http://www.bbb.com

server {
  listen 80;
  server_name  www.aaa.com;
  location / {
   rewrite ^/$ www.bbb.com permanent ;
  }
}

4.try_files

try_files是指: 按顺序检查文件是否存在,返回第一个找到的文件。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数.

(1) 语法

try_files file1 files2 ... uri

参数说明:

  • 最后一个参数是回退URI, 且必须存在,否则将会出现内部500错误。
  • 只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。
  • 最后一个参数也可以是一个命名的location。
  • 最后一个参数如果不是命名的location那么$args不会自动保留,如果你想保留$args,必须在最后一个参数里明确声明。示例为:
try_files $uri $uri/ /index.php?q=$uri&$args;

(2) 示例

  • 跳转到文件

当访问:http://www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,最终返回 3.html

server {
  listen 80;
  server_name www.example.com;
  root html;
  index index.html;
  location /test {
        try_files /1.html /2.html /3.html;
    }
}
  • 跳转到变量

当访问:http://www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,则跳转到命名为abc的location

server {
  listen 80;
  server_name www.example.com;
  root html;
  index index.html;
  location /test {
    try_files /1.html /2.html @abc;
  }
  location @abc{
    rewrite ^/(.*)$  http://www.example2.com;
  }
}
  • vue-router设置HTML5 History 模式时, nginx的配置如下:
location / {
    # URL 匹配不到任何静态资源,返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
    try_files $uri $uri/ /index.html;
}

5.Gzip配置

server {
  # 开启gzip 压缩
  gzip on;
  # 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
  gzip_http_version 1.1;
  # 设置压缩级别(1-9), 值越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右
  gzip_comp_level 4;
  # 设置压缩的最小字节数, 页面Content-Length获取
  gzip_min_length 1000;
  # 设置压缩文件的类型  (text/html), 不建议压缩图片(如jpg、png本身已压缩)
  gzip_types text/plain application/javascript text/css;
 #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
 gzip_disable "MSIE [1-6]\.";
}

6.https配置

http {
  # 配置共享会话缓存大小,视站点访问情况设定
  ssl_session_cache   shared:SSL:10m;
  # 配置会话超时时间
  ssl_session_timeout 10m;
  server {
    listen 443;
    server_name www.example.com;
    ssl on;
    # 设置长连接
    keepalive_timeout 70;
    # HSTS策略
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    # 证书文件
    ssl_certificate www.example.com.crt;
    # 私钥文件
    ssl_certificate_key www.example.com.key;
    # 优先采取服务器算法
    ssl_prefer_server_ciphers on;
    # 指定SSL协议
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # 定义算法
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
    # 减少点击劫持
    add_header X-Frame-Options DENY;
    # 禁止服务器自动解析资源类型
    add_header X-Content-Type-Options nosniff;
    # 防XSS攻擊
    add_header X-Xss-Protection 1;
  }
}

四、Nginx作为反向代理服务器

server {
  listen 80;
  server_name www.example.com;
  root html;
  index index.html;
  location /test {
    # 请求host
    proxy_set_header Host $http_host;
    # 请求ip
    proxy_set_header X-Real-IP $remote_addr;
    # 请求协议
    proxy_set_header X-Scheme $scheme;
    # 代理服务器
    proxy_pass http://localhost:3000;
  }
}

当访问http://www.example.com/test时, nginx会将请求转发到http://localhost:3000上。

五、Nginx作为负载均衡

1.负载均衡的介绍

在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。

负载均衡用于从 "upstream" 模块定义的后端服务器列表中选取一台服务器接受用户的请求。

2.负载均衡的基本实例

(1) upstream模块

一个最基本的upstream模块如下:

#动态服务器组, server是后端服务器,my_server是自定义的服务器组名称。
upstream my_server {
  server localhost:8001;
  server localhost:8002;
  server localhost:8003;
}

(2) 反向代理

在upstream模块配置完成后,要让指定的访问反向代理到服务器组。

server {
  listen 80;
  server_name www.example.com;
  root html;
  index index.html;
  location / {
   # 反向代理到定义好的服务器组my_server
   proxy_pass my_server;
  }
}

(3)完整配置

http {
    upstream my_server {
    server localhost:8001;
    server localhost:8002;
    server localhost:8003;
  }
    server {
    listen      80;
    server_name www.example.com;
    root html;
    index index.html;
        location / {
            # 反向代理到定义好的服务器组my_server
            proxy_pass my_server;
        }
    }
}

3. 负载均衡策略

(1) 轮询(默认方式)

表示每个请求按时间顺序逐一分配到不同的后端服务器。

upstream my_server {
   server localhost:8001;
   server localhost:8002;
}

(2) weight(权重方式)

表示在轮询策略的基础上指定轮询的服务器的权重,默认为1,权重越高分配到需要处理的请求越多。

upstream my_server {
  server localhost:8001 weight=1;
  server localhost:8002 weight=2;
}

(3) ip_hash

表示指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream my_server {
  ip_hash;
  server localhost:8001;
  server localhost:8002;
}

备注:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

(4) least_conn

表示把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream my_server {
  least_conn;
  server localhost:8001;
  server localhost:8002;
}

(5) down

表示当前的server暂时不参与负载均衡。

upstream my_server {
  server localhost:8001 down;
  server localhost:8002;
  server localhost:8003;
}

(6) backup

表示预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因 此这台机器的压力最轻。

upstream my_server {
  server localhost:8001 backup;
  server localhost:8002;
  server localhost:8003;
}

原文地址:https://www.cnblogs.com/sufaith/p/web-nginx-knowledge.html

时间: 2024-07-31 16:56:13

Web前端必备-Nginx知识汇总的相关文章

、web前端的这么知识应该是怎样的一个知识体系架构?

.web前端的这么知识应该是怎样的一个知识体系架构?之前我以为可以以W3C为纲要,把W3C的东西学会了就够了.后来发现我错了,W3C还不全面. 真正全面的覆盖了web前端知识体系的东西是——浏览器内核——这并不是说让你去详细了解浏览器内核.做出一个浏览器.浏览器是web前端代码运行的一个平台,浏览器内核里有哪些模块,我们就需要去学习哪些东西.详细的先不说,以后有机会再分享.

好程序员web前端分享Cookie知识

好程序员web前端分享Cookie知识,今天小编为大家带来了一篇新手必看干货,接下来让我们一起来看一看吧. 一.Cookie的出现 浏览器和服务器之间的通信少不了HTTP协议,但是因为HTTP协议是无状态的,所以服务器并不知道上一次浏览器做了什么样的操作,这样严重阻碍了交互式Web 应用程序的实现. 针对上述的问题,网景公司的程序员创造了Cookie. 二.Cookie的传输 服务器端在实现Cookie标准的过程中,需要对任意HTTP请求发送Set-Cookie HTTP头作为响应的一部分: 1

Web前端之基础知识

学习web前端开发基础技术需要掌握:HTML.CSS.Javascript 1.HTML是网页内容的载体 内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2.CSS样式是表现 就像网页的外衣,比如:标题字体.颜色变化.为标题加入背景图片.边框等. 所有这些用来改变内容外观的东西称之为表现. 3.JavaScript是用来实现网页上的特效效果 比如:鼠标滑过弹出下拉菜单.鼠标滑过表格的背景颜色改变.焦点新闻的轮换. 可以理解为:有动画的.有交互的一般都用JavaSc

初学者入门web前端 C#基础知识:数组与集合

对于初学者,想要入门web前端,要有足够的信念和坚持,不然只会越走越远,我现在就深深的体会到. 我本是一个很拒绝代码的人,以前想过UI设计,但是在这段学习时间里,发现其实只要认真,代码并不是很难 所以我整理了一套前期学C#的知识点,对于后期学习JavaScript有很大的帮助. 一.数组与集合数组:能存放任意多个同类型的数据 数据项:类型相同 ①每一个数据型都有一个编号(索引或下标) ②数据的索引(下标)是一个int类型的数字 ③从0开始,依次为数据中每一个数组项编号 数组的声明与赋值 声明:数

必学的web前端工程师初期知识

前端开发需要什么开发工具?需要哪些类型的工具最好用?网络前端工程师在不同的公司有不同的功能.网站设计与网页界面开发,做网站界面开发.做网站界面开发,前台数据绑定和前台逻辑,设计.开发.数据web前端开发中需要掌握的技术:1.学习HTML,这是最简单的,最基本的是掌握div.表格表.UL Li.p.跨度.字体这些标签,这些都是最常用的,尤其是div和表,div,表也可以用于布局布局,但不灵活,基本是表处理数据. 2.学习css,这里说的css不包括css3,一般我们看到web前端开发工程师的要求里

Web前端笔试面试题汇总(转自github)

前言 本文总结了一些优质的前端面试题(多数源于网络),初学者阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链.万不可投机取巧,只求面试过关是错误的! 面试有几点需注意: 1.面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方     向↑. 2.题目类型: 技术视野.项目细节.理论知识题,算法题,开放性题,案例题. 3.进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延     展题目的区分度和深度,知道你的实际能力.因为这种关

web前端常见面试题汇总

一.理论知识 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器得到html代码 e. 浏览器解析html代码,并请求html代码中的资源 f. 浏览器对页面进行渲染呈现给用户 参考<一次完整的HTTP事务是怎样一个过程> 1.2.谈谈你对前端性能优化的理解 a. 请求数量:合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域 b. 请求带宽:开

前端必备性能知识 - http2.0

前端开发中,性能是一定绕不开的,今天就来说一下前后台通信中最重要的一个通道--HTTP2.0 最开始的通讯协议叫http1.0,作为始祖级的它,定义了最基本的数据结构,请求头和请求体,以及每一个字段的含义,它顺应了当时的互联网需求,首次实现了浏览器与后端的交互,但它有一个时代烙印,就是短连接,每次请求就会建立一个TCP连接,三次握手四次挥手,用完就关闭,假如浏览器有300个请求,那么它就建立了300个连接,这样就给服务端带来的很大的压力,即使它只是一个很小很小的请求,后来,大家发现这样不行啊,内

前端必备 Nginx 配置

Nginx (engine x) 是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用 代理服务器 (TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人Igor Sysoev编写. 基本命令 nginx -t 检查配置文件是否有语法错误 nginx -s reload 热加载,重新加载配置文件 nginx -s stop 快速关闭 nginx -s quit 等待工作进程处理完成后关闭 复制代码 搭建好nginx服务器并启动过后,我们先看nginx默认配置,再逐个介绍不同使