作者HerryL (metrics is everything@@)
看板Linux
标题[问题] Nginx的map,好像只抓到default?关於同一个port分流
时间Mon Dec 18 10:59:16 2023
各位大大好,
我需要做一个:「同一port分流至ssh server与http server」的事,
找了一下资料,使用nginx加上map来试验,
我的nginx设定档如下:
stream {
upstream server_ssh {
server my_host:22;
}
upstream server_http {
server my_host:7006;
}
map $remote_port $pass_server {
22 server_ssh;
default server_http;
}
server {
listen 8888;
proxy_pass $pass_server;
}
server {
listen 8822;
proxy_pass server_ssh;
}
server {
listen 8806;
proxy_pass server_http;
}
}
接下来我测了些CASE,
CASE 1:ssh user@my_host -p 8822
这样是成功的,
CASE2:curl
http://my_host:8806
这样也是成功的,
以上看起来我的proxy_pass写法是OK的,接着,
CASE 3:ssh user@my_host -p 8888
这样是失败的,而且,我可以在httpd上看到访问失败记录
CASE 4:curl
http://my_host:8888
这样是成功的,
看起来,map的判断功能不见了,一律使用default?
还是其实我拿了一个错的变数来判断,所以永远不会是22,只好map到default,
如果是这样那请问,我该用什麽变数判断呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.19.53 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1702868363.A.BE2.html
1F:推 rickieyang: $remote_port 不会是 22 吧. 12/18 12:57
2F:→ rickieyang: 直觉会先试试 $uri, 有就 http, 没有就 ssh 12/18 12:59
4F:→ HerryL: stream模组地下,无法使用$uri变数...:( 12/19 05:50
5F:→ HerryL: 我来看看sslh,谢谢:) 12/19 05:50
6F:→ HerryL: 错字,改成:“模组底下” 12/19 05:51
7F:推 Reylod: 你要由8888 port分流ash 跟https的话$remote_port都会是 01/16 19:15
8F:→ Reylod: 8888,你要用$ssl_preread_protocol来判断,参考https:/ 01/16 19:15
9F:→ Reylod: /serverfault.com/a/1081363 01/16 19:15