摘要:確定偵聽通配符地址的套接字是否只接受連接,或者是接受和連接。此參數(shù)配置偵聽套接字的行為。某些操作系統(tǒng)支持使用,和套接字選項(xiàng)在每個(gè)套接字上設(shè)置保持活動(dòng)參數(shù)??梢允÷砸粋€(gè)或兩個(gè)參數(shù),在這種情況下,相應(yīng)套接字選項(xiàng)的系統(tǒng)默認(rèn)設(shè)置將有效。
Nginx代理TCP主要是使用stream模塊,這個(gè)功能是從1.9.0版本開始的。一、配置代碼
我用它來代理Mysql。
stream { upstream mysqls { hash $remote_addr consistent; server 192.168.58.143:3306 weight=5 max_fails=3 fail_timeout=30s; server 192.168.58.142:3306 weight=1 max_fails=3 fail_timeout=30s; } server { listen 9945; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass mysqls; } }
這個(gè)就是一個(gè)最基本的配置
有幾個(gè)注意的地方:
stream的配置必須是和events同級(jí)的,所以我直接就寫在了nginx.conf主配置文件中的,這樣就確保了和events同級(jí)。當(dāng)然也可以多帶帶寫出來。
這里的server里面是不準(zhǔn)寫location的,所以就不能判斷sss這樣的路徑來做的。我開始的時(shí)候想這樣的,模仿spring實(shí)現(xiàn)的websocket,后來才意識(shí)到,websocket可以這樣是因?yàn)樗B接是靠http協(xié)議的,傳輸才靠tcp的。終于明白了。
server的監(jiān)聽端口不能和http的重復(fù)。
重新加載nginx時(shí)候可能會(huì)出現(xiàn)錯(cuò)誤:[emerg] 30181#0: bind() to 0.0.0.0:8090 failed (13: Permission denied) 這個(gè)錯(cuò)誤是由于SElinux,關(guān)掉這就好了。
關(guān)閉SElinux方法:修改/etc/selinux/config 文件,將SELINUX=enforcing改為SELINUX=disabled重啟之后就好了。
二、用法語法: listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; 默認(rèn)值: — 上下文: server
設(shè)置方式可以是下面任意一種:
listen 127.0.0.1:12345; listen *:12345; listen 12345; # same as *:12345 listen localhost:12345;
IPV6必須加上中括號(hào):
listen [::1]:12345; listen [::]:12345;
UNIX-domain sockets要寫unix: 前綴
listen unix:/var/run/nginx.sock;
ssl
指定連接此端口的連接都是SSL模式
udp
用于處理套接字
proxy_protocol
指定此端口上的所有連接都使用 PROXY protocol協(xié)議
backlog=number
限制掛起連接隊(duì)列的最大長(zhǎng)度(1.9.2)。默認(rèn)情況下,backlog在FreeBSD,DragonFly BSD和Mac OS X上設(shè)置為-1,在其他平臺(tái)上設(shè)置為511。
bind
表示對(duì)一個(gè)指定的address:port對(duì)進(jìn)行多帶帶的綁定。實(shí)是,如果有幾個(gè)listen指令具有相同的端口但地址不同,并且其中一個(gè)listen指令監(jiān)聽給定端口(*:port)的所有地址,nginx將只綁定*:port。 應(yīng)該注意,在這種情況下調(diào)用getsockname()以確定接受連接的地址。 如果使用ipv6only或so_keepalive參數(shù),那么對(duì)于給定的地址:端口對(duì)將始終進(jìn)行多帶帶的綁定。
ipv6only=on|off
確定偵聽通配符地址[::]的IPv6套接字是否只接受IPv6連接,或者是接受IPv6和IPv4連接。 此參數(shù)默認(rèn)處于打開狀態(tài)。 且它只能在啟動(dòng)時(shí)設(shè)置一次。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
此參數(shù)配置偵聽套接字的“TCP keepalive”行為。 如果省略此參數(shù),則操作系統(tǒng)的設(shè)置將對(duì)套接字生效。 如果將其設(shè)置為值“on”,則套接字的SO_KEEPALIVE選項(xiàng)將打開。 如果它設(shè)置為值“off”,則套接字的SO_KEEPALIVE選項(xiàng)被關(guān)閉。 某些操作系統(tǒng)支持使用TCP_KEEPIDLE,TCP_KEEPINTVL和TCP_KEEPCNT套接字選項(xiàng)在每個(gè)套接字上設(shè)置TCP保持活動(dòng)參數(shù)。 在這些系統(tǒng)(目前,Linux 2.4+,NetBSD 5+和FreeBSD 9.0-STABLE)上,可以使用keepidle,keepintvl和keepcnt參數(shù)配置它們。 可以省略一個(gè)或兩個(gè)參數(shù),在這種情況下,相應(yīng)套接字選項(xiàng)的系統(tǒng)默認(rèn)設(shè)置將有效。 例如,
so_keepalive=30m::10三、相關(guān)指令
1.指定preread buffer的大小
Syntax: preread_buffer_size size; Default: preread_buffer_size 16k; Context: stream, server
2.指定preread buffer的超時(shí)時(shí)間
Syntax: preread_timeout timeout; Default: preread_timeout 30s; Context: stream, server
3.指定完成讀取代理協(xié)議頭的超時(shí)時(shí)間,如果超過這個(gè)時(shí)間,就關(guān)閉連接
Syntax: proxy_protocol_timeout timeout; Default: proxy_protocol_timeout 30s; Context: stream, server
4.配置用于將upstream servers中名稱解析到地址的服務(wù)器
Syntax: resolver address ... [valid=time] [ipv6=on|off]; Default: — Context: stream, server This directive appeared in version 1.11.3.
例如:
resolver 127.0.0.1 [::1]:5353; resolver 127.0.0.1 [::1]:5353 valid=30s;
5.名字解析的超時(shí)時(shí)間
Syntax: resolver_timeout time; Default: resolver_timeout 30s; Context: stream, server
6.配置服務(wù)器
Syntax: server { ... } Default: — Context: stream
7.配置stream服務(wù)器
Syntax: stream { ... } Default: — Context: main
8.配置是否允許TCP_NODELAY選項(xiàng),這個(gè)可以用在客戶端和代理服務(wù)器上
Syntax: tcp_nodelay on | off; Default: tcp_nodelay on; Context: stream, server
9.設(shè)置變量的哈希表容量。
Syntax: variables_hash_bucket_size size; Default: variables_hash_bucket_size 64; Context: stream
10.設(shè)置變量的哈希表最大容量
Syntax: variables_hash_max_size size; Default: variables_hash_max_size 1024; Context: stream This directive appeared in version 1.11.2.四、相關(guān)變量
$binary_remote_addr:二進(jìn)制形式的客戶端地址,對(duì)于IPv4地址,值的長(zhǎng)度始終為4字節(jié),對(duì)于IPv6地址,值的長(zhǎng)度始終為16字節(jié)
$bytes_received:從客戶端接收到的字節(jié)數(shù)
$bytes_sent:發(fā)送到客戶端的字節(jié)數(shù)
$connection:連接序列號(hào)
$hostname:host名稱
$msec:當(dāng)前時(shí)間(秒),以毫秒為單位
$nginx_version:nginx版本
$pid:work process的pid
$protocol:和客戶端通信的協(xié)議:TCP或者UDP
$proxy_protocol_addr:PROXY協(xié)議頭中的客戶端地址,或者為空字符串。必須先通過在listen指令中設(shè)置proxy_protocol參數(shù)才能啟用PROXY協(xié)議。
$proxy_protocol_port:PROXY協(xié)議頭中的客戶端端口,或者為空字符串。必須先通過在listen指令中設(shè)置proxy_protocol參數(shù)才能啟用PROXY協(xié)議。
$remote_addr:客戶端地址
$server_addr:接收連接的服務(wù)器地址。計(jì)算此變量的值通常需要一次系統(tǒng)調(diào)用。 為了避免系統(tǒng)調(diào)用,listen指令必須指定地址并使用bind參數(shù)。
$server_port:接收連接的服務(wù)器端口
$session_time:會(huì)話持續(xù)時(shí)間(秒),以毫秒為單位
$time_iso8601:ISO8610格式的本地時(shí)間
$time_local:通用日志格式的本地時(shí)間
status:狀態(tài)值。200:會(huì)話完成;400:客戶端數(shù)據(jù)無法解析,例如PROXY協(xié)議頭;403:訪問受限;500:內(nèi)部服務(wù)器錯(cuò)誤;502:網(wǎng)關(guān)錯(cuò)誤;503:服務(wù)不可用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39845.html
摘要:客戶端必須要進(jìn)行一些特別的設(shè)置才能使用正向代理。正向代理還可以使用緩沖特性減少網(wǎng)絡(luò)使用率。反向代理的典型用途是將防火墻后面的服務(wù)器提供給用戶訪問。反向代理對(duì)外都是透明的,訪問者并不知道自己訪問的是一個(gè)代理。 一、相關(guān)概念 代理一般分為正向代理和反向代理,以下是他們的定義(以下內(nèi)容引自網(wǎng)上) 正向代理,也就是傳說中的代理,他的工作原理就像一個(gè)跳板,簡(jiǎn)單的說,我是一個(gè)用戶,我訪問不了某網(wǎng)...
摘要:一環(huán)境準(zhǔn)備操作系統(tǒng)位版本二安裝下載解壓新建用戶與組組編譯配置文件安裝重定向支持和支持,如果不需要可以不安裝。 一、環(huán)境準(zhǔn)備 操作系統(tǒng):Centos6.4 64位 Nginx版本:1.4.2 二、安裝Nginx 1.下載 [root@localhost nginx]# cd /usr/local/ [root@localhost nginx]# mkdir nginx [root@l...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國(guó)慶假期了,給小伙伴們分享下,從小白程序員到大廠高級(jí)技術(shù)專家我看過哪些技術(shù)類書籍。 大家好,我是...
閱讀 1505·2021-11-17 09:33
閱讀 1269·2021-10-11 10:59
閱讀 2902·2021-09-30 09:48
閱讀 1912·2021-09-30 09:47
閱讀 3035·2019-08-30 15:55
閱讀 2347·2019-08-30 15:54
閱讀 1500·2019-08-29 15:25
閱讀 1655·2019-08-29 10:57