tengine/nginx-tomcat动静分离遇到的问题

    小站安装好tengine后,接下来的工作就是要配置好tengine让其和后端的tomcat正常的连接工作起来,tengine的配置文件本身比较简单,网上有大量的相关介绍说明文档,我这里只是摘出我配置过程中遇到一些坑,分享给有需要的朋友们:

访问首页报403错误

403 Forbidden
You don't have permission to access the URL on this server. 
Sorry for the inconvenience.Please report this message and include the 
following information to us.Thank you very much!
URL:    http://www.coolskill.net/    
Date:    2014/05/31 15:15:28    
Powered by Tengine/2.0.1

    比如访问网站 www.coolskill.net 时报403错误,此时要检查当前nginx的用户是哪一个,有没有权限操作对应的资源文件,起初我并没有配置用户信息,导致浏览器请求css/js文件时直接403;另外还需要确认的是网站的根目录下有没有index中配置的相关文件。这个问题困绕了我较长一段时间,由于我的首页地址配置的是index.htm,此地址根目录文件夹下并无此文件。在我之前的认识中,根据我的proxy配置tengine/nginx会将index.htm的请求路由到后端tomcat处理,但事实上并非如此,我就在根目录下建了一个名为index.htm的文件,于是就解决了这个问题.


tomcat access日志记录IP为nginx地址


    在tomcat上记录下来的访问日志请求IP都是tengine的地址,此时需要在nginx转发时配置当前请求header:

proxy_set_header X-Real-IP $remote_addr;

    同时还需要修改tomcat日志参数,在日志格式中添加%{X-Real-IP}i,如下所示:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
   prefix="acc." suffix=".txt"  rotatable="true" fileDateFormat="yyyyMMdd"
   pattern="%{X-Real-IP}i %h %l %u %t &quot;%r&quot; %s %b" />

    了解日志系统MDC概念的人肯定对%{X-Real-IP}i这种写法感到很眼熟,是的,这个X-Real-IP就是我们在nginx.conf中配置的那个请求头字段名,我们可以在TOMCAT后台将这个字段打印出来。后面紧跟着的那个字母i表示的就是从请求头中取值(for incoming headers)。关于tomcat上访问日志的配置格式详细情况可以参考:http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html这个文档中的介绍。


    以下为本站的nginx.conf配置文件部分内容如下:

user  xxx xxx;
http
{
  include       mime.types;
  include /usr/local/nginx/conf/proxy.conf;
  server
  {
listen       80;
server_name  www.coolskill.net coolskill.net;
index index.html  index.jsp  index.htm;
root  xxxxx;
location ~ (\.htm)|(\.jsp)$
{
proxy_redirect off;
proxy_set_header HOST www.coolskill.net;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 30d;
}
    }
}