我的服务器上有两个不同的位置:
- 服务器/位置A
- 服务器/位置B
我想使用两个客户端证书 certA 和 certB 来限制对这些位置的访问。
只能使用 certA 才能访问 locationA,而只能使用 certB 才能访问 locationB。
到目前为止我使用不同的端口这样做:
server {
listen 11111 ssl;
server_name ServerA;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_client_certificate certA.crt;
ssl_verify_client optional;
location /A {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
alias /www/data/files/A.html;
}
}
server {
listen 22222 ssl;
server_name ServerB;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_client_certificate certB.crt;
ssl_verify_client optional;
location /B {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
alias /www/data/files/B.html;
}
}
我现在的问题是,是否可以将两个位置都放在同一个端口,例如 (服务器/A 和服务器/B,而不是服务器:11111/A 和服务器:22222/B)? 我需要如何构建我的 nginx 配置才能实现这一点?
答案1
不可以。证书适用于服务器块,因为它必须与服务器名称相对应。
不可能只针对一个位置使用不同的证书。
但是,您只需要不同的服务器块,而且您已经拥有了它。只需添加两个端口为 443 的服务器块,使用不同的server_name
服务器块及其相应的证书即可。