资讯专栏INFORMATION COLUMN

Web前端必备-Nginx知识汇总

whatsns / 1408人阅读

摘要:安装简单配置简洁启动快速便捷支持热部署支持拥有高度模块化的设计。备注在版本之前,不能在中使用权重。不能与同时使用。当有服务器需要剔除,必须手动掉。表示把请求转发给连接数较少的后端服务器。表示当前的暂时不参与负载均衡。表示预留的备份机器。

本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发、Nodejs、Python、Linux、IT资讯等板块.

一、Nginx简介

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

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

Nginx的主要功能有:

Web服务器

反向代理

负载均衡

二、运行和控制Nginx

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

1.启动

</>复制代码

  1. /usr/local/nginx/sbin/nginx

2.重新打开日志文件

</>复制代码

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

3.重新载入配置文件

</>复制代码

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

4.停止

</>复制代码

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

5.从容停止

(1) 查看进程号

</>复制代码

  1. ps -ef|grep nginx

(2) 杀死进程

</>复制代码

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

6.强制停止

</>复制代码

  1. pkill -9 nginx

三、Nginx作为Web服务器

Nginx作为Web服务器, 需要定义server虚拟主机,让这些虚拟主机去处理对于特定域名或IP地址的请求。
每个server虚拟主机都定义了 location 指令,location 定义了对于指定的一组 URI 是如何匹配和进行处理的。

1.web服务器基本实例

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. location / {
  5. root /usr/local/www;
  6. index index.html;
  7. }
  8. }

参数说明:

server 代表1个虚拟主机,可以有多个

server_name 匹配请求的指定域名或IP地址

location 配置请求的路由,匹配对应的URI

root 查找资源的路径(文件夹目录)

index 默认查找

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

(1) 语法

</>复制代码

  1. server {
  2. location 表达式 {
  3. }
  4. }

(2) location表达式的类型

@ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

/ 通用匹配,任何请求都会匹配到

= 开头, 表示精确匹配, 只有请求的url路径与=后面的字符串完全相等才会匹配到(优先级最高)

^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location

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

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

(3) location表达式的优先级

= 的优先级最高。一旦匹配成功,则不再查找其他匹配项。

^~ 类型表达式。一旦匹配成功,则不再查找其他匹配项。

~ 和 ~* 的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。

常规字符串匹配类型。按前缀匹配。

3.URL重写

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

(1) 语法

</>复制代码

  1. server {
  2. rewrite 规则 定向路径 重写类型;
  3. }

rewrite参数说明:

规则:字符串或者正则来表示想匹配的目标url

定向路径:匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组

重写类型:

last :表示完成rewrite,浏览器地址栏URL地址不变

break;本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变

redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

(2) 示例

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

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.aaa.com;
  4. location / {
  5. rewrite ^/$ www.bbb.com permanent ;
  6. }
  7. }

4.try_files

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


(1) 语法

</>复制代码

  1. try_files file1 files2 ... uri

参数说明:

最后一个参数是回退URI, 且必须存在,否则将会出现内部500错误。

只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。

最后一个参数也可以是一个命名的location。

最后一个参数如果不是命名的location那么$args不会自动保留,如果你想保留$args,必须在最后一个参数里明确声明。示例为:

</>复制代码

  1. try_files $uri $uri/ /index.php?q=$uri&$args;

(2) 示例

跳转到文件

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

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. root html;
  5. index index.html;
  6. location /test {
  7. try_files /1.html /2.html /3.html;
  8. }
  9. }

跳转到变量

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

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. root html;
  5. index index.html;
  6. location /test {
  7. try_files /1.html /2.html @abc;
  8. }
  9. location @abc{
  10. rewrite ^/(.*)$ http://www.example2.com;
  11. }
  12. }

vue-router设置HTML5 History 模式时, nginx的配置如下:

</>复制代码

  1. location / {
  2. # URL 匹配不到任何静态资源,返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
  3. try_files $uri $uri/ /index.html;
  4. }

5.Gzip配置

</>复制代码

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

6.https配置

