您的位置:首页 > 运维架构 > Nginx

Nginx应用中的一些实际需求解决方案

2010-04-01 20:30 288 查看
1.URL重定向

1.1 域名泛解析,如需要把http://wo500.com、a.wo500.com、b.wo500.com、c.wo500.com等一切不是以www开始的都跳转(301重定向)到www.wo500.com上,则可在nginx的配置文件中(具体的某个站点的nginx配置文件中更好)加上如下一段话:

#设置301重定向(益于搜索引擎)
if ($host != 'www.wo500.com') {
rewrite ^/(.*)$ http://www.wo500.com/$1 permanent;
}


1.2.网站运营一段时间后,有这样一个需求就出来了如:http://www.wo500.com/Down/1.html、http://www.wo500.com/Down/2.html、http://www.wo500.com/Down/3.html等等有无数个这样的静态页面文件(后台自动生成的)。。这是原来的下载页面.但现在由于某种原因,需要把这些大量的静态文件迁移到站点下的另一个目录结构下(即是说网站后台的页面生成目标地址发生了改变),但此时由于搜索引擎大量的抓取了网站上的这些静态文件,如果我们把原来的删了(Down/1.html),直接改用新的目录结构存放(Down/1/index.html),则请求URL地址就变成了http://www.wo500.com/Down/1/(index.html可省略),此时如果从搜索引擎过来的用户访问(由于搜索引擎要删除404不存在的收录页面需要很长的一段时间)的URL则还是原来的URL(http://www.wo500.com/Down/1.html),好了,长篇大论也这么多了,既然有问题,那么就需要我们去解决它不是吗?还是它----301重定向。规则:
http://www.wo500.com/Down/1.html ---> http://www.wo500.com/Down/1/ http://www.wo500.com/Down/2.html ---> http://www.wo500.com/Down/2/ http://www.wo500.com/Down/3.html ---> http://www.wo500.com/Down/3/ http://www.wo500.com/Down/4.html ---> http://www.wo500.com/Down/4/ http://www.wo500.com/Down/5.html ---> http://www.wo500.com/Down/5/
。。。。。。。

明白了吧,也就是说当用户请求http://www.wo500.com/Down/1.html这类URL的时候,则Nginx就要发起一个重定向把该URL重定向到http://www.wo500.com/Down/1/。其实只需要一句代码就可解决这个问题,谁叫有万能正则表达式呢。

rewrite ^/Down/(/d+)/.html /Down/$1/ permanent;


1.3 不多作理论的知识解释了.

需求:http://abc201004-03x32768.wo500.com(201004:年月,03:日,32768:文章ID,abc - x为固定值),其中不同的文章所对应的年月日与文章ID都是会变化的.现网站因需求调整要把原来所对应的这个URL地址调转成http://www.wo500.com/u/201004/03-32768.html.为了对搜索引擎机器人作良好的SEO,所以还是要用301重定向:

server {
listen 80 default;
server_name *.wo500.com;
#http://abc201004-03x32768.wo500.com/
#http://www.wo500.com/u/201004/03-32768.html
if ($http_host ~* "^abc(.*)-(.*)x(.*)/.wo500/.com$") {
set $a $1;
set $b $2;
set $c $3;
rewrite ^(.*) http://www.wo500.com/u/$a/$b-$c.html permanent;
}
}


2.解决Nginx后端服务器(tomcat等)不能得到客户端真实IP的问题

location ~ (/.do)|(/.ejf)$ {
proxy_pass  http://www.wo500.com:4955; #把客户端真实IP传递给后端服务器
proxy_set_header  X-Real-IP  $remote_addr;
}


// Nginx传过来的真实IP
tring ip = ActionContext.getContext().getRequest().getHeader("X-Real-IP");
if (ip == null || "".equals(ip))
ip = ActionContext.getContext().getRequest().getRemoteAddr();


此时在后端服务器可用httpServletRequest.getHeader("X-Real-IP")来得到客户端的真实IP.

3、隐藏Ngfinx版本号

#隐藏NGINX版本号#

server_tokens off;

[b]4、Nginx映射Servlet

[/b]

location ^~/servlets/* {
proxy_pass              http://localhost: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: