http proxy模块参数

nginx功能的代理功能是是通过http proxy模块来实现的。默认在安装Nginx是已经安装了http proxy模块,可以直接使用。

http模块相关参数

说明

proxy_set_header

设置http请求header项传给后端服务节点,例如:可实现让代理后端的服务节点获取访问客户端用户的真实IP地址

client_body_buffer_size

用于指定客户端请求主体缓冲区大小,此处如果了解前面的http请求包的原理就好理解了

proxy_connect_timeout

表示反向代理与后端节点服务器连接的超时时间,即发起握手等候相应超时时间

proxy_send_timeout

表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则Nginx将断开这个连接

proxy_read_timeout

设置Nginx从代理的 后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的相应时间,其实是Nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size

设置缓存区大小,默认该缓存区等于指令proxy_buffer设置的大小

proxy_buffer

设置缓存区的数量和大小,Nginx从代理的后端服务器获取的响应信息,会放置到缓存区

proxy_busy_buffer_size

用于设置系统很忙是可以使用的proxy_buffer大小,官方推荐大小为proxy_buffers*2

proxy_temp_file_write_size

指定proxy缓冲临时文件的大小

相关重要参数

相关重要参数

参数说明

proxy_psss http://server_pools

通过proxy_pass功能把用户的请求转向到反向代理定义的upstream服务器池

proxy_set_header Host $host

在代理后端服务器发送的http请求头中加入host字段信息,用于后端服务器配置有多个虚拟主机主机是可以识别是那个虚拟主机。这是节点服务器多虚拟主机时的关键配置

proxy_set_header X-Forwarded-For $remote_addr;

        

在反向代理服务器发送http请求头加入X-Forwarded-For字段信息,用于后端服务程序、日志等接受记录真实的IP,而不是代理服务器的IP这是反向代理时,节点服务器获取用户真实IP的必要功能配置

后面服务器,记录日志格式,main

根据URL中的目录地址实现代理转发说明

1.1.1 案例背景:通过Nginx实现动静分离,即通过Nginx反向代理规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,已解决网站性能、安全、用户体验等重要问题。

下面图适合网站前端只使用同一个域名提供服务的场景,例如,用户访问的域名是www.etiantian.org,然后,当用户请求求www.etiantian.org/upload/xx地址时,代理会分配请求到上传服务器池处理数据;当用户请求

www.etiantian.org/static/xx地址时,代理会分配请求到静态服务器池请求数据;当用户请求

www.etiantian.org/xx地址时候,即不包含上述指定的目录地址路径时,代理会分配请求到默认的动态服务器池请求数据(注意:上面的xx表示任意路径)

1.1 案例配置实战

当用户请求www.etiantian.org/upload/xx地址时,实现由upload上传服务器池处理请求。

当用户请求www.etiantian.org/static/xx地址时,实现由静态服务器池处理请求

除此之外,对于其他访问请求,全部默认的动态服务器池处理请求

负载均衡器上实现/配置:

用户请求的URI

负责处理的服务器

主机名

站点目录

功能

/upload

10.0.0.8:80

web01

html/www/upload

upload服务器

/static

10.0.0.7:80

web02

html/www/static

static静态服务器

/

10.0.0.9:80

web03

html/bbs

默认

www.etiantian.org/bingbiang.html

www.etiantian.org/upload/bingbiang.html

www.etiantian.org/static/bingbiang.html

#测试proxy_set_header X_Forwarded_For  记录客户端IP地址

