本文解释了如何将使用二级域名访问的站点使用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);
}
这样就可以在对应目录输出对应的路径,就可以实现访问的时候输入对应路径来访问了,后台可以配置使用二级域名或者端口来访问