IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx那点事儿——nginx代理缓存服务 -> 正文阅读

[系统运维]nginx那点事儿——nginx代理缓存服务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

nginx除了做静态页面之后,运用最广泛的就是作为代理服务。
Nginx Proxy服务器:
正向代理:内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。
反向代理:外网用户通过代理访问内网服务器。用户无感知,内网服务器无感知。

一. 代理缓冲服务器(HTTP协议转发)

ngx_http_proxy_module

Syntax: proxy_pass URL; # 代理的后端服务器URL
Default: —
Context: location, if in location, limit_except

缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on; # 缓冲开关
Context: http, server, location

注:proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收完再传给客户端)。

Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k; # 缓冲区大小
Context: http, server, location

Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k; # 缓冲区数量
Context: http, server, location

Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k; # 忙碌的缓冲区大小,控制同时传递给客户端的buffer数量
Context: http, server, location

头信息
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host; # 设置真实客户端地址
????proxy_set_header Connection close;
Context: http, server, location

超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s; # 连接超时
Context: http, server, location

Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location

Syntax: proxy_send_timeout time; # nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: proxy_send_timeout 60s;
Context: http, server, location

准备一台nginx服务器 作为代理服务器 (在server{}下)

location / {

proxy_pass http://192.168.93.136;

proxy_redirect default;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;

proxy_send_timeout 60;

proxy_read_timeout 60;

proxy_buffering on;

proxy_buffer_size 32k;

proxy_buffers 4 128k;

proxy_busy_buffers_size 256k;

proxy_max_temp_file_size 256k;

} 

通过访问proxy来访问web server

查看日志:

192.168.93.137 - - [19/Nov/2018:17:55:12 +0800] "GET /favicon.ico HTTP/1.0" 404 266 "-" 

"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" "192.168.93.1"

其中:
192.168.93.137 为代理服务器的ip地址
192.168.93.1 为客户端的ip地址

二. 代理缓冲服务器(TCP、UDP协议转发)

–with-stream

注:要求nginx版本大于1.9,且必须在nginx.conf里面配置(与http同级),在conf.d目录下配置无效。

详细配置(stream模块):

[root@php-fpm conf]# cat nginx.conf |egrep -v "^$|^[\t ]*#"

user  root;

worker_processes  1;

events {

  worker_connections  1024;

}

stream {

  upstream ssh_proxy130 {

    server 10.7.7.130:22 max_fails=3 fail_timeout=30s;

  }

  upstream ssh_proxy131 {

    server 10.7.7.131:22 max_fails=3 fail_timeout=30s;

  }

  server {

    listen 10130; # 访问10130端口,转发到ssh_proxy130,也就是转发到10.7.7.130:22

    proxy_pass ssh_proxy130;

  }

  server {

    listen 10131; # # 访问10131端口,转发到ssh_proxy131,也就是转发到10.7.7.131:22

    proxy_pass ssh_proxy131;

  }

}

http {

  include       mime.types;

  include       /root/proxy/nginx/conf.d/*.conf;

  default_type  application/octet-stream;

  sendfile        on;

  keepalive_timeout  65;

  gzip  on;

  server {

    listen       80;

    server_name  localhost;

    location / {

      root   html;

      index  index.html index.htm;

    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

      root   html;

    }

  }

}

三. 代理缓存服务器

ngx_http_proxy_module

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;

参数解释:

proxy_cache_path 缓存文件路径

levels 设置缓存文件目录层次;levels=1:2 表示两级目录

keys_zone 设置缓存名字和共享内存大小

proxt_cache 定义的名字

inactive 在指定时间内没人访问则缓存被删除

max_size最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location

缓存过期
Syntax: proxy_cache_valid [code …] time;
Default: —
Context: http, server, location
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;

缓存维度
Syntax: proxy_cache_key string;
Default: proxy_cache_key $schema$proxy_host$request_uri;
Context: http, server, location

http {

...

  proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;

...

}

location / {

...

  proxy_cache proxy_cache;            # 名字 对应http模块中定义的

  proxy_cache_valid 200 304 12h;      # 对200 304界面 缓存12个小时

  proxy_cache_valid any 10m;          # 除了上面的其他都缓存10分钟

  proxy_cache_key $host$uri$is_args$args;         # 定义key 通过唯一key来进行hash存取

  add_header  Nginx-Cache "$upstream_cache_status";        # 可以在浏览器中http中体现

  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;      # 如果返回错误 就下跳另一台web服务器

...

}

创建定义的缓存文件

mkdir -p  /data/nginx/cache

在浏览器访问代理缓存服务器(创建一个新的页面 防止原有的缓存)

访问成功之后 进入开发者模式 查看响应头

Nginx-Cache: MISS 未命中 新页面第一次访问都是MISS

Nginx-Cache: HIT 命中 刷新页面 变成HIT 说明已经缓存

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:39:50  更:2021-10-09 16:41:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:48:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码