一 Nginx代理 1.1 Nginx代理概述 nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器。同時也是一個IMAP、POP3、SMTP代理伺服器。nginx可以作為一個HTTP伺服器進行網站的發佈處理,同時nginx可以作為反向代理進行負載均衡的實現。 1.2 Nginx代 ...
一 Nginx代理
1.1 Nginx代理概述
nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器。同時也是一個IMAP、POP3、SMTP代理伺服器。nginx可以作為一個HTTP伺服器進行網站的發佈處理,同時nginx可以作為反向代理進行負載均衡的實現。1.2 Nginx代理模式
Nginx通常有如下三種代理模式:- 正向代理(forward proxy)
- 反向代理(reverse proxy)
- 透明代理
1.3 正向代理
正向代理(forward)是一個位於客戶端和原始伺服器(origin server)之間的伺服器,即代理伺服器。為了從原始伺服器取得內容,客戶端向代理伺服器發送一個請求並指定目標原始伺服器,然後代理伺服器向原始伺服器轉交請求並將獲得的內容返回給客戶端。





1.4 反向代理
反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。 場景一:隱藏原始伺服器蹤跡


1.5 透明代理
參考:https://www.cnblogs.com/gbq-dog/p/10653054.html。1.6 常見代理軟體
通常大多數開源代理軟體,都能實現正反代理兩種方式。開源軟體中如squid,既可以做正向代理,也可以實現反向代理。MS ISA也可以用來在Windows平臺下做正向代理。反向代理中最主要的實踐就是WEB服務,如Nginx。二 代理配置項
2.1 配置語法
語法:proxy_buffering on | off; 預設值:proxy_buffering on; 可配置段:http, server, location 作用:配置proxy緩衝區。 擴展:- proxy_buffer_size:設置緩衝區大小(記憶體頁大小)
- proxy_buffers:設置緩衝區數量和大小(記憶體頁數量和大小)
- proxy_busy_buffers_size:設置最大緩衝區大小
語法:proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; 預設值:proxy_redirect default; 可配置段:http, server, location 作用:配置proxy重定向。 擴展:
語法:proxy_buffering on | off; 預設值:proxy_buffering on; 可配置段:http, server, location 作用:配置proxy緩衝區。 擴展:
語法:proxy_set_header field value; 預設值:proxy_set_header Host $proxy_host; proxy_set_header Connection close; 可配置段:http, server, location 作用:配置proxy頭信息。 擴展:
- proxy_hide_header:設置隱藏頭信息欄位;
- proxy_set_body:設置請求體返回信息。
語法:proxy_connect_timeout time; 預設值:proxy_connect_timeout 60s; 可配置段:http, server, location 作用:配置proxy超時。 擴展:
- proxy_hide_header:設置隱藏頭信息欄位;
- proxy_set_body:設置請求體返回信息。
三 配置正向代理
3.1 正向代理配置
1 [root@proxy ~]# vi /etc/nginx/conf.d/reverse.conf 2 server{ 3 resolver 8.8.8.8; #配置DNS解析IP地址 4 resolver_timeout 30s; #超時時間(5秒) 5 listen 8080; 6 access_log /var/log/nginx/reverse.access.log main; 7 error_log /var/log/nginx/reverse.error.log warn; 8 location / { 9 proxy_pass http://$http_host$request_uri; #配置正向代理參數 10 proxy_set_header Host $http_host; #解決如果URL中帶"."後Nginx 503錯誤 11 proxy_buffers 256 4k; #配置緩存大小 12 proxy_max_temp_file_size 0; #關閉磁碟緩存讀寫減少I/O 13 proxy_connect_timeout 30; #代理連接超時時間 14 proxy_cache_valid 200 302 10m; 15 proxy_cache_valid 301 1h; 16 proxy_cache_valid any 1m; #配置代理伺服器緩存時間 17 } 18 }
1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置文件 2 [root@proxy ~]# nginx -s reload #重載配置文件配置釋義: 不能有hostname。 必須有resolver, 即dns,超時時間(30秒)可選。 配置正向代理參數,均是由 Nginx 變數組成。 提示:配置好後,重啟nginx,以瀏覽器為例,若需要使用這個代理伺服器,則只需將瀏覽器代理設置為http://+伺服器ip地址+:+80即可使用了。

