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;
http://www.36dj.com/1/2/3.html 301跳转到http://www.36dj.com/2/3.html
rewrite ^/(\d+)/(\d+)/(\d+).html /$2/$3.html 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、隐藏Nginx版本号
#隐藏NGINX版本号#
server_tokens off;
4、Nginx映射Servlet
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;
}