nginx中的两个模块的proxy_pass的区别解析

1.ngx_stream_proxy_module模块的proxy_pass指令

只能在server段使用使用, 只需要提供域名或ip地址和端口。

可以理解为端口转发,可以是tcp端口,也可以是udp端口。

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}

server {
    listen 53 udp;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;

2.ngx_http_proxy_module模块的proxy_pass指令

  • 需要在location段,location中的if段,limit_except段中使用,
  • 处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",
  • 还有一个可选的uri可以配置。

3.proxy_pass后,后端服务器的url(request_uri)情况分析

server {
    listen      80;
    server_name www.test.com;

    # 情形A
    # 访问 http://www.test.com/testa/aaaa
    # 后端的request_uri为: /testa/aaaa
    location ^~ /testa/ {
        proxy_pass http://127.0.0.1:8801;
    }

    # 情形B
    # 访问 http://www.test.com/testb/bbbb
    # 后端的request_uri为: /bbbb
    location ^~ /testb/ {
        proxy_pass http://127.0.0.1:8801/;
    }

    # 情形C
    # 下面这段location是正确的
    location ~ /testc {
        proxy_pass http://127.0.0.1:8801;
    }

    # 情形D
    # 下面这段location是错误的
    #
    # nginx -t 时,会报如下错误:
    #
    # nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular
    # expression, or inside named location, or inside "if" statement, or inside
    # "limit_except" block in /opt/app/nginx/conf/vhost/test.conf:17
    #
    # 当location为正则表达式时,proxy_pass 不能包含URI部分。本例中包含了"/"
    location ~ /testd {
        proxy_pass http://127.0.0.1:8801/;   # 记住,location为正则表达式时,不能这样写!!!
    }

    # 情形E
    # 访问 http://www.test.com/ccc/bbbb
    # 后端的request_uri为: /aaa/ccc/bbbb
    location /ccc/ {
        proxy_pass http://127.0.0.1:8801/aaa$request_uri;
    }

    # 情形F
    # 访问 http://www.test.com/namea/ddd
    # 后端的request_uri为: /yongfu?namea=ddd
    location /namea/ {
        rewrite    /namea/([^/]+) /yongfu?namea=$1 break;
        proxy_pass http://127.0.0.1:8801;
    }

    # 情形G
    # 访问 http://www.test.com/nameb/eee
    # 后端的request_uri为: /yongfu?nameb=eee
    location /nameb/ {
        rewrite    /nameb/([^/]+) /yongfu?nameb=$1 break;
        proxy_pass http://127.0.0.1:8801/;
    }

    access_log /data/logs/www/www.test.com.log;
}

server {
    listen      8801;
    server_name www.test.com;

    root        /data/www/test;
    index       index.php index.html;

    rewrite ^(.*)$ /test.php?u=$1 last;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

    access_log /data/logs/www/www.test.com.8801.log;
}

到此这篇关于nginx中的两个模块的proxy_pass的区别的文章就介绍到这了,更多相关nginx proxy_pass模块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx中proxy_pass各种用法详解

    目录 代理转发规则 第一种: 第二种: 第三种: 第四种: 第五种: 代理转发规则 nginx中配置location代理转发规则的时候不同写法对应不同转发规则. 如果proxy_pass使用了URI,当传送请求到后端服务器时,规范化以后的请求路径与配置中的路径的匹配部分将被替换为指令中定义的URI(对应下文第一种情况). 如果proxy_pass没有使用URI,传送到后端服务器的请求URI一般客户端发起的原始URI(下文第二种情况). 访问地址:http://localhost/proxy/ab

  • Nginx location 和 proxy_pass路径配置问题小结

    目录 一.Nginx location 基本配置 1.1.Nginx 配置文件 1.2 .Python 脚本 二.测试 2.1.测试 location 2.2.测试 location 2.3.测试三 location 2.4.location 不加 2.5.location 末尾 2.6. location 末尾 三.总结 本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,进行测试,完全还原了整个测试过程.帮助了解具体的情况. 一.Nginx l

  • nginx location中多个if里面proxy_pass的方法

    1.首先我们回顾一下nginx中location的相关知识 1)location的匹配指令: ~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,不是正则匹配.如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =      #进行普通字符精确匹配 @     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files 2)locat

  • nginx 反向代理之 proxy_pass的实现

    格式很简单: proxy_pass URL; 其中URL包含:传输协议(http://, https://等).主机名(域名或者IP:PORT).uri. 示例如下: proxy_pass http://www.xxx.com/; proxy_pass http://192.168.200.101:8080/uri; proxy_pass unix:/tmp/www.sock; 对于proxy_pass的配置有几种情况需要注意: 假设server_name为www.xxx.com 当请求http

  • nginx配置proxy_pass中url末尾带/与不带/的区别详解

    nginx配置proxy_pass时url末尾带"/"与不带"/"的区别如下: 注意:当location为正则表达式匹配模式时,proxy_pass中的url末尾是不允许有"/"的,因此正则表达式匹配模式不在讨论范围内.  proxy_pass配置中url末尾带/时,nginx转发时,会将原uri去除location匹配表达式后的内容拼接在proxy_pass中url之后. 测试地址:http://192.168.171.129/test/tes

  • nginx中的两个模块的proxy_pass的区别解析

    1.ngx_stream_proxy_module模块的proxy_pass指令 只能在server段使用使用, 只需要提供域名或ip地址和端口. 可以理解为端口转发,可以是tcp端口,也可以是udp端口. server { listen 127.0.0.1:12345; proxy_pass 127.0.0.1:8080; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 1m; proxy_pass exampl

  • 浅谈Nginx 中的两种限流方式

    系统设计时一般会预估负载,当系统暴露在公网中时,恶意攻击或正常突发流量等都可能导致系统被压垮,而限流就是保护措施之一.限流即控制流量,本文将记录 Nginx 的二种限流设置. 生活中的 "限流"? 限流并非新鲜事,在生活中亦无处不在,下面例举一二: 博物馆:限制每天参观总人数以保护文物 高铁安检:有若干安检口,旅客依次排队,工作人员根据安检快慢决定是否放人进去.遇到节假日,可以增加安检口来提高处理能力(横向拓展),同时增加排队等待区长度(缓存待处理任务). 办理银行业务:所有人先领号,

  • 在Nginx中配置image filter模块来实现动态生成缩略图

    先来看一下什么是nginx的image filter模块. HttpImageFilterModule用来裁剪过大的图片到指定大小,是nginx自带模块,默认不会开启 开启HttpImageFilterModule需要在编译要带上参数 --with-http_image_filter_module 该模块主要有两个指令: 语法: image_filter (test | size | resize width height | crop width height) 默认是: 无 可出现的上下文:

  • 使用Nginx中自带的模块配置缩略图功能的教程

    http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用. 安装 安装还是很简单的,默认HttpImageFilterModule模块是不会编译进nginx的,所以要在configure时候指定 ./configure argumen

  • WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析

    WinForm中的键盘按键有KeyDown,KeyPress和KeyUp事件.那么它们的顺序以及区别在哪里呢?本文就此作出如下分析: 一.顺序: 根据MSDN所讲,三者的顺序是:KeyDown>KeyPress>KeyUp. 二.区别: KeyDown和KeyPress很接近,都是在按键按下时候先后发生.KeyUp是放掉某个键之后发生的事件. 三.KeyDown和KeyPress: KeyDown的事件中属性是KeyEventArgs,其中包含三个重要属性: 1)KeyCode(返回一个Key

  • Python中lambda的用法及其与def的区别解析

    python中的lambda通常是用来在python中创建匿名函数的,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python中的lambda还有如下几点和def不一样: 1. python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量. 2. python lambda它只是一个表达式,而def则是一个语句. 下面是python lambda的格式,看起来非常精简. lambda x: print x 如果你在pyt

  • Vue中的v-model,v-bind,v-on的区别解析

    目录 v-model v-bind(缩写为 : ) v-on(缩写为@) 总结 v-model v-model是进行动态双向绑定的(只能用在input, textarea, select上),以input为例,进行绑定后,vue对象中data的相应值会与input的输入同步变动. // HTML <input type="text" v-model="message"> new Vue({ data { message: ' ', //最开始messag

  • 记一次nginx中proxy_pass的使用问题

    最近排查一个web服务的问题,webserver使用的nginx,最终发现是踩了nginx中proxy_pass的一个坑,这里记录下来. 踩坑经过 一个线上的http服务,示例nginx关键配置如下: server { listen 80; server_name ligang.gdemo.com; server_tokens off; keepalive_timeout 5; charset utf-8; include /home/ligang/devspace/gobox-demo/con

  • 解析Nginx中的日志模块及日志基本的初始化和过滤配置

    无论在任何项目中,日志都是一个非常重要的模块,无论是问题定位还是日常信息的管理,都离不开他 在nginx中,ngx_errlog_module模块专门用于处理nginx日志信息,是nginx的core模块之一 在 main 函数中,时间初始化结束后马上进行的就是日志模块的初始化 日志结构: 日志模块的初始化主要做的事情就是初始化全局变量 ngx_log,并创建 errlog 文件 ngx_log_s 结构 ngx_log 变量是一个 ngx_log_s 结构体,定义在 core/ngx_log.

随机推荐