nginx代理

代理服务

Syntax: proxy_pass URL;
Default: --;
Content: server,locaion

正向代理

代理的是客户端,服务端看不到真正的客户端。如:通过公司代理服务器上网

配置

proxy_pass $scheme://$host$request_uri;
resolver 8.8.8.8;

代理https请求

需要第三方模块

https://github.com/chobits/ngx_http_proxy_connect_module

配置

 server {
     listen                         3128;

     # dns resolver used by forward proxying
     resolver                       8.8.8.8;

     # forward proxy for CONNECT request
     proxy_connect;
     proxy_connect_allow            443 563;
     proxy_connect_connect_timeout  10s;
     proxy_connect_read_timeout     10s;
     proxy_connect_send_timeout     10s;

     # forward proxy for non-CONNECT request
     location / {
         proxy_pass http://$host;
         proxy_set_header Host $host;
     }
 }

反向代理

代理的是服务端,客户端看不到正在的服务端。

resolver 8.8.8.8; # 谷歌的域名解析地址,配置域名进行访问的时候,需要配置此项目,否则会报502错误
server {
	location ~ .*\.json$ {
		# $http_host 要访问的主机名, $request_uri 请求路径
        proxy_pass http://$http_host$request_uri;
    }
}

官网解释

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache

配置

http模块:
proxy_cache_path /ngx_tmp levels=1:2 keys_zone=test_cache:100m inactive=1d max_size=10g ;
location模块:
add_header  Nginx-Cache "$upstream_cache_status";
proxy_cache test_cache;
proxy_cache_valid 168h;

proxy_cache_use_stale

默认off

在什么时候可以使用过期缓存

可选error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off

proxy_cache_background_update

默认off

运行开启子请求更新过期的内容。同时会把过期的内容返回给客户端

proxy_no_cache proxy_cache_bypass

指定什么时候不使用缓存而直接请求上游服务器

proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma    $http_authorization;

如果这些变量如果存在的话不为空或者不等于0,则不使用缓存

proxy_cache_convert_head

默认 on

是否把head请求转换成get请求后再发送给上游服务器 以便缓存body里的内容

如果关闭 需要在 cache key 中添加 $request_method 以便区分缓存内容

proxy_cache_lock

默认off

缓存更新锁

proxy_cache_lock_age

默认5s

缓存锁超时时间

断点续传缓存 range

当有完整的content-length之后即可断点续传

在反向代理服务器中需向后传递header

proxy_set_header Range $http_range;

proxy_cache_key中增加range

proxy_cache_max_range_offset

range最大值,超过之后不做缓存,默认情况下 不需要对单文件较大的资源做缓存

proxy_cache_methods

默认 head get

proxy_cache_min_uses

默认1

被请求多少次之后才做缓存

proxy_cache_path

path 指定存储目录

以cache_key取md5值

  • levels=1:2

目录层级数及目录名称位数

取mdb5后几位

TMPFS

  • use_temp_path

默认创建缓存文件时,先向缓冲区创建临时文件,再移动到缓存目录

是否使用缓冲区

  • inactive

指定时间内未被访问过的缓存将被删除

缓存清理

purger

需要第三方模块支持

https://github.com/FRiCKLE/ngx_cache_purge

配置

        location ~ /purge(/.*) {

            proxy_cache_purge  test_cache  $1;
        }
        自定义cachekey
         proxy_cache_key $uri;

proxy_cache_key

默认$scheme$proxy_host$request_uri

缓存的key

proxy_cache_revalidate

如果缓存过期了,向上游服务器发送“If-Modified-Since” and “If-None-Match来验证是否改变,如果没有就不需要重新下载资源了

proxy_cache_valid

可以针对不容http状态码设置缓存过期时间

不设置状态码会默认200, 301, 302

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301      1h;
proxy_cache_valid any      1m;

any指其他任意状态码

posted @ 2023-06-23 01:32  转角90  阅读(60)  评论(0编辑  收藏  举报