首頁 > 運維 > Nginx > nginx如何連接埠重複使用

nginx如何連接埠重複使用

(*-*)浩
發布: 2019-06-18 11:12:44
原創
9695 人瀏覽過

nginx-1.15.2 版本新增了$ssl_preread_protocol 變量,透過該變數可以使用 stream 反向代理時預先判斷連線是否為SSL/TLS協定或非SSL/TLS協議,從而實現同一個連接埠來轉送不同的業務。

nginx如何連接埠重複使用

stream_ssl_preread模組檢查初始ClientHello在SSL或TLS連線訊息,並且提取其可用於管理連接幾個值。 $ssl_preread_protocol版本1.15.2中新增的變數從訊息client_version欄位擷取最新的SSL / TLS版本號ClientHello。如果訊息中supported_versions存在副檔名ClientHello,則變數設定為TLSv1.2/TLSv1.3。

實例:在一台反向代理伺服器上執行Nginx,並監聽443端口,後端有兩組服務,一個為HTTPS(開啟TLS1.2/1.3)網站服務,另一個為SSH 服務,我們要實現這兩組服務運行在同一個連接埠上(配置的443連接埠)--入口請求由Nginx自動區分。

為簡便,我這時直接使用 docker環境

nginx 版本

# docker exec -it nginx nginx -V
nginx version: nginx/1.15.10
built by gcc 8.2.0 (Alpine 8.2.0)
built with OpenSSL 1.1.1b  26 Feb 2019
...<省略若干行>...
登入後複製

目錄檔

 # tree ./nginx-with-L4-reuse/./nginx-with-L4-reuse/
├── config│   └── nginx
│       ├── conf.d
│       │   └── default.conf
│       ├── fastcgi.conf
│       ├── fastcgi_params
│       ├── mime.types
│       └── nginx.conf
└── docker-compose.yaml

3 directories, 6 files
登入後複製

docker-compose.yaml

# docker-compose.yaml
version: "2.4"
services:
  nginx:
    container_name: nginx
    image: nginx:alpine
    network_mode: host
    volumes:
      - ./config/nginx:/etc/nginx/:ro
    ports:
      - "443:443"
    restart: always
登入後複製

nginx.conf

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

stream {
    log_format stream '{"@access_time":"$time_iso8601",'
        '"clientip":"$remote_addr",'
        '"pid":$pid,'
        '"pro":"$protocol",'
        '"ssl_pro": "$ssl_preread_protocol"',
        '"pro":"$protocol",'
        '"stus":$status,'
        '"sent":$bytes_sent,'
        '"recv":$bytes_received,'
        '"sess_time":$session_time,'
        '"up_addr":"$upstream_addr",'
        '"up_sent":$upstream_bytes_sent,'
        '"up_recv":$upstream_bytes_received,'
        '"up_conn_time":$upstream_connect_time,'
        '"up_resp_time":"$upstream_first_byte_time",'
        '"up_sess_time":$upstream_session_time}';

    upstream ssh {
        server 192.168.50.212:22;
    }

    upstream web {
        server 192.168.50.215:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
        "TLSv1.3" web;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
        access_log /var/log/nginx/stream_443.log stream;
    }
}
登入後複製

$ssl_preread_protocol 實作IP層實作了不同業務配置,在某種需求上很有意義--雖然有功能限制。然而Tengine-2.3.0已經實現的IP層是基於網域轉發,或許這項特性會引入Nginx。

更多Nginx相關技術文章,請造訪Nginx使用教學欄位進行學習! 

以上是nginx如何連接埠重複使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板