NutzCN Logo
问答 Nginx如何将三级域名转向二级域名带不同的参数地址
发布于 24天前 作者 天空 62 次浏览 复制 上一个帖子 下一个帖子
标签: nginx

情况:刚用nginx,二级域名 blog.text.cn已指向tomcat

location / {
		proxy_pass http://tomat7;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		index index.jsp index.html index.htm;
        }

项目要求用户访问

a.blog.test.cn 转向 blog.text.cn/a
和
b.blog.text.cn 转向 blog.text.cn/b

希望是网址还是显示三级域名,有那位兄台处理过类似情况的请指导。

另:
1、nginx在win7里试用,发现start nginx后,出现很多进程,正常吗?nginx -s stop或quit 发现进程不会全部注销,很时奇怪。
2、装过两个版本的nginx,用nginx -s reload 感觉还是读出之前版本的nginx的配置(也不知是浏览器缓存还是配置未更新),指教下。
谢谢

10 回复

windows请用iis

来自炫酷的 NutzCN

@wendal 兽哥,用window先学习也行吧,怎处理呀?

tomcat里面也用域名配

来自炫酷的 NutzCN

context path可是相当不好搞的

来自炫酷的 NutzCN

@wendal 其实不是context path,也就是映射到同一个项目的action里@At({ "/blog/?" }),然后根据这个参数来取不同的设置。

这个项目就是tomcat的root项目
我的想法如果是是泛域名进来后,rewrite一下,把三级域名变成二级域名带参数的,应该是可行的。之前用apache多一些,想换个nginx来试试(见大家都说好,特别是你^_^!),nginx不会弄,度娘找两天了,居然没有类似的应用。

set_by_lua $newpath "写段lua代码";
proxy_set_header $host blog.text.cn;
proxy_pass http://tomcat/$newpath;

@wendal 下午试了一圈,发现了下面这种方法,测试可行,暂时没发现问题。

upstream tomat7{
        server 127.0.0.1:8080;
        keepalive 65;
    }

     #泛域名解析  
     server {   
        listen       80;   
        server_name  *.blog.test.cn;   
        location / {   
            # 泛域名开始配置  
            if ( $host ~* (.*)\.(.*)\.(.*)\.(.*) ) {  
            set $domain3 $1; #取三级域名前缀,原来可以这样设变量
            }  
        proxy_pass http://tomat7/$domain3/; #有上面的变量就简单了,我拼字符串
        proxy_set_header	Host $host;   
        proxy_set_header	X-Real-IP	$remote_addr;   
        proxy_set_header	X-Forwarded-For	$proxy_add_x_forwarded_for;   
        }   
          
    }

嗯嗯, 不错

$host 写成 $http_host 更好吧

如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。

nginx不算很熟,查阅资料是这样说的,如果$host一直是类a.blog.test.cn的三级域名,我觉得$host好点吧,如果只是blog.text.cn的,可能要换$http_host。理解不是很透,顺便吐槽一下nginx的访问日志不清析。

添加回复
请先登陆
回到顶部