我想在同一个 nginx 配置中的同一端口(443)上处理 2 个服务器名,例如“web1.example.com”和“web2.example.com”,其中第一个应该是本地服务器http,第二个需要转发到外部上游而不终止 SSL 连接。
我该如何配置这个?
细节:
我可以使用 nginx 查看第一条 SSL 消息 (CLientHello) 并使用它来代理/转发整个连接,而无需终止 SSL。这甚至可以查看 SNI 并根据其中的服务器名称选择不同的上游。这使用ngx_stream_ssl_preread_module和proxy_pass。ssl_preread on配置是这样的:
stream {
upstream web1 {
server 10.0.0.1:443;
}
upstream web2 {
server 10.0.0.2:443;
}
map $ssl_preread_server_name $upstream {
web1.example.com web1;
web1-alias.example.com web1;
web2.example.com web2;
}
server {
listen 443;
resolver 1.1.1.1;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass $upstream;
ssl_preread on;
}
}
Run Code Online (Sandbox Code Playgroud)
这是在streamnginx 的 config 部分配置的。
但我也可以在 nginx 的配置部分配置本地 http 服务器http。那么,如果我希望 web1(示例中的“web1.example.com”)使用这样的“本地 nginx http 服务器”,而不是外部“上游服务器”,该怎么办?(“web2”仍然应该像以前一样转发。)所以我想在httpnginx的配置部分配置“web1.example.com”,并在streamnginx的配置部分“转发”到它。
需要明确的是,我希望“web1.example.com”配置如下:
http {
server {
listen 443 ssl;
server_name web1.example.com web1-alias.example.com;
ssl_certificate ...
location ...
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行stream或http侦听同一端口,这一切都有效。但如何在同一个端口上执行这两项操作呢?如何http从streams配置部分“调用”配置部分?可以以某种方式proxy_pass引用本地 nginxhttp服务器吗?
Iva*_*sky 11
我不认为你可以在同一个端口上使用两者,但也许这样的东西会起作用?
stream {
upstream web1 {
server 127.0.0.1:8443;
}
upstream web2 {
server 10.0.0.2:443;
}
map $ssl_preread_server_name $upstream {
web1.example.com web1;
web1-alias.example.com web1;
web2.example.com web2;
}
server {
listen 443;
resolver 1.1.1.1;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass $upstream;
ssl_preread on;
}
}
http {
server {
listen 8443 ssl;
server_name web1.example.com web1-alias.example.com;
ssl_certificate ...
location ...
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27190 次 |
| 最近记录: |