云点博客-关注全栈开发云点博客

关注全栈开发
提升用户体验

Windows下配置Nginx负载均衡,将IIS多版本二级域名切换为二级目录

本文解释了如何将使用二级域名访问的站点使用Nginx来代理为二级目录访问。

本文使用C#的.Net框架作为例子,来解释如何将IIS下发布的二级域名切换为二级目录。

准备材料:

1. Nginx

2. IIS

3. 多站点

假设在IIS上已经存在  a.com / en.a.com / es.a.com 3个版本

将Nginx解压至任意目录 (个人建议存放在系统盘,毕竟是属于环境类的软件)

修改Nginx的配置文件,文件在 Nginx/conf/nginx.conf中

增加负载均衡节点

   upstream webcn {

        server 127.0.0.1:8080;

    }

    upstream weben {

        server 127.0.0.1:8081;

    }

    upstream webes {

        server 127.0.0.1:8082;

    }

再增加server配置

        location /cn/ {

            proxy_set_header language cn;

            proxy_pass   http://webcn/;

        }

        

        location /en/ {

            proxy_set_header language en;

            proxy_pass   http://weben/;

        }

        

        location /es/ {

            proxy_set_header language es;

            proxy_pass   http://webes/;

        }

        location / {

            proxy_set_header language cn;

            proxy_pass   http://webcn/;

        }

比较重要的是  proxy_set_header language es;

这句话的意思是设置请求头,代理的时候会将设置的请求头代入应用

在程序中设置输出的时候替换对应的资源路径,以免找不到路径以及对应链接无法替换

/// <summary>  

/// 重写Render方法,来改变对应路径  

/// </summary>  

/// <param name="writer"></param>  

protected override void Render(HtmlTextWriter writer)

{

    StringWriter sw = new StringWriter();

    HtmlTextWriter htmlWriter = new HtmlTextWriter(sw);

    base.Render(htmlWriter);

    string html = sw.ToString();

 

    if (Request.Headers["language"] != null)

    {

        string language = Request.Headers["language"] as string;

        html = html.Replace("href=\"/", "href=\"/" + language + "/");

        html = html.Replace("src=\"/", "src=\"/" + language + "/");

    }

    writer.Write(html);

}

这样就可以在对应目录输出对应的路径,就可以实现访问的时候输入对应路径来访问了,后台可以配置使用二级域名或者端口来访问

赞(18) 打赏