四 反向代理配置
4.1 環境預設
4.2 配置反向代理
1 [root@proxy ~]# vi /etc/nginx/conf.d/forward.conf 2 server { 3 listen 80; 4 server_name forward.linuxds.com; 5 access_log /var/log/nginx/forward.access.log main; 6 error_log /var/log/nginx/forward.error.log warn; 7 location / { 8 proxy_pass https://www.landiannews.com/; 9 index index.html; 10 proxy_redirect off; 11 # proxy_set_header Host $host; 12 proxy_set_header X-Real-IP $remote_addr; 13 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 14 client_max_body_size 10m; #允許客戶端請求的最大單文件位元組數 15 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大位元組數 16 proxy_connect_timeout 300; #nginx跟後端伺服器連接超時時間(代理連接超時) 17 proxy_send_timeout 300; #後端伺服器數據回傳時間(代理髮送超時) 18 proxy_read_timeout 300; #連接成功後,後端伺服器響應時間(代理接收超時) 19 proxy_buffer_size 4k; #設置代理伺服器(nginx)保存用戶頭信息的緩衝區大小 20 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置 21 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 22 proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream伺服器傳 23 } 24 }
1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置文件 2 [root@proxy ~]# nginx -s reload #重載配置文件配置釋義: proxy_set_header X-Real-IP $remote_addr:把源IP【$remote_addr,建立HTTP連接header裡面的信息】賦值給X-Real-IP,從而通過$X-Real-IP來獲取源IP; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:在nginx作為代理伺服器時,設置的IP列表,會把經過的機器ip,代理機器ip都記錄下來,用【,】隔開。
4.3 測試反向代理
瀏覽器訪問:http://forward.linuxds.com/
4.4 其他代理配置語句
proxy_pass:設置代理伺服器的地址,可以是主機名稱、IP地址加埠號等形式。 proxy_pass URL 提示: 1:當代理的是一組伺服器時可以使用 upstream 指令來設置。 2:當URL中含有uri時,(例如 "http://127.0.0.1:8080/"、"http://127.0.0.1:8080/demo.html")不管客戶端訪問的是地址中的uri是什麼,代理伺服器都會代理到URL的地址;當URL中不包含uri時(例如:"http://127.0.0.1:8080"),那麼當客戶端訪問伺服器時,代理伺服器會根據客戶端請求的uri來訪問具體的URL地址。proxy_pass_request_body on|off:用於配置是否將客戶端請求的請求體發送給代理伺服器。 proxy_pass_request_headers on|off:用於配置是否將客戶端請求的頭信息發送給代理伺服器。 proxy_set_header field value:可以更改nginx接收到的客戶端請求的請求頭信息,然後將新的請求頭信息發送給被代理的伺服器。 proxy_set_body value:ngin接收到客戶端的請求後使用該指令可以修改request中的body體,然後將請求轉發給代理伺服器。 proxy_connect_timeout time:nginx伺服器與被代理伺服器之間嘗試建立連接的的超時時間,預設為60s。 proxy_read_timeot time:nginx伺服器接收被代理伺服器數據時最大的等待時間,預設為60s。 proxy_send_timeout time:nginx伺服器發送數據至被代理伺服器的最大等待時間,例如60s內沒有發出一個位元組則預設斷開連接,預設60s。 proxy_http_version 1.0|1.1:nginx伺服器提供代理服務的http協議版本。 proxy_method method:nginx伺服器設置請求被代理伺服器時使用的請求方法,一般為POST或者GET。 proxy_ignore_client_abort:當客戶端中斷網路請求時,nginx服務是否中斷對代理伺服器的請求,預設off。
五 四層代理配置
5.1 四層代理
nginx-1.9.0 開始支持 TCP 代理,即4層代理,編譯安裝預設不會支持,需要加上 –with-stream 參數編譯。5.2 環境預設
1 [root@nginx02 ~]# mkdir /usr/share/nginx/rs/ 2 [root@nginx02 ~]# echo '<h1>Rs172.24.10.22-81</h1>' > /usr/share/nginx/rs/index.html 3 [root@nginx02 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF 4 server { 5 listen 81; 6 server_name 172.24.10.22; 7 location / { 8 root /usr/share/nginx/rs; 9 index index.html; 10 access_log /var/log/nginx/rs.access.log main; 11 error_log /var/log/nginx/rs.error.log warn; 12 } 13 } 14 EOF
1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置文件 2 [root@nginx02 ~]# nginx -s reload #重載配置文件
1 [root@nginx03 ~]# mkdir /usr/share/nginx/rs/ 2 [root@nginx03 ~]# echo '<h1>Rs172.24.10.23-81</h1>' > /usr/share/nginx/rs/index.html 3 [root@nginx03 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF 4 server { 5 listen 81; 6 server_name 172.24.10.23; 7 location / { 8 root /usr/share/nginx/rs; 9 index index.html; 10 access_log /var/log/nginx/rs.access.log main; 11 error_log /var/log/nginx/rs.error.log warn; 12 } 13 } 14 EOF
1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置文件 2 [root@nginx02 ~]# nginx -s reload #重載配置文件
5.3 配置四層代理
1 [root@nginx01 ~]# cat >> /etc/nginx/nginx.conf << EOF 2 stream { 3 upstream myweb { 4 server 172.24.10.22:81 weight=5 max_fails=1 fail_timeout=10s; 5 server 172.24.10.23:81; 6 } 7 upstream myssh { 8 hash $remote_addr consistent; 9 server 172.24.10.24:22; 10 } 11 12 server { 13 listen 8888; 14 proxy_connect_timeout 2s; 15 proxy_timeout 900s; 16 proxy_pass myweb; 17 } 18 19 server { 20 listen 2222; 21 proxy_connect_timeout 2s; 22 proxy_timeout 900s; 23 proxy_pass myssh; 24 } 25 } 26 EOF提示:stream和http同等級,因此如上配置需要追加至主配置文件最後。
1 [root@proxy ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置文件 2 [root@proxy ~]# nginx -s reload #重載配置文件
5.4 確認驗證
瀏覽器訪問:http://113.31.111.246:8888/。