nginx遇到的问题

作者:  最后修改:2013年10月21日  浏览数:428

写在nginx.conf里的代码 别忘了要加

 

ssi 不能解析../../

  src/http/modules/ngx_http_ssi_filter_module.c 找到源码里这个文件   if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {        return NGX_HTTP_SSI_ERROR;    }  然后把这行删掉。

  再重新编译源代码。

 

session粘滞问题

 

ip_hash

  nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的sessionip_hash是在upstream配置中定义的:

  upstream backend {

  server 127.0.0.1:8001;

  server 127.0.0.1:8002;

  ip_hash;

  }

  ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:

  1)/ nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据iphash。譬如使用的是squid为最前端,那么nginxip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。

  2)/ nginx的后端还有其它方式的负载均衡。假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。

  Nginx + tomcat 解决session粘滞问题 nginx-upstream-jvm-route

  patch -p0 < ../nginx-upstream-jvm-route-read-only/jvm_route.patch

  --add-module=/root/nginx-upstream-jvm-route-read-only

  Server.xml

  <Engine name="Catalina" defaultHost="localhost" >

  分别修改为:

  Tomcat01:

  <Engine name="Catalina" defaultHost="localhost" jvmRoute="a">

  Tomcat02:

  <Engine name="Catalina" defaultHost="localhost" jvmRoute="b">

  upstream backend {

  server 192.168.2.88:8080 srun_id=a;

  server 192.168.2.89:8080 srun_id=b;

  jvm_route $cookie_JSESSIONID|sessionid reverse;

  }

  location / aa/

  {

  proxy_pass http://backend;

  proxy_redirect    off;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_set_header X-Real-IP $remote_addr;

  proxy_set_header Host $http_host;

  }

 

5 如何使用Nginx Proxy

  朋友一台服务器运行tomcat 为8080端口,IP:192.168.1.2:8080;另一台机器IP:192.168.1.8。朋友想通过访问http://192.168.1.8即可访问tomcat服务,配置如下:

  在192.168.1.8的nginx.conf上配置如下:

  1)server {

  2) listen 80;

  3) server_name java.linuxtone.org

  4) location / {

  5)proxy_pass http://192.168.1.2:8080;

  6)include /usr/local/nginx/conf/proxy.conf。