Nginx反代配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx反代配置相关的知识,希望对你有一定的参考价值。

目录

  • ngx_http_proxy_module模块

  • ngx_http_headers_module模块

  • ngx_http_upstream_module模块

  • ngx_stream_core_module模块

ngx_http_proxy_module模块

ngx_http_proxy_module模块允许传递请求到另一个服务器,实现反向反向代理

1、proxy_pass

设置一个代理服务器的地址,协议,和一个可选的URI的位置应该映射。作为一个协议,“HTTP”或“https”可以指定。地址可以被指定为一个域名或IP地址,和一个可选的端口

语法:roxy_pass URL; 
Default: proxy_cache off 
Context: location, if in location, limit_except

注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;

server { 
… 
server_name HOSTNAME; 
location /uri/ { 
proxy_pass http://host[:port]

… 
}

http://HOSTNAME/uri –> http://host/uri

proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri; 
server { 
… 
server_name HOSTNAME; 
location /uri/ { 
proxy_pass http://host/new_uri/

… 
}

http://HOSTNAME/uri/ –> http://host/new_uri/

如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须不能使用uri; 用户请求时传递的uri将直接附加代理到的服务的之后; 
server { 
… 
server_name HOSTNAME; 
location ~|~* /uri/ { 
proxy_pass http://host

… 
}

http://HOSTNAME/uri/ –> http://host/uri/

2、proxy_set_header

设定发往后端主机的请求报文的请求首部的值

语法:proxy_set_header field value; 
Default: proxy_set_header Host $proxy_host; 
proxy_set_header Connection close; 
Context: http, server, location

proxy_set_header X-Real-IPproxy_add_x_forwarded_for;

3、proxy_cache_path

定义可用于proxy功能的缓存

语法:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; 
Context: http

4、proxy_cache

指明要调用的缓存,或关闭缓存机制

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

5、proxy_cache_key

缓存中用于“键”的内容;

语法:proxy_cache_key string; 
默认值:proxy_cache_key proxy_host$request_uri; 
Context: http, server, location

6、proxy_cache_valid

定义对特定响应码的响应内容的缓存时长;

语法:proxy_cache_valid [code …] time; 
Default: — 
Context: http, server, location

定义在http{…}中; 
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;

定义在需要调用缓存功能的配置段,例如server{…}; 
proxy_cache pxycache; 
proxy_cache_key $request_uri; 
proxy_cache_valid 200 302 301 1h; 
proxy_cache_valid any 1m;

7、proxy_cache_use_stale

不确定缓存的响应可以用代理服务器的通信过程中出现错误时,使用该指令的参数匹配的proxy_next_upstream指令的参数

语法:proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …; 
Default: proxy_cache_use_stale off; 
Context: http, server, location

8、proxy_cache_methods

如果客户端请求方法在这个指令中列出,那么响应将被缓存。“获取”和“头”的方法总是添加到列表中,虽然建议明确指定它们。又见proxy_no_cache指令。

语法:proxy_cache_methods GET | HEAD | POST …; 
Default: proxy_cache_methods GET HEAD; 
Context: http, server, location

9、proxy_hide_header

隐藏所定义的首部,用户不可见

语法:proxy_hide_header field; 
Default: — 
Context: http, server, location

10、proxy_connect_timeout

定义了用于建立与代理服务器连接超时,这个超时通常不能超过75秒。 
默认60s

语法:proxy_connect_timeout time; 
Default: proxy_connect_timeout 60s; 
Context: http, server, location

11、proxy_buffers

集数和用于从代理服务器读取响应缓冲区的大小,为一个单一的连接。默认情况下,缓冲区大小等于一个内存页,4K或8K

语法:proxy_buffers number size; 
Default: proxy_buffers 8 4k|8k; 
Context: http, server, location

ngx_http_headers_module模块

ngx_http_headers_module模块允许添加“过期”和“缓存控制头字段,和任意的领域,一个响应头。 
向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;

1、add_header

添加自定义首部;

语法:add_header name value [always]; 
Default: — 
Context: http, server, location, if in location

add_header X-Via server_name;

2、expires

用于定义Expire或Cache-Control首部的值;

语法:expires [modified] time; 
expires epoch | max | off; 
Default: expires off; 
Context: http, server, location, if in location

ngx_http_upstream_module模块

ngx_http_upstream_module模块用于定义服务器可以通过proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass参照组,和memcached_pass指令。

1、upstream

定义一组服务器。服务器可以在不同的端口上监听。此外,服务器监听TCP和Unix域套接字可以混合。

语法:upstream name { … } 
Context: http

upstream httpdsrvs { 
server … 
server… 
… 
}

2、server

在upstream上下文中server成员,以及相关的参数;Context: upstream 
语法:server address [parameters];

address的表示格式: 
unix:/PATH/TO/SOME_SOCK_FILE 
IP[:PORT] 
HOSTNAME[:PORT]

parameters: 
weight=number 
权重,默认为1; 
max_fails=number 
失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用; 
fail_timeout=time 
设置将服务器标记为不可用状态的超时时长; 
max_conns 
当前的服务器的最大并发连接数; 
backup 
将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用; 
down 
标记为“不可用”;

3、least_conn

最少连接调度算法,当server拥有不同的权重时其为wlc; 只适用于upstream段当中

4、 ip_hash

源地址hash调度方法;只适用于upstream当中

5、hash

基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组合;只适用于upstream段当中 
作用:将请求分类,同一类请求将发往同一个upstream server;

语法:hash key [consistent];

示例: 
hash remote_addr;

6、keepalive

为每个worker进程保留的空闲的长连接数量;只适用于upstream段当中

ngx_stream_core_module模块

模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器;

1、stream

定义stream相关的服务;需要定义在main段当中 
stream { 
upstream sshsrvs { 
server 192.168.22.2:22; 
server 192.168.22.3:22; 
least_conn; 
}

server { 
listen 10.1.0.6:22022; 
proxy_pass sshsrvs; 

}

2、listen

所监听的地址端口 
listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];


以上是关于Nginx反代配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx 反代 ngrok

Nginx/Httpd反代tomcat配置

Nginx反代配置

Nginx反代配置

openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案

ansible实现nginx双主模式反代,keepalived高可用,memcached缓存