nginx如何做泛域名解析

server {
        listen       80;
        root /public_html;
        server_name www.myname.com www.myname.com;
        index  index.html index.php index.htm;
        error_page  400 /errpage/400.html;
        error_page  403 /errpage/403.html;
        error_page  404 /errpage/404.html;
        error_page  503 /errpage/503.html;
        location ~ \.php$ {
                proxy_pass http://127.0.0.1:88;
                include naproxy.conf;
        }
        location ~ /\.ht {
                deny  all;
        }
        location / {
                try_files $uri @apache;
        }
        location @apache {
                 proxy_pass http://127.0.0.1:88;
                 include naproxy.conf;
        }
}

以上是我们目前nginx配置

**正常访问如下
http://www.myname.com/fromid/a1
http://www.myname.com/fromid/a2
http://www.myname.com/fromid/a3
http://www.myname.com/fromid/a4
怎么修改能如下访问:
http://a1.myname.com
http://a2.myname.com
http://a3.myname.com
http://a4.myname.com**

**还有一种正常访问如
http://m.myname.com/fromid/a1
http://m.myname.com/fromid/a2
http://m.myname.com/fromid/a3
http://m.myname.com/fromid/a4
想改成如下访问:
http://a1.m.myname.com
http://a2.m.myname.com
http://a3.m.myname.com
http://a4.m.myname.com**

阅读 4k
4 个回答

使用 Nginx 的反向代理做映射就行,配置如下:

server_name ~^(?<subdomain>.+).myname.com;
location ~ ^/fromid/a1 {
                proxy_pass http://a1.myname.com;
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            }

server_name m.myname.com;
location ~ ^/fromid/a1 {
                proxy_pass http://a1.m.myname.com;
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            }

如果要做泛域名解析,可以这样配置:

server_name ~^(?<subdomain>.+).myname.com;
root  /public_html/$subdomain;

域名解析是 DNS 做的事,不是 nginx 这个 HTTP Server 做的。

@wuYin
我现在把nginx配置改成了

server {
        listen       80;
        root /www/web/novel/public_html;
        server_name ~^(?<subdomain>.+).m.myname.com;
        index  index.html index.php index.htm;
        error_page  400 /errpage/400.html;
        error_page  403 /errpage/403.html;
        error_page  404 /errpage/404.html;
        error_page  503 /errpage/503.html;
        location ~ \.php$ {
                proxy_pass http://127.0.0.1:88;
                include naproxy.conf;
        }
        location ~ /\.ht {
                deny  all;
        }
        location / {
                try_files $uri @apache;
        }
       location ~ ^/fromid/$subdomain {
                proxy_pass http://$subdomain.m.myname.com;
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       }
        location @apache {
                 proxy_pass http://127.0.0.1:88;
                 include naproxy.conf;
        }
}

        

这样不行

我访问 http://m.myname.com/Bookcase/...
改成 http://785843450.m.myname.com... 就不能访问了

server_name 有三种配置方式, 原值, 正则, glob

正则加个~前缀, ~(.*).xxx.com
glob, *.xxx.com

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