#让web服务器员记录客户端IP

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream server_pools {
server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
} server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
} #在web服务器服务员监测日志信息
#[root@web01 ~]# tailf /application/nginx/logs/access.log #测试结果
#10.0.0.5 - - [25/May/2017:16:55:14 +0800] "GET /bingbing.html HTTP/1.0" 200 14 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" "10.0.0.253" #重启Nginx,语法检测。 #[root@lb01 conf]# /application/nginx/sbin/nginx -t
#nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
#nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
#[root@lb01 conf]# /application/nginx/sbin/nginx -s reload ###根据用户请求url目录(URI )进行转发 用户请求 第一个里程碑 #配置文件 worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream upload_pools {
server 10.0.0.8:80;
} upstream static_pools {
server 10.0.0.7:80;
} upstream default_pools {
server 10.0.0.9:80;
} server {
listen 80;
server_name www.etiantian.org;
location /upload {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} location /static {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
} ########nginx 给予uri 目录的转发 #创建环境 ##web01
mkdir -p /application/nginx/html/www/upload
echo "web01 upload" >/application/nginx/html/www/upload/bingbing.html ##web02
mkdir -p /application/nginx/html/www/static
echo "web02 static" >/application/nginx/html/www/static/bingbing.html ##web03
echo "web03 default" >/application/nginx/html/www/bingbing.html ##测试结果
#[root@lb01 conf]# curl 10.0.0.5/bingbing.html
#web03 default
#[root@lb01 conf]# curl 10.0.0.5/static/bingbing.html
#web02 static
#[root@lb01 conf]# curl 10.0.0.5/upload/bingbing.html
#web01 upload

#让web服务器员记录客户端IP

##根据用户请求的url目录(URI)进行转发 用户的请求总的

####第一个里程碑-规划 分类
/upload 10.0.0.8:80 upload服务器
/static 10.0.0.7:80 static静态服务器
/ 10.0.0.9:80 默认 ####第二个里程碑-创建澡堂子 upstream upload_pools {
server 10.0.0.8:80;
} upstream static_pools {
server 10.0.0.7:80;
} upstream default_pools {
server 10.0.0.9:80;
} ##第三个里程碑-什么时候去某一个澡堂子(条件)
location ====== 专门用来匹配 判断 uri if ($uri ~ xxxx) location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} #将符合upload的请求交给上传服务器池upload_pools,配置如下:
location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} #不符合上述规则的请求,默认全部交给动态服务器池default_pools,配置如下:
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} ###第四个里程碑-配置lb负载均衡 worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; upstream upload_pools {
server 10.0.0.8:80;
} upstream static_pools {
server 10.0.0.7:80;
} upstream default_pools {
server 10.0.0.9:80;
} server {
listen 80;
server_name www.etiantian.org;
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
} location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
} ###第五个里程碑-创建环境
www.etiantian.org/bingbing.html
www.etiantian.org/upload/bingbing.html
www.etiantian.org/static/bingbing.html ##web01
mkdir -p /application/nginx/html/www/upload
echo "web01 upload" >/application/nginx/html/www/upload/bingbing.html ##web02
mkdir -p /application/nginx/html/www/static
echo "web02 static" >/application/nginx/html/www/static/bingbing.html ##web03
echo "web03 default" >/application/nginx/html/www/bingbing.html ###第五个里程碑-进行测试 #[root@lb01 conf]# curl www.etiantian.org/bingbing.html
#web03 default
#[root@lb01 conf]# curl www.etiantian.org/static/bingbing.html
#web02 static
#[root@lb01 conf]# curl www.etiantian.org/upload/bingbing.html
#web01 upload ####下面三条要解析否则会报404
curl www.etiantian.org/bingbing.html
curl www.etiantian.org/static/bingbing.html
curl www.etiantian.org/upload/bingbing.html curl 10.0.0.5/bingbing.html
curl 10.0.0.5/static/bingbing.html
curl 10.0.0.5/upload/bingbing.html

##根据用户请求的url目录(URI)进行转发 用户的请求总的

根据用户客户端的设备(user_agent)转发实践

