目录
一、Nginx作为静态资源Web服务
1、动态资源和静态资源
2、CDN(Content Delivery Network)内容分发网络
3、配置语法
4、浏览器缓存
5、跨站访问
6、防盗链
二、Nginx作为代理服务
三、Nginx作为负载均衡服务
param参数解释:
调度算法:
四、Nginx作为缓存服务
1、缓存的类型
2、常用缓存配置
2、清除指定缓存
3、如何让部分页面不缓存
4、大文件分片请求
首页 后端开发 php教程 Nginx的场景实践

Nginx的场景实践

May 07, 2018 am 11:05 AM
nginx 场景 实践

这篇文章主要介绍了关于Nginx的场景实践,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一、Nginx作为静态资源Web服务

1、动态资源和静态资源

客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端。如果客户端请求的是动态网页,服务器需要先把动态网页换成静态网页,然后再把转换后的静态网页响应给客户端

静态资源的几种类型

  • 浏览器渲染:HTML、CSS、JAVASCRIPT

  • 图片:JPEG、GIF、PNG ...

  • 视频:FLV、MPEG ...

  • 文件:TXT、等任意下载文件

2、CDN(Content Delivery Network)内容分发网络

其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

3、配置语法

  1. sendfile(文件读取)

  • 配置语法:sendfile on|off;

  • 默认:无

  • Context:http,server,location,if in location

  • tcp_nopush(sendfile开启的情况下,提高网络包的传输效率)

    • 配置语法:tcp_nopush on|off;

    • 默认:无

    • Context:http,server,location

  • tcp_nodelay(keepalive连接下,提高网络包的传输实时性)

    • 配置语法:tcp_nodely on|off;

    • 默认:无

    • Context:http,server,location

  • gzip(压缩)

    • 配置语法:gzip on|off;

    • 默认:无

    • Context:http,server,location,if in location

  • gizp_comp_level(压缩比)

    • 配置语法:gzip_comp_level level;

    • 默认:无;

    • Context:http,server,location

  • gzip_http_version(gzip的http的版本)

    • 配置语法:gzip_http_version 1.0|1.1;

    • 默认:无

    • Context:http,server,location

  • gzip_static(预读gzip功能)

    • 配置语法:gzip_static on|off|always;

    • 默认:gzip_static off;

    • Context:http,server,location

    4、浏览器缓存

    HTTP协议定义的缓存机制(如:Expires;Cache-control等)
    • 浏览器无缓存:

      • 浏览器请求→无缓存→请求WEB服务器→请求相应,协商→呈现

    • 客户端有缓存

      • 浏览器请求→有缓存→校验过期→呈现

    • 校验过期机制

    校验方式 对应头信息
    校验是否过期 Expires、Cache-Control(max-age)
    协议中的Etag头信息校验 Etag
    Last-Modified有信息校验 Last-Modified
    • 第一次请求:

    图片描述

    • 第二次请求:

    图片描述

    • expires(response的headers添加Cache-Control、Expires)

      • 配置语法:expires [modified] time; expires epoch |max |off;

      • 默认:expires off;

      • Context:http,server,location,if in location

    5、跨站访问

    Nginx如何打开跨站访问? Access-Controller-Allow-Origin
    • add_header

      • 配置语法:add_header name value [always];

      • 默认:无

      • Context:http,server,location,if in location

    name可以为 Access-Controller-Allow-Origin 和  Access-Controller-Allow-Method

    6、防盗链

    基于http_refer防盗链配置模块
    • 配置语法:valid_referers none|blocked|server_names|string...;

    • 默认:无

    • Context:server,location

    valid_referers none blocked IP
    if($invalid_referer) {
        return 403;
    }
    登录后复制

    提醒:可以使用curl来测试配置好的防盗链:curl -e "http:www.baidu.com" -I IP


    二、Nginx作为代理服务

    • 正向代理

      • 对象是客户端(比如说想访问外网,把代理服务器设到代理地址,客户端可以访问任何网站)

    • 反向代理

      • 对象是服务端(并不需要关心访问的是哪一台服务器,反向代理就放在服务端。反向代理会帮我们处理请求)

    • proxy_pass

      • 配置语法:proxy_pass URL;

      • 默认:无

      • Context:location,if in location,limit_except

    其他代理的一些语法补充
    • proxy_buffering(缓冲区)

      • 语法配置:proxy_buffering on | off;

      • 默认:无;

      • Context:http,server,location

      • 扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

    • proxy_redirect(跳转重定向)

      • 配置语法:proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;

      • 默认:无

      • Context:http,server,location

    • proxy_set_header(头信息)

      • 配置语法:proxy_set_header file value;

      • 默认:proxy_set_header Host $proxy_host;proxy_set_header Connection close;

      • Context:http,server,location

      • 扩展:proxy_hide_header、proxy_set_body

    • proxy_connect_timeout(超时)

      • 配置语法:proxy_connect_timeout time;

      • 默认:无

      • Context:http,server,location

      • 扩展:proxy_read_timeout、proxy_send_timeout

    配置文件中的例子:
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect default;
    
    proxy_set_header HOST $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
    登录后复制

    三、Nginx作为负载均衡服务

    负载均衡:建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
    负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
    • upstream

      • 配置语法: upstream name {...}

      • 默认:无

      • Context:http

    简单配置例子

    upstream ronaldo {
            server ip:port [param];
            server ip:port [param];
            server ip:port [param];
    }
    server {
        location / {
            proxy_pass http://ronaldo;
        }
    }
    登录后复制

    param参数解释:

    param意义
    down当前的server暂时不参与负载均衡
    weight=num权重,num越大,轮询到的概率越大
    backup预留的备份服务器
    max_fails允许请求失败的次数
    fail_timeout经过max_fails失败后,服务暂停的时间(默认是10s)
    max_conns限制最大的接收的连接数

    调度算法:

    算法意义
    轮询按时间顺序逐一分配到不同的后端服务器
    加权轮询weight值越大,分配到的访问几率越高
    ip_hash每个请求按访问IP的hash结果分配,这样来自同一个IP就固定访问同一个后端服务器
    least_conn最少连接数,哪个服务器连接数少就分发
    url_hash按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    hash关键字值hash自定义的key
    • ip_hash:

      • 只需要在upstream中加入 ip_hash; 即可

      • 缺陷:如果走代理,那么remote_addr就不是用户真实的ip

    • url_hash(1.7.2版本以后可用):

      • 配置语法:hash key [consistent];

      • 默认:无

      • Context:upstream

    key可以是$request_uri,根据url进行hash

    四、Nginx作为缓存服务

    1、缓存的类型

    • 服务端缓存。例:memcache、reids

    • 代理缓存。例:Nginx缓存服务端的数据

    • 客户端缓存。

    图片描述

    2、常用缓存配置

    • proxy_cache_path

      • 配置语法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...

      • 默认:无

      • Context:http

    • proxy_cache

      • 配置语法:proxy_cache zone | off;

      • 默认:proxy_cache off;

      • Context:http,server,location

    • proxy_cache_valid(缓存过期周期)

      • 配置语法:proxy_cache_valid [code...] time

      • 默认:无

      • Context:http、server、location

    • proxy_cache_key(缓存的维度)

      • 配置语法:proxy_cache_key string;

      • 默认:proxy_cache_key $scheme$proxy_host$request_uri;

      • Context:http、server、location

    常见配置:

    proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off;
    
    server {
        loaction / {
            proxy_pass http://ronaldo;
            proxy_cache key_name;
            proxy_cache_valid 200 304 12h;
            proxy_cache_valid any 10m;
            proxy_cache_key $host$uri$is_args$args;
            add_header Nginx-Cache "$upstream_cache_status";
    
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
    }
    登录后复制

    2、清除指定缓存

    • rm -rf 缓存目录内容

    • 第三方扩展模块:ngx_cache_purge

    3、如何让部分页面不缓存

    • proxy_no_cache

      • 配置语法:proxy_no_cache string ...;

      • 默认:无

      • Context:http,server,location

    简单示例

    if ($request_uri ~ ^/(url_3|login|register|password\/reset)) {
        set $cookie_nocache 1;
    }
    
    location / {
        proxy_no_cache $cookie_nocache;
    }
    登录后复制

    4、大文件分片请求

    • slice

      • 语法配置:slice size;

      • 默认:slice 0;

      • Context:http、server,location

    优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。
    缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等待情况。

    相关推荐:

    关于Nginx的基础内容

    Nginx编译安装Lua模块

    以上是Nginx的场景实践的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您听不到任何人,如何修复音频
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它们
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

    确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

    linux怎么查看nginx是否启动 linux怎么查看nginx是否启动 Apr 14, 2025 pm 12:48 PM

    在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

    linux怎么启动nginx linux怎么启动nginx Apr 14, 2025 pm 12:51 PM

    在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

    nginx在windows中怎么配置 nginx在windows中怎么配置 Apr 14, 2025 pm 12:57 PM

    如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

    nginx403怎么解决 nginx403怎么解决 Apr 14, 2025 am 10:33 AM

    如何解决 Nginx 403 Forbidden 错误?检查文件或目录权限;2. 检查 .htaccess 文件;3. 检查 Nginx 配置文件;4. 重启 Nginx。其他可能原因还包括防火墙规则、SELinux 设置或应用程序问题。

    怎么把nginx访问地址设置成服务器ip 怎么把nginx访问地址设置成服务器ip Apr 14, 2025 am 11:36 AM

    要在 Nginx 中将访问地址设置为服务器 IP,请:配置服务器块,设置监听地址(如:listen 192.168.1.10:80)设置服务器名称(如:server_name example.com www.example.com),或将其留空以访问服务器 IP保存并重新加载 Nginx 以应用更改

    nginx怎么查看运行状态 nginx怎么查看运行状态 Apr 14, 2025 am 11:48 AM

    查看 Nginx 运行状态的方法有:使用 ps 命令查看进程状态;查看 Nginx 配置文件 /etc/nginx/nginx.conf;使用 Nginx 状态模块启用状态端点;使用 Prometheus、Zabbix 或 Nagios 等监控工具。

    怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

    启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

    See all articles