提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
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 说明已经缓存
|