###nginx.conf lb01 基于 用户的客户端浏览器

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream upload_pools {
server 10.0.0.8:80;
} upstream static_pools {
server 10.0.0.7:80;
} upstream default_pools {
server 10.0.0.9:80;
} server {
listen 80;
server_name www.etiantian.org;
location / {
if ($http_user_agent ~* "MSIE") {
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "Chrome") {
proxy_pass http://upload_pools;
}
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; }
}
} ##因为10.0.0.5下没有动态或静态的东西 [root@lb01 conf]# curl 10.0.0.5/bingbing.html
web03 default
[root@lb01 conf]# curl 10.0.0.5/static/bingbing.html
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>
[root@lb01 conf]# curl 10.0.0.5/upload/bingbing.html
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html> #加A + 参数指定浏览器名字 [root@lb01 conf]# curl -A chrome 10.0.0.5/upload/bingbing.html
web01 upload
[root@lb01 conf]# curl 10.0.0.5/bingbing.html
web03 default
[root@lb01 conf]# curl -A msie 10.0.0.5/static/bingbing.html
web02 static [root@lb01 conf]# ####访问一个目录 nginx 默认找的文件是 index.html index.htm
[root@lb01 conf]# #####如果这些文件不存在 nginx报错 403
[root@lb01 conf]# curl -A chrome 10.0.0.5/upload/oldboy.txt
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html> ##################
###报404 [root@lb01 conf]# ####1.10.0.0.5 访问的反向代理 lb01
[root@lb01 conf]# ####2.10.0.0.5 默认访问第一个虚拟主机 server
[root@lb01 conf]# ####3.查看对应的条件 uri 目录
[root@lb01 conf]# # if ($http_user_agent ~* "MSIE")
[root@lb01 conf]# #
[root@lb01 conf]# # {
[root@lb01 conf]# # proxy_pass http://static_pools;
[root@lb01 conf]# # }
[root@lb01 conf]# # if ($http_user_agent ~* "Chrome")
[root@lb01 conf]# #
[root@lb01 conf]# # {
[root@lb01 conf]# # proxy_pass http://upload_pools;
[root@lb01 conf]# # }
[root@lb01 conf]# #proxy_pass http://default_pools;
[root@lb01 conf]# ####4.最后找到的是 默认的池塘 里面没有 upload 目录
[root@lb01 conf]# ####5. 没有这个目录 404 找不到
[root@lb01 conf]# curl 10.0.0.5/upload/
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html> ############403错误
[root@lb01 conf]# curl -A msie 10.0.0.5/static/
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>
[root@lb01 conf]# ####1.lb01
[root@lb01 conf]# ####2.匹配的是第一个虚拟主机 10.0.0.5 www.etiantian.org
[root@lb01 conf]# ####3.进入location [root@lb01 conf]# ####4.进入location /
[root@lb01 conf]# ####5.判断
[root@lb01 conf]# ####-A 装作是msie
[root@lb01 conf]# ####7.10.0.0.7 这个机器上面 有/static 目录
[root@lb01 conf]# ####8.10.0.0.5/static/ ===== 10.0.0.5/static/index.html
[root@lb01 conf]# ####9.找首页文件 但是 首页文件不存在就显示403 默认去找index.html
[root@lb01 conf]#
[root@lb01 conf]# ####10.找不到就汇报403 错误 。 ##1.浏览器缓存 ctrl+F5
##2.域名没有解析
##3.修改了配置文件,没重启 配置文件没生效 [root@lb01 conf]# cat nginx.conf
####lb01负载均衡
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
keepalive_timeout 65;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream uplaod_pools {
server 10.0.0.8:80;
}
upstream static_pools {
server 10.0.0.7:80;
}
upstream default_pools {
server 10.0.0.9:80;
} server {
listen 80;
server_name www.etiantian.org;
location / {
if ($http_user_agent ~* "MSIE")
{
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "Chrome")
{
proxy_pass http://uplaod_pools;
}
proxy_pass http://default_pools;
}
access_log logs/access_www.log main;
}
}

###nginx.conf lb01 基于 用户的客户端浏览器

