当前位置: 首页 > 工具软件 > ngx_php7 > 使用案例 >

nginx模块之ngx_http_proxy_module

拓拔麒
2023-12-01
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
 类似资料: