Nginx静态资源web服务(三)

本文涉及的产品
.cn 域名,1个 12个月
简介: Nginx静态资源web服务(三)

文件读取

sendfile

Syntax:sendfile on|off

Default:sendfile off

Context:http,server,location,if in location

tcp_nopush

Syntax:tcp_nopush on|off

Default:tcp_nopush off

Context:http,server,location

作用:sendfile开启的情况下,提高网络包的传输效率

tcp_nodelay

Syntax:tcp_nodelay on|off

Default:tcp_nodelay off

Context:http,server,location

作用:keepalive连接下,提高网络包的传输实时性

压缩(Gzip)

如果我们租用了一个带宽很低的服务器,网站访问速度会很慢,这时我们可以通过让nginx开启GZIP压缩来提高网站的访问速度

Syntax:gzip on|off

Default:gzip off

Context:http,server,location,if in location

作用:压缩传输

压缩比

Syntax:gzip_comp_level level;

Default:gzip_comp_level 1;

Context:http,server,location

http协议版本

Syntax:gzip_http_version 1.0|1.1;

Default:gzip_http_version 1.1;

Context:http,server,location

配置文件如下

server {
    listen       8060;
    server_name  localhost;
    sendfile on;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /opt/app/code;
        index  index.html index.htm;
    }
    #gzip使用
    location ~ .*\.(jpg|gif|png)$ {
        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        root   /opt/app/code/images;
    }
    location ~ .*\.(txt|xml)$ {
        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 1;
        gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        root   /opt/app/code/doc;
    }
    #gz文件预读
    location ~ ^/download {
         gzip_static on;
         tcp_nopush on;
         root /opt/app/code;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
http {
    gzip on; #开启gzip
    gzip_disable "msie6"; #IE6不使用gzip
    gzip_vary on; #设置为on会在Header里增加 "Vary: Accept-Encoding"
    gzip_proxied any; #代理结果数据的压缩
    gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值
    gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果
    gzip_http_version 1.1; #识别http协议的版本
    gzip_min_length 1k; #设置允许压缩的页面最小字节数,超过1k的文件会被压缩
    gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩
    include /etc/nginx/conf.d/*.conf;
}

地址重写

有的时候我们的网站更换了域名,但还有用户在使用老的域名访问,这时可以通过nginx的地址重写来让用户跳转到新的域名进行访问。

server {
    listen       80;
    server_name  www.aaa.com; 
    rewrite "^/(.*)$" http://www.bbb.com/$1; #地址重写到新地址
    location / {
        root   /usr/share/nginx/html/docs; 
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

此时访问旧域名www.aaa.com会直接跳转到www.bbb.com去。

过期时间配置

location ~ .*\.(htm|html)$ {
    expires 24h;
    root /opt/app/code;
}

跨域访问配置

允许http://www.bushro.com进行跨域访问。

location ~ .*\.(htm|html)$ {
    add_header Access-Control-Allow-Origin http://www.bushro.com;
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
    root /opt/app/code;
}

防盗链

目的:防止资源被盗用

语法:valid_referers none | blocked | server_names | string...

说明:如果valid_referers条件判断未通过,nginx则会赋值invalid_referer 为true

    location ~ .*\.(jpg|gif|png)$ {
        valid_referers none blocked 192.168.254.130;
        if ($invalid_referer) {
            return 403;
        }
        root   /opt/app/code/images;
    }

none:不允许“Referer”来源头部为空的情况

blocked:“Referer”不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头,而是“Referer: XXXXXXX”这种形式

server_names “Referer”来源头部包含当前的server_names(当前域名)

代理服务

正向代理服务的对象:客户端

反向代理服务的对象:服务端

配置语法:

Syntax:proxy_pass URL;

Default:----

Context:location,if in location,limit_except

在conf.d目录下创建两个xx.conf的配置文件,只要值以conf结尾的配置文件都会被加载

8089端口配置

server {
    listen       8089;
    server_name  localhost bushro.club;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /opt/app/code2;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

8060端口配置

server {
    listen       8060;
    server_name  localhost bushro.club;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    location ~ /test_proxy.html$ {
       proxy_pass http://127.0.0.1:8089;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

在8060这里访问会代理到http://127.0.0.1:8089下,就可以通过8060这个端口去访问8089下code2下的资源

跳转重定向配置:

Syntax:proxy_redirect default;

proxy_redirect off;proxy_redirect redirect replacement;

Default:proxy_redirect default;

Context:location,server,http

超时配置:

Syntax:proxy_connect_timeout time;

Default:proxy_connect_timeout 60s;

Context:location,server,http

扩张:proxy_read_timeout proxy_sent_timeout

综合配置:

location /{
    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;
    #nginx缓冲区配置
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
}

可以把这些通用的单独放在一个文件里面让每个location引用include+文件名

负载均衡

通过80这个服务代理去访问8001,8001这两个端口的服务,默认采用轮询的方式

8001配置

server {
    listen       8001;
    server_name  localhost bushro.club;
    location / {
        #在/opt/app/code1目录下有index.html页面
        root   /opt/app/code1;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

8002配置

server {
    listen       8002;
    server_name  localhost bushro.club;
    location / {
        #在/opt/app/code2目录下有index.html页面
        root   /opt/app/code2;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

80端口配置

#负载均衡组的配置需要放在server外面,bushro这个是随便起的名字
upstream bushro{
      server 192.168.254.130:8001;
      server 192.168.254.130:8002;
}
server {
    listen       80;
    server_name  localhost bushro.club;
    location / {
        #所有的请求代理到上面的组里面去处理
        proxy_pass http://bushro;
        #公告模块配置
        include public;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

可以在组里面进行一些参数配置:

参数 作用
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停的时间
max_conns 限制最大的接收的连接数

调度算法

参数 作用
轮询 按时间顺序逐一分配到不同的后端服务器
加权轮询 weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器
url_hash 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少连接数,那个机器连接数少就分发
hash关键数值 hash自定义的key
upstream bushro{
    #对于同一个ip,发送到同一个服务器
    #ip_hash
    #同一个url(也就是同一个资源请求)会到达同一台机器
    #hash $request_uri
}

缓存配置

upstream bushro{
      server 192.168.254.130:8001;
      server 192.168.254.130:8002;
}
proxy_cache_path /opt/app/cache levels=1:2 keys_zone=bushro_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
    listen       80;
    server_name  localhost bushro.club;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        proxy_cache bushro_cache;
        proxy_cache_valid 200 302 304 60m;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_pass http://bushro;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        include public;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
proxy_cache_path:定义缓存存储位置
levels=1:2:设置缓存目录深度,最多能创建3层。
keys_zone=bushro:10m:定义缓存区域名称和内存缓存空间大小。
max_size=10g:磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件。
inactive=60m:设置缓存时间,60分钟内没有被访问过就删除。
use_temp_path=off:不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off。
proxy_cache bushro:缓存区域名称,要和keys_zone定义的名称一致
proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟
proxy_cache_valid any 10m:其他状态的过期时间10分钟
proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内
proxy_next_upstream:当后端访问服务器出现了不正常错误时,去访问下一台服务器。
upstream_cache_status:添加一个请求头看缓存是否命中HIT:MISS

让部分页面不缓存:

if(request_uri ~ ^/(url2|login|register|password\//reset)){
    set $cookie_nocache 1;
}
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authorization;
相关文章
|
3月前
|
XML JSON 数据安全/隐私保护
Web服务
【10月更文挑战第18天】Web服务
66 9
|
3月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
87 5
|
3月前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
193 69
|
2月前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。
|
2月前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
60 3
|
2月前
|
JSON Go UED
Go Web服务中如何优雅关机?
在构建 Web 服务时,优雅关机是一个关键的技术点,它确保服务关闭时所有正在处理的请求都能顺利完成。本文通过一个简单的 Go 语言示例,展示了如何使用 Gin 框架实现优雅关机。通过捕获系统信号和使用 `http.Server` 的 `Shutdown` 方法,我们可以在服务关闭前等待所有请求处理完毕,从而提升用户体验,避免数据丢失或不一致。
34 1
|
2月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
3月前
|
XML JSON 安全
定义Web服务
【10月更文挑战第18天】定义Web服务
87 12
|
3月前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
2月前
|
JavaScript 前端开发 Java
SpringBoot_web开发-webjars&静态资源映射规则
https://www.91chuli.com/ 举例:jquery前端框架
28 0