nginx挂载不同服务在443/80端口,但 server_name 没有起效?

新手上路,请多包涵

我的一个nginx服务器上面同时部署了 a.aa.cc 和 b.bb.co 两个服务(各自都监听了 80 端口和 443 端口)
使用的是指定的 server_name (完全匹配模式)

也设置了fastcgi_param SERVER_NAME $host;
但是如果使用 openssl s_client -connect a.aa.cc:443 | openssl x509 -pubkey -noout
会获取得 b.bb.co 的公钥证书。

配置如下:

upstream web_server {
  server 127.0.0.1:5001;
  keepalive 65;
}

upstream web_server2 {
  server 127.0.0.1:5002;
  keepalive 65;
}


server {
  listen        80;
  server_name   a.aa.cc;
  rewrite ^(.*) https://$server_name$1 permanent;
}

server {
  listen      443;
  server_name a.aa.cc;
  access_log  /var/log/nginx/a.aa.cc.access.log;
  error_log   /var/log/nginx/a.aa.cc.error.log;

  ssl on;
  ssl_certificate     /etc/nginx/certs/a.aa.cc/ssl.pem;
  ssl_certificate_key /etc/nginx/certs/a.aa.cc/ssl.key;

  location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host  $http_host;
    proxy_set_header   X-Nginx-Proxy true;
    proxy_set_header   Connection "";
    proxy_http_version 1.1;
    proxy_pass         http://web_server;
  }
}

server {
  listen        80;
  server_name   b.bb.co;
  rewrite ^(.*) https://$server_name$1 permanent;
}

server {
  listen      443;
  server_name b.bb.co;
  access_log  /var/log/nginx/b.bb.co.access.log;
  error_log   /var/log/nginx/b.bb.co.error.log;

  ssl on;
  ssl_certificate     /etc/nginx/certs/b.bb.co/ssl.pem;
  ssl_certificate_key /etc/nginx/certs/b.bb.co/ssl.key;

  location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host  $http_host;
    proxy_set_header   X-Nginx-Proxy true;
    proxy_set_header   Connection "";
    proxy_http_version 1.1;
    proxy_pass         http://web_server2;
  }
}
阅读 3.3k
2 个回答

你修改配置后重新加载配置让配置生效没有?
你配置的密钥文件检查是正确的?没有出现误放可能?

新手上路,请多包涵

NGINX与OpenSSL在HTTPS请求中的角色

当使用HTTPS时,Nginx通过OpenSSL(或其他SSL/TLS库)来处理SSL/TLS加密和解密,确保数据在传输过程中的安全性。
OpenSSL是一个开源的SSL和TLS协议的实现,提供了加密与解密的功能。
在HTTPS请求中,Nginx首先会解密从客户端接收到的加密数据,然后按照上述HTTP请求的处理流程进行处理。处理完请求后,Nginx会将响应内容加密并通过SSL/TLS连接发送回客户端。
DNS解析过程

浏览器缓存检查:浏览器会首先检查本地缓存中是否有该域名的解析结果。
操作系统缓存检查:如果浏览器缓存中没有结果,浏览器会检查操作系统的缓存,如Windows中的C:\Windows\System32\drivers\etc\hosts文件或Linux中的/etc/hosts文件。
LDNS查询:如果上述缓存中都没有结果,浏览器会向本地DNS服务器(LDNS)发送查询请求。LDNS通常会缓存域名解析结果,以减少对根DNS服务器的查询次数。
递归查询:如果LDNS中没有缓存结果,它会向根DNS服务器发送查询请求,然后根DNS服务器会返回负责该域名的顶级域名(TLD)服务器的地址。LDNS会向该TLD服务器发送查询请求,TLD服务器再返回权威DNS服务器的地址。最后,LDNS向权威DNS服务器发送查询请求,获取最终的IP地址。
在DNS解析过程中,Nginx并不直接参与,但它是基于DNS解析结果来建立与客户端的连接。当Nginx收到一个HTTP或HTTPS请求时,它会根据请求中的域名和端口信息来查找对应的server块,并按照配置进行处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
项目管理
子站问答
访问
宣传栏