我使用nodejs和nginx作为我的反向代理,在我的nginx配置中有一个服务器块,当客户端通过域名访问我的网站时,它会被锁定:
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com, www.example.com;
location / {
proxy_pass http://localhost:6000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
}
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com, www.example.com;
return 404;
}
所以上面的配置工作正常,但是有时候我需要通过IP地址连接到远程nodejs服务器上的一个端点,我想安全地完成这一操作,所以我在远程服务器上创建了一个自签名证书,并添加了另一个服务器块,如下所示:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name 149.154.150.134;
ssl_certificate /path/to/cert/fullchain.pem;
ssl_certificate_key /path/to/cert/privkey.pem;
location / {
allow 214.107.49.66;
deny all;
}
}
但nginx似乎总是发出let's encrypt证书,即使我尝试通过IP地址访问服务器时也是如此。
openssl s_client -connect 149.154.150.134:443
1条答案
按热度按时间brvekthn1#
Nginx使用Server Name Indication(SNI),当这些块共享相同的IP地址和端口时,通过
server_name
选择适当的server
块。要使用带有SNI的
openssl s_client
测试服务器,需要使用-servername
参数提供服务器名称。例如:
在没有
-servername
参数的情况下,Nginx会将请求定向到默认服务器,默认服务器将是您配置中第一个带有正确listen
指令的server
块,或者是显式标记了default_server
选项的server
块。此外,请注意
server_name
指令接受以空格分隔的主机名列表-而不是逗号分隔。例如: