nginx模块之ngx_http_proxy_module
2017-08-23 17:57
549 查看
nginx代理
正向代理:代理请求者的身份,访问互联网的任何服务
反向代理:代理被请求者的身份。
ngx_http_proxy_module
1.proxy_pass
Syntax:
proxy_pass URL;
Default:
—
Context:
location, if in location, limit_except
1.proxy_pass后面的路径不带URI时,其会将location的URI传递给后端主机
示例:
location /uri/ {
proxy_pass http://HOST; }
2.proxy_pass后面路径是一个uri时,其会将location的uri替换为proxy_pass后端主机的uri
location /uri/ {
proxy_pass http://HOST/new_uri/; }
3.如果location定义其uri时使用了正则表达式匹配机制,则proxy_pass后的路径不能使用uri
location ~|~* PATTERN {
proxy_pass http://HOST; }
示例1:
location / {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7 响应的结果为: http://192.168.80.11/index.html
示例2:
location /bbs/ {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7/bbs/ 响应的结果为: http://192.168.80.11/bbs/index.html
示例3:
location /bbs/ {
proxy_pass http://192.168.80.11/; }
请求: http://172.16.100.7/bbs/ 响应的结果为: http://192.168.80.11/index.html
示例4:
location ~* \.(jpg|png|gif)$ {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7/1.jpg 响应的结果为: http://192.168.80.11/~*\.(jpg|png|gif)$
示例5:简单的动静分离演示
只把动态内容发送给httpd服务器
location / {
root html;
index index.html;
}
location ~* \.php$ {
proxy_pass http://192.168.80.12; }
注意:在httpd端要安装php
# yum install php -y
# vim /etc/httpd/conf/httpd.conf
编辑内容有如下几处:
(1)添加php文件类型:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
(2)定义php主页面
DirectoryIndex index.php
2.proxy_set_header
Syntax:
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-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwared_for;
将httpd日志格式中的%h改为%{X-Real-IP}i:
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
说明:
X-Real-IP :自定义请求报文的变量。
X-Forwarded-For:转发之前的那个主机是谁,这个变量更常见
$remote_addr:客户端主机
缓存相关的选项(缓存要先定义,后调用)
内存:key-value
url--->对应文件内容的校验码
每个文件的文件名,就是这个文件内容的校验码
磁盘:
分级存储
如:
文件内容校验码:f5432fe2321v2343e2d
缓存级别为2 2,则意味着:f5/43/2fe2321v2343e2d
3.定义缓存
Syntax:
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
Default:
—
Context:
http
示例:
proxy_cache_path /var/cache/nginx/proxy levels=1:2:1 keys_zone=pcache:10m max_size=1G;
4.调用缓存
Syntax:
proxy_cache zone | off;
Default:
proxy_cache off;
Context:
http, server, location
示例:
proxy_cache pcache
5.定义缓存键
Syntax:
proxy_cache_key string;
Default:
proxy_cache_key $scheme$proxy_host$request_uri;
Context:
http, server, location
示例:
proxy_cache_key $request_uri
proxy_cache_key $scheme$proxy_host$request_uri
6.为不同的响应码设定缓存时长
Syntax:
proxy_cache_valid [code ...] time;
Default:
—
Context:
http, server, location
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
7.proxy_cache_use_stale
Syntax:
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default:
proxy_cache_use_stale off;
Context:
http, server, location
确定在与代理的服务器进行通信时,哪些情况下可能会使用过时缓存的响应
和连接相关的指令
8.proxy_connect_timeout
Syntax:
proxy_connect_timeout time;
Default:
proxy_connect_timeout 60s;
Context:
http, server, locatio
与后端服务器建立的超时时长,默认为60s,最长为75s
9.proxy_read_timeout
Syntax:
proxy_read_timeout time;
Default:
proxy_read_timeout 60s;
Context:
http, server, location
客户端等待主机发送响应报文的超时时长,默认为60s
时长:两次发送响应报文之间的时长
10.proxy_send_timeout
Syntax:
proxy_send_timeout time;
Default:
proxy_send_timeout 60s;
Context:
http, server, location
向后端服务器发送请求报文的超时时长,默认为60s
正向代理:代理请求者的身份,访问互联网的任何服务
反向代理:代理被请求者的身份。
ngx_http_proxy_module
1.proxy_pass
Syntax:
proxy_pass URL;
Default:
—
Context:
location, if in location, limit_except
1.proxy_pass后面的路径不带URI时,其会将location的URI传递给后端主机
示例:
location /uri/ {
proxy_pass http://HOST; }
2.proxy_pass后面路径是一个uri时,其会将location的uri替换为proxy_pass后端主机的uri
location /uri/ {
proxy_pass http://HOST/new_uri/; }
3.如果location定义其uri时使用了正则表达式匹配机制,则proxy_pass后的路径不能使用uri
location ~|~* PATTERN {
proxy_pass http://HOST; }
示例1:
location / {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7 响应的结果为: http://192.168.80.11/index.html
示例2:
location /bbs/ {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7/bbs/ 响应的结果为: http://192.168.80.11/bbs/index.html
示例3:
location /bbs/ {
proxy_pass http://192.168.80.11/; }
请求: http://172.16.100.7/bbs/ 响应的结果为: http://192.168.80.11/index.html
示例4:
location ~* \.(jpg|png|gif)$ {
proxy_pass http://192.168.80.11; }
请求: http://172.16.100.7/1.jpg 响应的结果为: http://192.168.80.11/~*\.(jpg|png|gif)$
示例5:简单的动静分离演示
只把动态内容发送给httpd服务器
location / {
root html;
index index.html;
}
location ~* \.php$ {
proxy_pass http://192.168.80.12; }
注意:在httpd端要安装php
# yum install php -y
# vim /etc/httpd/conf/httpd.conf
编辑内容有如下几处:
(1)添加php文件类型:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
(2)定义php主页面
DirectoryIndex index.php
2.proxy_set_header
Syntax:
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-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwared_for;
将httpd日志格式中的%h改为%{X-Real-IP}i:
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
说明:
X-Real-IP :自定义请求报文的变量。
X-Forwarded-For:转发之前的那个主机是谁,这个变量更常见
$remote_addr:客户端主机
缓存相关的选项(缓存要先定义,后调用)
内存:key-value
url--->对应文件内容的校验码
每个文件的文件名,就是这个文件内容的校验码
磁盘:
分级存储
如:
文件内容校验码:f5432fe2321v2343e2d
缓存级别为2 2,则意味着:f5/43/2fe2321v2343e2d
3.定义缓存
Syntax:
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
Default:
—
Context:
http
示例:
proxy_cache_path /var/cache/nginx/proxy levels=1:2:1 keys_zone=pcache:10m max_size=1G;
4.调用缓存
Syntax:
proxy_cache zone | off;
Default:
proxy_cache off;
Context:
http, server, location
示例:
proxy_cache pcache
5.定义缓存键
Syntax:
proxy_cache_key string;
Default:
proxy_cache_key $scheme$proxy_host$request_uri;
Context:
http, server, location
示例:
proxy_cache_key $request_uri
proxy_cache_key $scheme$proxy_host$request_uri
6.为不同的响应码设定缓存时长
Syntax:
proxy_cache_valid [code ...] time;
Default:
—
Context:
http, server, location
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
7.proxy_cache_use_stale
Syntax:
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default:
proxy_cache_use_stale off;
Context:
http, server, location
确定在与代理的服务器进行通信时,哪些情况下可能会使用过时缓存的响应
和连接相关的指令
8.proxy_connect_timeout
Syntax:
proxy_connect_timeout time;
Default:
proxy_connect_timeout 60s;
Context:
http, server, locatio
与后端服务器建立的超时时长,默认为60s,最长为75s
9.proxy_read_timeout
Syntax:
proxy_read_timeout time;
Default:
proxy_read_timeout 60s;
Context:
http, server, location
客户端等待主机发送响应报文的超时时长,默认为60s
时长:两次发送响应报文之间的时长
10.proxy_send_timeout
Syntax:
proxy_send_timeout time;
Default:
proxy_send_timeout 60s;
Context:
http, server, location
向后端服务器发送请求报文的超时时长,默认为60s
相关文章推荐
- nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)
- 详细解释:nginx中ngx_http_auth_basic_module模块(HTTP Auth Basic 模块)配置及各个参数含义 .
- 解剖Nginx·模块开发篇(5)解读内置非默认模块 ngx_http_stub_status_module
- nginx限制连接数(ngx_http_limit_conn_module)模块
- 详细解释:nginx中ngx_http_auth_basic_module模块(HTTP Auth Basic 模块)配置及各个参数含义 .
- nginx 流量拷贝模块 ngx_http_mirror_module 安装试用
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- Nginx 模块之 ngx_http_limit_conn_module 限制连接数 用法
- nginx外部模块编译安装之ngx_http_accesskey_module防盗链
- Nginx 模块之 ngx_http_upstream_module 用法
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- 解剖Nginx·模块开发篇(3)ngx_http_hello_world_module 模块的基本函数实现
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_geo_module模块实录
- nginx 动态缩略图模块安装(ngx_http_image_filter_module)
- 利用nginx“ngx_http_referer_module”模块设置防盗链
- nginx限制连接数ngx_http_limit_conn_module模块笔记:二
- nginx教程第七篇:ngx_http_core_module模块提供的变量
- Nginx 模块之 ngx_http_limit_req_module 请求处理模块用法
- Nginx最新模块—ngx_http_mirror_module分析