V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
wu00
V2EX  ›  NGINX

nginx 配置,多个 server 模块相关

  •  
  •   wu00 · 2023-10-27 11:00:06 +08:00 · 994 次点击
    这是一个创建于 391 天前的主题,其中的信息可能已经有所发展或是发生改变。

    nginx 配置

    我的 nginx(1.20-alpine) 配置,以及文件位置:
    /etc/nginx/conf.d/default.conf

    access_log on;
    server_tokens off;
    
    server {
      listen 80;
      server_name _;
      return 404;
    }
    

    /etc/nginx/conf.d/mysite.conf

    server {
      listen 80;
      server_name a.domain.com;
      ...
    }
    
    server {
      listen 443 ssl;
      server_name a.domain.com;
      ssl_certificate: xxx;
      ssl_certificate_key: xxx;
      ...
    }
    
    server {
      listen 80;
      server_name b.domain.com;
      ...
    }
    
    server {
      listen 80;
      server_name c.domain.com;
      ...
    }
    

    只有 a.domain.com 配置了 SSL 证书,b 和 c 并没有证书,也不提供 https 服务。
    这个配置下访问 http://a.domain.comhttps://a.domain.comhttp://b.domain.comhttp://c.domain.com 都很正常;

    问题

    访问 https://b.domain.comhttps://c.domain.com 时就不正常了(虽然浏览器提示风险但还是能点继续访问),会匹配到 a.domain.com 的 server ,也就是把 a.domain.com 的内容给代理出去。

    我的尝试

    添加一个配置处理 b 、a 的 https 请求,虽然有效但是感觉怪怪的;而且我不光只有 b 、c 还有很多 d 、e 、f...

    #有效
    server {
      listen 443 ssl;
      server_name b.domain.com c.domain.com;
      return 404;
    }
    
    #无效
    server {
      listen 443 ssl;
      server_name _;
      return 404;
    }
    
    5 条回复    2023-10-27 11:35:35 +08:00
    OceanBreeze
        1
    OceanBreeze  
       2023-10-27 11:12:11 +08:00
    你 http 都知道配置 default server ,https 也一样

    server {
    listen 443 ssl;
    server_name _;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    return 404;
    }
    wu00
        2
    wu00  
    OP
       2023-10-27 11:27:17 +08:00
    @OceanBreeze 我尝试过
    server {
    listen 443 ssl;
    server_name _;
    return 404;
    }
    无论加不加 ssl_certificate 都是无效的
    OceanBreeze
        4
    OceanBreeze  
       2023-10-27 11:29:46 +08:00
    server {
    server_name _;
    listen 80 default_server;
    listen 443 ssl default_server;

    ## To also support IPv6, uncomment this block
    # listen [::]:80 default_server;
    # listen [::]:443 ssl default_server;

    ssl_certificate <path to cert>;
    ssl_certificate_key <path to key>;
    return 404; # or whatever
    }
    wu00
        5
    wu00  
    OP
       2023-10-27 11:35:35 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3519 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:13 · PVG 19:13 · LAX 03:13 · JFK 06:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.