1. 程式人生 > >Nginx學習筆記——場景實踐之《代理服務》

Nginx學習筆記——場景實踐之《代理服務》

代理服務

Nginx可以做【HTTP、HTTPS】、【ICMP、POP、IMAP】郵件、【RTMP】流媒體的代理。

正向代理

在這裡插入圖片描述 比如:公司內只有一臺電腦可以連入公網,所有的計算機一個代理,通過這臺計算機(代理)都可以連入公網。

反向代理

在這裡插入圖片描述 比如:一個客戶端請求一個網站,往往請求的是代理,通過代理給你分配一個伺服器,讓你訪問。

正反向的區別

正向代理代理的物件是客戶端。 反向代理代理的物件是服務端

反向代理

配置語法

通過該代理,在通過代理訪問

Syntax:proxy_pass URL;
Default:預設無
Context:location,if in location,limit_expect

URL寫法 (1)HTTP,http://localhost:8000/uri/ (2)HTTPS,https://localhost:8000/uri/ (3)Socket的方式(Linux下程序間通訊的方式),http://unix:/tmp/backend.socket:/uri/;

測試

/etc/nginx/conf.d/中配置如下兩個配置檔案: realserver.conf

server {
    listen       8080;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        allow 127.0.0.1;
        deny all;
        root   /opt/app/code2;
        index  index.html index.htm;
    }
    #.......
}

注:該檔案配置了8080埠,並使用allow與deny配置成伺服器私有訪問(模擬伺服器內網)。 fx_proxy.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location ~ /test_proxy.html$ {
        proxy_pass http://127.0.0.1:8080;
    }
    #.......
}

注:該配置配置了公網的80埠,並對test_proxy.html設定了代理訪問內網8080埠。

效果

訪問http://192.168.174.132:8080/test_proxy.html,顯示404找不到頁面。 訪問http://192.168.174.132/test_proxy.html,預設是80埠,跳轉到指定頁面,但對於客戶端來說,訪問的連結(IP)還是80埠的,即對客戶是透明的,所以反向代理是服務於伺服器。

正向代理

配置語法

與反向代理一樣。

測試

/opt/app/code,新建shen.html,用於測試。 在/etc/nginx/conf.d/中配置如下兩個配置檔案: admin.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
	if ( $http_x_fowwarded_for !~* "^192\.168\.174\.132") {
		return 403;
	}
        root   /opt/app/code;
        index  index.html index.htm;
    }
    #...
}

注:132為Nginx的IP,此處篩選非本機訪問均拒絕。 zx_proxy.conf

server {
    listen       8081;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://$http_host$request_uri;
    }
    #....
 }

注:此處配置正向代理,埠為8081,模擬代理伺服器,訪問的請求均通過代理伺服器訪問。

效果

宿主機IP192.168.174.1,直接訪問http://192.168.174.132/shen.html,顯示403禁止訪問。 宿主機,設定HTTP代理(192.168.174.132,埠8081),訪問http://192.168.174.132/shen.html成功。 即正向代理為客戶端服務,對伺服器透明。

代理配置語法補充

緩衝區

儘可能接收多的資訊,再返回給客戶端,減少IO操作。

Syntax:proxy_buffering on | off;
Default:proxy_buffering on;
Context:http,server,location

擴充套件:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

跳轉重定向

Nginx作為代理伺服器,返回301,重定向到另外一個地址,返回給客戶端。預設即可。

Syntax:proxy_redirect default(預設);
proxy_redict off(關閉);proxy_redirect redirect replacement(對301地址修改);
Default:proxy_redirect default;
Context:http,server,location

頭資訊

代理訪問時,設定的頭資訊(如,訪問控制章節的remote_addr,伺服器是獲取不到客戶端IP的,可通過頭資訊去一步一步設定,再獲取)。

Syntax:proxy_set_header field value;
Default:proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:http,server,location

擴充套件:proxy_hide_header、proxy_set_body

超時

作為代理,到後端的一個超時。

Syntax:proxy_connect_timeout time;
Default:proxy_connect_timeout 60s;
Context:http,server,location

擴充套件:proxy_read_timeout(已經建立連線,Nginx與後端互動,讀超過time,則超時)、proxy_send_timeout(接收資訊,傳送給客戶端的超時)

常用代理配置和規範

proxy_pass http://127.0.0.1:8080;(反向代理)
proxy_redirect default;(重定向,301,預設配置)

proxy_set_header Host $http_host;(頭資訊,HOST)
proxy_set_header X-Real-IP $remote_addr;(真實IP,remote_addr)

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;(優先記憶體)
proxy_max_temp_file_size 256k;(臨時檔案,記憶體置換)(--http-proxy-temp-path=/var/cache/nginx/proxy_temp)

配置太多且通用的情況,可以使用檔案存放,如proxy_params,使用include filename;進行包含。