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

请问 Nginx 反代切割子域名如何实现

  •  
  •   binbinyouliiii · 2020-07-23 10:31:57 +08:00 · 2272 次点击
    这是一个创建于 1611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    标题一句话说不清楚,需求是这样的,假设有 a.com 的域名,希望 nginx 收到 ccc.bbb.a.com 的 host 能够反代到 ccc.bbb 这个 host 去,找了一下资料,没有找到怎么配置

    想要类似这样的配置:

    server_name  ${child}.a.com;
    location / {
        proxy_pass              http://${child}:8080;
        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;
    }
    
    第 1 条附言  ·  2020-07-23 11:17:11 +08:00
    使用正则解决了,感谢各位
    ```
    listen 80;
    server_name ~^(?<subdomain>.+)\.a\.com$;

    location / {
    resolver 114.114.114.114;
    proxy_pass http://$subdomain;
    proxy_set_header Host $subdomain;
    }
    ```
    14 条回复    2020-07-23 11:24:18 +08:00
    joesonw
        1
    joesonw  
       2020-07-23 10:38:18 +08:00
    你这个要配合 dns.
    binbinyouliiii
        2
    binbinyouliiii  
    OP
       2020-07-23 10:41:35 +08:00
    @joesonw #1 已经将 *.a.com 的域名都解析到了 这个 IP,Nginx 这边不知道怎么设置
    suman
        3
    suman  
       2020-07-23 10:46:16 +08:00
    配置 hosts
    ghostwwg
        4
    ghostwwg  
       2020-07-23 10:46:48 +08:00
    @binbinyouliiii dns 有种记录叫做 cname
    aapeli
        5
    aapeli  
       2020-07-23 10:48:06 +08:00 via iPhone   ❤️ 1
    4 、匹配正则表达式:

    server {
    listen 80;
    server_name ~^(?.+)\.howtocn\.org$;
    ...
    }
    binbinyouliiii
        6
    binbinyouliiii  
    OP
       2020-07-23 10:48:55 +08:00
    @ghostwwg #4 我是要做动态的,是不只有 ccc.bbb.a.com 这一个域名
    aapeli
        7
    aapeli  
       2020-07-23 10:49:05 +08:00 via iPhone
    nginx server_name 字段支持通配符和正则表达式
    aapeli
        8
    aapeli  
       2020-07-23 10:50:21 +08:00 via iPhone
    @aapeli 好像回复错了
    takemeaway
        9
    takemeaway  
       2020-07-23 10:53:03 +08:00
    这种跳转干嘛走 nginx 呢,直接入口就行了
    joesonw
        10
    joesonw  
       2020-07-23 10:53:29 +08:00
    @binbinyouliiii 不要写 server_name, 然后 rewrite 应该是只可以改写 path. 你这个用 nginx lua 倒是可以实现.
    rrfeng
        11
    rrfeng  
       2020-07-23 10:56:38 +08:00   ❤️ 1
    http://nginx.org/en/docs/http/server_names.html

    server_name 里可以使用命名正则提取你想要的变量

    proxy_pass 里可以使用这个变量
    GM
        12
    GM  
       2020-07-23 10:59:45 +08:00   ❤️ 6
    nginx 问题问我就对了。

    server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.hottocn\.org$;

    location / {
    proxy_pass http://backend_server/;
    proxy_set_header Host $subdomain.ccc.com;
    }

    #或者
    location / {
    proxy_pass http://$subdomain.ccc.com/;
    proxy_set_header Host $subdomain.ccc.com;
    }
    }
    ericgui
        13
    ericgui  
       2020-07-23 11:08:02 +08:00
    @aapeli 正则一方面,容易出错;二方面,性能不行
    GM
        14
    GM  
       2020-07-23 11:24:18 +08:00
    @ericgui 简单的正则没什么性能问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:59 · PVG 05:59 · LAX 13:59 · JFK 16:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.