Nginx Proxy_pass简述

Posted

tags:

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

nginx 中 proxy_pass简述

  • nginx配置大家耳熟能详,网上资料也一大堆,但为了方便,还是要不厌其烦的写一写。
  • proxy_pass为代理转发模块,主要功能是把请求转发到其它服务。
  • 当使用proxy_pass(或fastcgi)时,请求会在nginx中缓冲,直到发送到后端的服务器上。

    基本配置

    location / {
        proxy_pass http://192.168.1.2:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }

proxy_pass转发的路径问题

  • 第一种:proxy_pass后面的url加/,表示绝对根路径,不会代理location后的路径;
    假设下边用URL:http://localhost/web/test.html 进行访问。
    来访问;例:
location /web/ {
    proxy_pass http://192.168.1.2:8080/;
}

代理到URL:http://192.168.1.2:8080/test.html

  • 第二种:相对于第一种,最后少一个 / ,则会把location后的路径代理进去
location /web/ {
    proxy_pass http://192.168.1.2:8080;
}

代理到URL:http://192.168.1.2:8080/web/test.html

  • 第三种:
location /web/ {
    proxy_pass http://192.168.1.2:8080/aaa/;
}

代理到URL:http://192.168.1.2:8080/aaa/test.html

  • 第四种:相对于第三种,最后少一个 /
location /web/ {
    proxy_pass http://192.168.1.2:8080/aaa;
}

代理到URL:http://192.168.1.2:8080/aaatest.html

location 后的uri可以使用正则,location内部还可以使用if语句做判断

Nginx中有两个模块都有proxy_pass命令

  • ngx_http_proxy_module的proxy_pass
  • ngx_stream_proxy_module的proxy_pass

ngx_http_proxy_module的proxy_pass

就是我们上边讨论过的
语法: proxy_pass URL;
场景: location, if in location, limit_except
说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。

ngx_stream_proxy_module的proxy_pass

语法: proxy_pass address;
场景: server
说明: 设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口,或者一个 unix-domain socket路径。

两个proxy_pass的关系和区别

在两个模块中,两个proxy_pass都是用来做后端代理的指令。
ngx_stream_proxy_module模块的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。
ngx_http_proxy_module模块的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",还有一个可选的uri可以配置。

ngx_stream_proxy_module模块的proxy_pass指令

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

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

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

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

以上是关于Nginx Proxy_pass简述的主要内容,如果未能解决你的问题,请参考以下文章

Nginx配置proxy_pass转发的/路径问题

Nginx http反向代理流程Proxy_pass模块

nginx 之 proxy_pass详解

Nginx配置proxy_pass转发的/路径问题

nginx 反向代理之 proxy_pass

nginx 之proxy_pass