http proxy模块参数的更多相关文章

  1. nginx反向代理proxy模块相关参数

    http_proxy_module Proxy_pass proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器:官方说明:http://ngi ...

  2. nginx的proxy模块详解以及参数

    文章来源 运维公会:nginx的proxy模块详解以及参数 使用nginx配置代理的时候,肯定是要用到http_proxy模块.这个模块也是在安装nginx的时候默认安装.它的作用就是将请求转发到相应 ...

  3. 【web安全】第五弹:burpsuite proxy模块的一些理解

    作为一只小小小白的安全新手,只会简单的用sqlmap扫扫网站,用burpsuite的proxy模块拦截一些请求.最近又对proxy有点儿小理解,记录之. 1. 查看sqlmap注入的语句以及HTTP ...

  4. Nginx配置之location模块和proxy模块

    1.location指令的用法介绍 Location主要用来匹配url,如:http://www.beyond.com/nice,在这里对于location来说www.beyond.com是域名,/n ...

  5. insmod module_param 模块参数

    模块参数 引导模块时,可以向它传递参数.要使用模块参数加载模块,这样写: insmod module.ko [param1=value param2=value ...] 为了使用这些参数的值,要在模 ...

  6. Verilog 模块参数重定义(转)

    Verilog重载模块参数: 当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数语法:d ...

  7. 模块参数,系统调用,字符设备编程重要数据结构,设备号的申请与注册,关于cdev的API

    1.模块参数  应用编程:      int main(int argc, char *argv[])      {               }      ./a.out xxx yyy zzz  ...

  8. Linux设备驱动程序 之 模块参数

    模块支持参数的方法 内核允许驱动程序指定参数,这些参数可在运行insmod或者modprobe命令装载模块时赋值,modprobe还可以从它的配置文件(/etc/modporb.conf)中读取参数值 ...

  9. linux模块参数

    驱动需要知道的几个参数因不同的系统而不同. 从使用的设备号( 如我们在下一章见到的 ) 到驱动应当任何操作的几个方面. 例如, SCSI 适配器的驱动常常有选项控制标记命令队列 的使用, IDE 驱动 ...

随机推荐

  1. 2.1 mac下多版本jdk的安装和管理

    之前已经安装过jdk8了,安装路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk 现在安装jdk10,下载后,双击dmg文件一直到安装完成,安装 ...

  2. DevSecOps 运维模式中的安全性

    本文想从技术的角度谈谈我对云计算数据中心 DevSecOps 运维模式中的安全性的理解,和过去几年我在云服务业务连续性管理方面的探索. 现在公有云服务商都不约而同地转向 DevSecOps 模式.De ...

  3. T SQL 将一列多行数据合并为一行

    SQL Server 在进行数据迁移和报表处理的时候遇到将一列多行数据拼接为一个字符串的情形,查找相关的资料整理如下,提供两种方法. Table:SC Student Course 张三 大学语文 李 ...

  4. LIN 笔记

    LIN 使用了 1 根线来进行通信,但是,它必须要参考 VBat 和 GND.离开这两个参考电平,并没有办法来判断线上的 bit 状态. 另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接 ...

  5. 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替

    /// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...

  6. Effective Java 第三版——71. 避免不必要地使用检查异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  7. ASP.NET CORE 中用单元测试测试控制器

    之前用ASP.NET CORE做的项目 加了一个新功能,数据库加了个字段balabala.... 更新到服务器上,新功能测试正常,然后就没管了..... 今天客户说网站有BUG,某个页面打开后出错了, ...

  8. centos6 利用外部的smpt服务器计划任务发送邮件

    centos可通过修改配置文件以使用外部SMTP服务器,达到不使用sendmail而用外部的smtp服务器发送邮件的目的, 操作如下: 一.安装mailx与sendmail # yum -y inst ...

  9. Linux系统中文显示

    # Linux系统中文显示 ### 配置文件路径------------------------------ 路径`/etc/locate.conf` ### 查看系统当前字符集----------- ...

  10. 【iCore4 双核心板_ARM】例程三十七:SDRAM实验——读写SDRAM

    实验现象: 上电即开始读写SDRAM测试,测试过程中,蓝色LED点亮,如果出现错误,红色LED闪烁,测试成功,绿色LED点亮. 核心代码: int main(void) { /* USER CODE ...