1. 程式人生 > >nginx七層代理轉發和四層代理轉發實戰

nginx七層代理轉發和四層代理轉發實戰

nginx原始碼編譯安裝,本安裝版本為V1.15.2

./configure --with-stream --add-module=./nginx-module-vts --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module

--with-stream為四層代理轉發:基於TCP,UDP;

預設支援七層代理轉發:基於HTTP;

使用場景:在阿里雲申請了一臺20M頻寬的高效能的雲主機,做為唯一入口(本環境沒有考慮HA)。

實現目的:

1)快取服務;

2)後端無狀態的負載均衡;

3)mysql等中介軟體的反向代理。

具體NGINX配置檔案如下,可修改少數的資料,直接 使用。

user  nginx nginx;
worker_processes auto;
error_log  /usr/local/nginx/logs/nginx_error.log  crit;
pid        /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
    {
        worker_connections 51200;
        multi_accept on;
        use epoll;
    }

http
    {
        vhost_traffic_status_zone;
        include       mime.types;
        #include proxy.conf;
        #include luawaf.conf;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;
        underscores_in_headers on;
        keepalive_timeout 60;

        tcp_nodelay on;
        aio_write           on;
        log_subrequest      on;

        reset_timedout_connection on;
        keepalive_requests 100;


        types_hash_max_size             2048;
        map_hash_bucket_size            64;

        proxy_headers_hash_max_size     512;
        proxy_headers_hash_bucket_size  64;

        variables_hash_bucket_size      128;
        variables_hash_max_size         2048;

        ignore_invalid_headers          on;

        limit_req_status                503;


        gzip on;
        gzip_comp_level 5;
        gzip_http_version 1.1;
        gzip_min_length 256;
  gzip_types application/atom+xml application/javascript application/x-javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component;
        gzip_proxied any;
        gzip_vary on;

#       fastcgi_connect_timeout 300;
#        fastcgi_send_timeout 300;
#        fastcgi_read_timeout 300;
#        fastcgi_buffer_size 64k;
#        fastcgi_buffers 4 64k;
#        fastcgi_busy_buffers_size 128k;
#        fastcgi_temp_file_write_size 256k;
#        fastcgi_intercept_errors on;

        # Custom headers for response

        server_tokens on;

        # disable warnings
        uninitialized_variable_warn off;
        access_log off;
        server_name_in_redirect off;
        port_in_redirect off;
        proxy_cache_path /data/nginx/imgcache/ levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
        proxy_temp_path /data/nginx/imgtemp;


        upstream webservers {
            least_conn;
            keepalive 32;
            server 192.168.0.152:10080 max_fails=0 fail_timeout=0 weight=5 down;
            server 192.168.0.148:10080 max_fails=0 fail_timeout=0 weight=5 down;
        }
        upstream gateways {
            least_conn;
            keepalive 32;
            server 192.168.0.153:10080 max_fails=0 fail_timeout=0 weight=5;
            server 192.168.0.152:10080 max_fails=0 fail_timeout=0 weight=5 down;
        }
        upstream kibana {
            keepalive 32;
            server 192.168.0.148:5601;
        }
        upstream mysql-monitor {
           keepalive 32;
           server 192.168.0.145:7001;
        }

        # Obtain best http host
        map $http_host $this_host {
                default          $http_host;
                ''               $host;
        }

        map $http_x_forwarded_host $best_http_host {
                default          $http_x_forwarded_host;
                ''               $this_host;
        }

        # Retain the default nginx handling of requests without a "Connection" header
        map $http_upgrade $connection_upgrade {
                default          upgrade;
                ''               close;
        }

        map $http_x_forwarded_for $the_real_ip {

                default          $remote_addr;

        }
        # Reverse proxies can detect if a client provides a X-Request-ID header, and pass it on to the backend server.
        # If no such header is provided, it can provide a random value.
        map $http_x_request_id $req_id {
                default   $http_x_request_id;

                ""        $request_id;

        }
        map $pass_server_port $pass_port {
                443              443;
                default          $pass_server_port;
        }
        map $http_x_forwarded_port $pass_server_port {
                default           $http_x_forwarded_port;
                ''                $server_port;
        }
        # trust http_x_forwarded_proto headers correctly indicate ssl offloading
        map $http_x_forwarded_proto $pass_access_scheme {
                default          $http_x_forwarded_proto;
                ''               $scheme;
        }

        # validate $pass_access_scheme and $scheme are http to force a redirect
        map "$scheme:$pass_access_scheme" $redirect_to_https {
                default          0;
                "http:http"      1;
                "https:http"     1;
        }
#gateways server------------------------
        server {
            listen 80;
            listen [::]:80;
            listen 443  ssl;
            listen [::]:443  ssl;
            index index.html index.htm index.php;
            root /usr/local/nginx/html;
            server_name  localhost;
            server_tokens off;
            ssl_certificate      server.crt;
            ssl_certificate_key  server.key;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
            ssl_prefer_server_ciphers on;
            ssl_session_cache shared:SSL:10m;
            ssl_session_timeout 10m;
            #error_page   404   /404.html;
            #include enable-php.conf;
        

            location / {
                        proxy_set_header Host                   $best_http_host;
                        proxy_set_header                        Upgrade           $http_upgrade;
                        proxy_set_header                        Connection        $connection_upgrade;
                        proxy_set_header X-Request-ID           $req_id;
                        proxy_set_header X-Real-IP              $the_real_ip;
                        proxy_set_header X-Forwarded-For        $the_real_ip;
                        proxy_set_header X-Forwarded-Host       $best_http_host;
                        proxy_set_header X-Forwarded-Port       $pass_port;
                        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;
                        proxy_set_header X-Original-URI         $request_uri;
                        proxy_set_header X-Scheme               $pass_access_scheme;
                        proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;
                        proxy_set_header Proxy                  "";
                        proxy_connect_timeout                   5s;
                        proxy_send_timeout                      60s;
                        proxy_read_timeout                      60s;

                        proxy_buffering                         "off";
                        proxy_buffer_size                       "4k";
                        proxy_buffers                           4 "4k";
                        proxy_request_buffering                 "on";

                        proxy_http_version                      1.1;
                        proxy_set_header Connection             "";
                        proxy_cookie_domain                     off;
                        proxy_cookie_path                       off;

                        proxy_next_upstream                     error timeout;
                        proxy_next_upstream_tries               3;

                        proxy_pass   http://gateways;
                        proxy_redirect                          off;
                        #limit_req zone=mylimit burst=5;
            }

            location ~ .*\.(js|css)?$
            {
                expires      12h;
            }

            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                log_not_found off;
                access_log off;
                expires 7d;
                proxy_cache imgcache;
                proxy_cache_valid 200 302 1d;
                proxy_cache_valid 404 10m;
                proxy_cache_valid any 1h;
                proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
                proxy_pass  http://192.168.0.152:8080;
            }
            location /ng_status {
                vhost_traffic_status_display;
                vhost_traffic_status_display_format html;
                allow 127.0.0.1;
                allow 192.168.0.0/24;
                allow 10.31.186.119/32;
                #stub_status on;
                deny all;
                access_log off;
            }

            location ~ /\. {
                deny all;
            }
                access_log off;
                #access_log  /usr/local/nginx/logs/access.log;
           }


        #kibana server
        server {
                listen 5601;
                location / {
                auth_basic "User Authentication";
                auth_basic_user_file /usr/local/nginx/passwd.db;
                proxy_pass   http://kibana;
                access_log off;
                }


                }

        #mysql-monitor
        server {
                listen 7001;
                location / {
                auth_basic "User Authentication";
                auth_basic_user_file /usr/local/nginx/passwd.db;
                proxy_pass   http://mysql-monitor;
                access_log off;
                }


                }
        #img-cache
        server {

                listen 8080;
                server_name localhost;
                include /www/server/nginx/conf/enable-php-72.conf;
                root /usr/local/nginx/html/imgcache;
                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                        expires      30d;
                        access_log  /usr/local/nginx/logs/pic.log;
                }
                access_log off;
                }

}

