1. 程式人生 > >Nginx Proxy_pass簡述

Nginx Proxy_pass簡述

tro 一個 ngx nginx ofo 三種 基本 ext time

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簡述