Nginx與Trojan共用443

Nginx與Trojan共用443端口

這個部分主要是摘自Trojan 共用 443 端口方案缴饭。
首先是為什么Nginx可以同時在443偵聽多個https服務?因為是通過不同的SNI(TLS 服務器名稱指示)來區(qū)分不同的域名的。

在虛擬主機流行前,一個服務 IP 只會有一個 TLS 服務站點彬向,只會有一張 SSL 證書,所以請求來了就只有一張證書攻冷,沒得選直接用就好了娃胆。
后面虛擬主機流行起來,一個服務 IP 可以有多個 TLS 服務站點讲衫,那就有多個 SSL 證書缕棵,那怎么明確這次請求用哪張證書呢?
于是就有了 SNI(TLS 服務器名稱指示)涉兽,它要求在一個 IP 有多個 TLS 服務站點的情況下招驴,客戶端在初始 TLS 握手期間指定要連接到哪個站點,數(shù)據(jù)上的實現(xiàn)就是在 Client Hello 階段里面新增一個 server_name 字段枷畏。

這是原文的流量圖


流量圖

首先得明確别厘,Trojan 是無法通過 Nginx 在 7 層進行代理的,所以它設(shè)定必須在流量入口拥诡,Nginx 都只能掛在它的后面触趴。

所以總的來說,就是所有流量都是通過443先打到Nginx渴肉,再由Nginx負責分發(fā)冗懦,轉(zhuǎn)到相應的端口。

Nginx 支持基于 SNI 的 4 層轉(zhuǎn)發(fā)仇祭。簡單說就是:識別 SNI 信息披蕉,然后直接轉(zhuǎn)發(fā) TCP/UDP 數(shù)據(jù)流。這個可以比 7 層的虛擬主機轉(zhuǎn)發(fā)厲害太多了乌奇,該功能由 ngx_stream_ssl_preread_module 模塊提供没讲,但是 Nginx 默認不啟用該模塊,配置起來也很簡單礁苗,需要注意的是該模塊屬于 stream 爬凑,不是大家常用的 http。

P.S. 下面的Nginx配置和Trojan配置都是摘自原文

Nginx配置如下
user  nginx;

pid   /var/run/nginx.pid;

# 其他配置保持默認即可

# 流量轉(zhuǎn)發(fā)核心配置
stream {
    # 這里就是 SNI 識別试伙,將域名映射成一個配置名
    map $ssl_preread_server_name $backend_name {
        web.cn.chengxiaobai web;
        vmess.cn.chengxiaobai vmess;
        trojan.cn.chengxiaobai trojan;
    # 域名都不匹配情況下的默認值
        default web;
    }

    # web嘁信,配置轉(zhuǎn)發(fā)詳情
    upstream web {
        server 127.0.0.1:10240;
    }

    # trojan,配置轉(zhuǎn)發(fā)詳情
    upstream trojan {
        server 127.0.0.1:10241;
    }

    # vmess迁霎,配置轉(zhuǎn)發(fā)詳情
    upstream vmess {
        server 127.0.0.1:10242;
    }

    # 監(jiān)聽 443 并開啟 ssl_preread
    server {
        listen 443 reuseport;
        listen [::]:443 reuseport;
        proxy_pass  $backend_name;
        ssl_preread on;
    }
}

http {
  # 這塊保持不變即可
}
Trojan配置如下
{
  "run_type": "server",
  "local_addr": "127.0.0.1",
  "local_port": 10241,
  "remote_addr": "127.0.0.1",//轉(zhuǎn)發(fā)回 nginx 默認頁面
  "remote_port": 80,
  "password": [
    "密碼"
  ],
  "log_level": 3,
  "ssl": {
    "cert": "證書地址.crt",
    "key": "證書地址.key",
    "key_password": "",
    "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
    "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
    "prefer_server_cipher": true,
    "alpn": [
      "http/1.1"
    ],
    "alpn_port_override": {
      "h2": 81
    },
    "reuse_session": true,
    "session_ticket": false,
    "session_timeout": 600,
    "plain_http_response": "",
    "curves": "",
    "dhparam": ""
  },
  "tcp": {
    "prefer_ipv4": false,
    "no_delay": true,
    "keep_alive": true,
    "reuse_port": false,
    "fast_open": false,
    "fast_open_qlen": 20
  },
  "mysql": {
    "enabled": false,
    "server_addr": "127.0.0.1",
    "server_port": 3306,
    "database": "trojan",
    "username": "trojan",
    "password": "",
    "cafile": ""
  }
}

Nginx 層統(tǒng)一管理收斂流量入口吱抚,整個主機只用開啟 443 和 SSH 端口即可,同時各個模塊都做了偽裝考廉,「非標請求」看到的都是正常的頁面秘豹,而且 WS 協(xié)議的 CDN 大法完美支持。

同時得益于 Nginx 的優(yōu)秀性能和對 HTTP 協(xié)議的支持力度昌粤,全部請求都可以 HTTP2既绕。

Ref

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涮坐,隨后出現(xiàn)的幾起案子凄贩,更是在濱河造成了極大的恐慌,老刑警劉巖袱讹,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疲扎,死亡現(xiàn)場離奇詭異昵时,居然都是意外死亡,警方通過查閱死者的電腦和手機椒丧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門壹甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壶熏,你說我怎么就攤上這事句柠。” “怎么了棒假?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵溯职,是天一觀的道長。 經(jīng)常有香客問我帽哑,道長谜酒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任妻枕,我火速辦了婚禮甚带,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佳头。我一直安慰自己鹰贵,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布康嘉。 她就那樣靜靜地躺著碉输,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亭珍。 梳的紋絲不亂的頭發(fā)上敷钾,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音肄梨,去河邊找鬼阻荒。 笑死,一個胖子當著我的面吹牛众羡,可吹牛的內(nèi)容都是我干的侨赡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粱侣,長吁一口氣:“原來是場噩夢啊……” “哼羊壹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起齐婴,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤油猫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柠偶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體情妖,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡睬关,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毡证。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片共螺。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖情竹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匀哄,我是刑警寧澤秦效,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站涎嚼,受9級特大地震影響阱州,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜法梯,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一苔货、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧立哑,春花似錦夜惭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捂掰,卻和暖如春敢会,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背这嚣。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工鸥昏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姐帚。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓吏垮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罐旗。 傳聞我的和親對象是個殘疾皇子惫皱,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355