stream {
        upstream mysql-server {
                hash $remote_addr consistent;
                server 192.168.0.145:3306;
                server 192.168.0.146:3306;
        }

        server {
                listen 33306;
                proxy_connect_timeout 1s;
                proxy_timeout 3s;
                proxy_pass mysql-server;
}

    log_format log_stream [$time_local]$protocol-$status-$bytes_sent-$bytes_received-$session_time;
    access_log /usr/local/nginx/logs/mysql_access.log log_stream;
    error_log  /usr/local/nginx/logs/mysql_error.log;

    # TCP services

    # UDP services
}

相關推薦

nginx代理轉發代理轉發實戰

nginx原始碼編譯安裝,本安裝版本為V1.15.2 ./configure --with-stream --add-module=./nginx-module-vts --with-http_gzip_static_module --with-http_stub_stat

為什麽計算機網絡有之說,有什麽相同點不同點

鏈路 www. amp 鏈路層 hit space color ace 數據鏈路 “七層”是OSI參考模型,即物理層 、 數據鏈路層 、 網絡層、傳輸層、 會話層 、表示層、應用層 ; “四層”是TCP/IP參考模型,即物理鏈路層、 網絡層、傳輸層、應用層。 雖說有四層和七

網路協議模型功能介紹

1、OSI七個層次的功能 物理層 為資料鏈路層提供物理連線,在其上序列傳送位元流,即所傳送資料的單位是位元。此外,該層中還具有確定連線裝置的電氣特性和物理特性等功能。 資料鏈路層 負責在網路節點間的線路上通過檢測、流量控制和重發等手段,無差錯地傳送以幀為單位的資料。為做到這