</>复制代码

  1. http {
  2. # 配置共享会话缓存大小,视站点访问情况设定
  3. ssl_session_cache shared:SSL:10m;
  4. # 配置会话超时时间
  5. ssl_session_timeout 10m;
  6. server {
  7. listen 443;
  8. server_name www.example.com;
  9. ssl on;
  10. # 设置长连接
  11. keepalive_timeout 70;
  12. # HSTS策略
  13. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
  14. # 证书文件
  15. ssl_certificate www.example.com.crt;
  16. # 私钥文件
  17. ssl_certificate_key www.example.com.key;
  18. # 优先采取服务器算法
  19. ssl_prefer_server_ciphers on;
  20. # 指定SSL协议
  21. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  22. # 定义算法
  23. 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";
  24. # 减少点击劫持
  25. add_header X-Frame-Options DENY;
  26. # 禁止服务器自动解析资源类型
  27. add_header X-Content-Type-Options nosniff;
  28. # 防XSS攻擊
  29. add_header X-Xss-Protection 1;
  30. }
  31. }

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

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. root html;
  5. index index.html;
  6. location /test {
  7. # 请求host
  8. proxy_set_header Host $http_host;
  9. # 请求ip
  10. proxy_set_header X-Real-IP $remote_addr;
  11. # 请求协议
  12. proxy_set_header X-Scheme $scheme;
  13. # 代理服务器
  14. proxy_pass http://localhost:3000;
  15. }
  16. }

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

五、Nginx作为负载均衡

1.负载均衡的介绍

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

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

2.负载均衡的基本实例

(1) upstream模块

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

</>复制代码

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

(2) 反向代理

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

</>复制代码

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. root html;
  5. index index.html;
  6. location / {
  7. # 反向代理到定义好的服务器组my_server
  8. proxy_pass my_server;
  9. }
  10. }

(3)完整配置

</>复制代码

  1. http {
  2. upstream my_server {
  3. server localhost:8001;
  4. server localhost:8002;
  5. server localhost:8003;
  6. }
  7. server {
  8. listen 80;
  9. server_name www.example.com;
  10. root html;
  11. index index.html;
  12. location / {
  13. # 反向代理到定义好的服务器组my_server
  14. proxy_pass my_server;
  15. }
  16. }
  17. }

3. 负载均衡策略

(1) 轮询(默认方式)

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

</>复制代码

  1. upstream my_server {
  2. server localhost:8001;
  3. server localhost:8002;
  4. }

(2) weight(权重方式)

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

</>复制代码

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

(3) ip_hash

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

</>复制代码

  1. upstream my_server {
  2. ip_hash;
  3. server localhost:8001;
  4. server localhost:8002;
  5. }

备注:

在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。

ip_hash不能与backup同时使用。

此策略适合有状态服务,比如session。

当有服务器需要剔除,必须手动down掉。

(4) least_conn

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

</>复制代码

  1. upstream my_server {
  2. least_conn;
  3. server localhost:8001;
  4. server localhost:8002;
  5. }

(5) down

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

</>复制代码

  1. upstream my_server {
  2. server localhost:8001 down;
  3. server localhost:8002;
  4. server localhost:8003;
  5. }

(6) backup

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

</>复制代码

  1. upstream my_server {
  2. server localhost:8001 backup;
  3. server localhost:8002;
  4. server localhost:8003;
  5. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40584.html

相关文章

  • 十年铲码,八大体系超千篇数百万字技术笔记系列汇总(GitBook 悦享版)

    摘要:十年铲码,八大体系超千篇数百万字技术笔记系列汇总悦享版十年铲码两茫茫,纵思量,却易忘不觉笔者步入程序员已有十年。十年之期,正巧笔者从阿里离开,重回打印制造业的怀抱,希望能依托于设备优势逐步真正构建分布式制造网络。 showImg(https://segmentfault.com/img/remote/1460000020151971); 十年铲码,八大体系超千篇数百万字技术笔记系列汇总...

    Ashin 评论0 收藏0
  • 平时积累的前端资源,持续更新中。。。

    本文收集学习过程中使用到的资源。 持续更新中…… 项目地址 https://github.com/abc-club/f... 目录 vue react react-native Weex typescript Taro nodejs 常用库 css js es6 移动端 微信公众号 小程序 webpack GraphQL 性能与监控 高质文章 趋势 动效 数据结构与算法 js core 代码规范...

    acrazing 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • 前端开发者必备Nginx知识

    摘要:反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。如何实现负载均衡指定后端服务器地址列表在中拦截响应请求,并将请求转发到中配置的服务器列表。 nginx在应用程序中的作用 解决跨域 请求过滤 配置gzip 负载均衡 静态资源服务器 nginx是一个高性能的HTTP和反向代理服务器,也是一个通用的TCP/UDP代理服务器,最初由俄...

    pumpkin9 评论0 收藏0

发表评论

0条评论

whatsns

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<