【发布时间】:2020-01-16 13:12:35
【问题描述】:
我还有一个问题。是否有可能为每个我像上面那样反向代理的系统在启用模块的文件夹中有一个单独的 conf 文件。我试过这个,但是,nginx 一直说,stream 指令是重复的。也许我可以将一个流模块指向各种服务器配置,但我不知道该怎么做。
有人可以帮忙吗?
【问题讨论】:
标签: nginx stream reverse-proxy
我还有一个问题。是否有可能为每个我像上面那样反向代理的系统在启用模块的文件夹中有一个单独的 conf 文件。我试过这个,但是,nginx 一直说,stream 指令是重复的。也许我可以将一个流模块指向各种服务器配置,但我不知道该怎么做。
有人可以帮忙吗?
【问题讨论】:
标签: nginx stream reverse-proxy
我在实验室环境中使用了您的用例,您实际上找到了一个非常简洁的解决方案,可以根据传入的子域流式传输代理传递。主要问题仍然是in my comment 提到的:你不能有两次你正在收听的同一个端口(在你的情况下是 443)。那是你在大组合文件中没有的东西,但是你在分割文件中引入它,并且由于 nginx 只是连接分离的文件,你提到的错误就会发生。
从我的角度来看,通过更改文件的拆分它应该可以工作。这是一个我觉得有用的例子。它由三部分组成:
server {} 指令,端口为 5480,因为该指令仅在它可以进入服务器特定文件时使用。如果其他服务器也会出现这种情况,则必须放在后缀文件中。$upstreamvariable,该指令始终相同我以数字开头的文件名以确保它们在 nginx 连接它们时的顺序。
请注意,我已经使用我拥有并且可以控制的 DNS 和服务器对此进行了测试。我确实重写了示例,以使它们与您的情况相匹配。我希望它能按原样工作,但由于我没有您的设置,它可能无法立即工作。
前缀:00_prefix.conf
map $ssl_preread_server_name:$server_port $upstream {
tempserver01.domain.com:5480 tempserver01_vapp_5480;
tempserver01.domain.com:443 tempserver01_backend_443;
tempserver02.domain.com:443 tempserver02_backend_443;
}
服务器 1:01_realserver01.conf
upstream $upstream {
hash $remote_addr consistent;
server duckduckgo.com:443;
}
server {
listen 5480;
proxy_pass $upstream;
ssl_preread on;
}
服务器 2:02_realserver02.conf
upstream $upstream {
hash $remote_addr consistent;
server duckduckgo.com:443;
}
您肯定已经意识到server {} 部分丢失了。这是因为它在所有情况下都是 100% 相同的,因此必须在一个文件中分离,以确保它在连接的大配置中仅出现 1 次 nginx 正在从分离的所有点点滴滴中创建配置文件。
后缀:99_suffix.conf
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
使用nginx -s reload 重新加载 nginx 后,您可以检查 nginx 已使用 nginx -T 加载的完整连接配置,您会看到如下内容:
# configuration file /etc/nginx/stream/enabled/00_prefix.conf:
map $ssl_preread_server_name:$server_port $upstream {
tempserver01.domain.com:5480 tempserver01_vapp_5480;
tempserver01.domain.com:443 tempserver01_backend_443;
tempserver02.domain.com:443 tempserver02_backend_443;
}
# configuration file /etc/nginx/stream/enabled/01_realserver01.conf:
upstream $upstream {
hash $remote_addr consistent;
server duckduckgo.com:443;
}
server {
listen 5480;
proxy_pass $upstream;
ssl_preread on;
}
# configuration file /etc/nginx/stream/enabled/02_realserver02.conf:
upstream $upstream {
hash $remote_addr consistent;
server duckduckgo.com:443;
}
# configuration file /etc/nginx/stream/enabled/99_suffix.conf:
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
如您所见,分离的文件以正确的顺序组合在一起,一切都应该按预期工作。希望对你有帮助。
【讨论】:
include *.conf 命令无法保证这一点。您还可以做的是使用*.include 文件并手动将它们一个接一个地以正确的顺序放置。我在我提到的 github repo 中也有这方面的例子。但我必须说实话:我还没有完全理解你的用例。您可以发布您今天拥有的示例配置文件吗?也许到那时会更清楚。谢谢。