協議協議

  OSI 七層模型通過七個層次化的結構模型使不同的系統不同的網路之間實現可靠的通訊,因此其最主要的功能就是幫助不同型別的主機實現資料傳輸 。完成中繼功能的節點通常稱為中繼系統。一個裝置工作在哪一層,關鍵看它工作時利用哪一層的資料頭部資訊。網橋工作時,是以MAC頭部來決定

OSI與tcp/ip

網絡接口 stp data 中繼 進行 數據加密 特殊 還要 網絡    1)OSI七層模型 OSI中的層 功能 TCP/IP協議族 應用層 文件傳輸,電子郵件,文件服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示層 數據格式化,代

OSI06——TCP/IP

七層 text shadow water .com 51cto ces alt ges OSI七層06——TCP/IP四層

OSI協議和TCP協議

應用層:直接為使用者的應用程序提供服務,如 HTTP、支援檔案傳輸的 FTP 協議等 運輸層:向兩個主機中程序之間的通訊提供服務。由於一個主機可同時執行多個程序,因此運輸層有複用和分用的功能。複用就是多個應用層程序可同時使用下面運輸層的服務。分用則是運輸層把收到

vxlan vs GRE(三組播組播如何對應起來)

由器 ams 之間 數據信息 控制 格式 tunnel network 處理 www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 華為的v

轉載:TCP/IP模型 TCP/IP模型

轉載:TCP/IP四層模型 一. TCP/IP參考模型示意圖     ISO制定的OSI參考模型的過於龐大、複雜招致了許多批評。與此對照,由技術人員自己開發的TCP/IP協議棧獲得了更為廣泛的應用。如圖2-1所示,是TCP/IP參考模型和OSI參考模型的對比示意圖。     

Java的ServiceManagerNative的ServiceManager的對應過程

轉自:https://blog.csdn.net/moonshine2016/article/details/54378358 參考:https://www.jianshu.com/p/9c023701c261   幾天前一個同事問Java層的Binder和Java層的Serv

TCP的分段IP的分片之間的關係 MTUMSS之間的關係

                首先說明:資料報的分段和分片確實發生,分段發生在傳輸層,分片發生在網路層。但是對於分段來說,這是經常發生在UDP傳輸層協議上的情況,對於傳輸層使用TCP協議的通道來說,這種事情很少發生。1,MTU(Maximum Transmission Unit,MTU),最大傳輸單元(1)

組播組播

平時常常說組播,其實只是多播的另外一種叫法。多播中,因為把參與多播的所有接收者稱為組,所以才有組播的說法。多播技術要比廣播技術複雜的多。多播技術對一些應用很重要,比如電視會議,聊天室等。 物理層多播 系統需要對網路介面進行配置,讓介面識別該地址。 ip

Android-Activity的狀態、生命週期、啟動模式

一、四大基本元件簡介: Android四大基本元件:Activity、Service、Content Provider、Broadcast Receiver Activity:活動檢視 一個負責與使用者互動的顯示介面的元件。 Service:服務:一個沒

架構CS架構BS淺談

• C/S 和B/S 作為兩種不同的系統登入方式,各有優缺點,要做出正確的判斷就要對兩種架構有著明確的認識。下面就分別介紹這兩種結構的特點。C/S 結構(Client/Server 的簡稱,客戶機/伺服器模式)。在上個世紀八十年代及九十年代初便已經得到了大量應用,最直接的原因

在tensorflow下構建二神經網路神經網路解決10分類任務對比

繼剛才的邏輯迴歸解決的十分類任務意猶未盡,分別設計了二層和三層的神經網路對比解決這個10分類問題下面畫一個草圖代表三層神經網路的計算圖:import numpy as np import tensorflow as tf import matplotlib.pyplot as

網絡網絡

.html 的區別 不同 通信 二層 ip路由 能力 劃分 OSI七層 先簡單對比下二層網絡和三層網絡的區別:1)不同網段的ip通信,需要經過三層網絡。相同網段的ip通信,經過二層網絡;2)二層網絡僅僅通過MAC尋址即可實現通訊,但僅僅是同一個沖突域內;三層網絡需要通過IP

【安全牛學習筆記】SSH遠程端口轉發動態端口轉發以及X協議轉發

security+ 信息安全 SSH遠程端口轉發 由於ACL等原因,SSH與應用連接建立方向相反 本地端口轉發 - SSH客戶端+應用客戶端位於FW一端 - SSH服務器+應用服

JDK的Proxy動態代理模式CGLIB動態代理模式的區別共同點

首先我們來談談聯眾代理模式的不同之處:《1》代理類不同點:(1)Proxy的代理類的建立是通過工具類或者工廠類自動建立的,   我們只需要呼叫Proxy.newProxyInstance(Loader,interfaces,h);正確的傳入相應的引數,就可以得到餓哦們想要的目

負載均衡的特點及常用負載均衡Nginx、Haproxy、LVS對比

web服務器 keepaliv 保持 obi 負載均衡 ted 根據 方案 面向 一、四層與七層負載均衡在原理上的區別 圖示: 四層負載均衡與七層負載均衡在工作原理上的簡單區別如下圖: 概述: 1.四層負載均衡工作在OSI模型中的四層,即傳輸層。四層負載均衡只能根據報文中

nginx負載均衡的區別

(一)   簡單理解四層和七層負載均衡:   ① 所謂四層就是基於IP+埠的負載均衡;七層就是基於URL等應用層資訊的負載均衡;同理,還有基於MAC地址的二層負載均衡和基於IP地址的三層負載均衡。 換句換說,二層負載均衡會通過一個虛擬MAC地址接收請求,然後再分配到真實的MAC地址;三