====== 关于nginx做转发时,带'_'的header内容丢失 ====== 使用nginx做负载均衡或http代理时,碰到http header不转发的问题。 配置里只有转发设置原始ip和host的 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Server $host; 原来nginx对下划线的头信息做了限制, - 方法一:不用下划线 既然nginx对下划线不支持,那没关系,不用下划线就是了。比如原来”app_version”改成”app-version”就可以了。(难怪一般header的name都是’-‘来拼接的,比如”User-Agent”) - 方法二:从根本接触nginx的限制 nginx默认request的header的那么中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: underscores_in_headers on; (默认 underscores_in_headers 为off) ====== 解决nginx使用proxy_pass反向代理时,session丢失的问题 ====== 这2天在测试Nginx作为反向代理到Tomcat应用时,session丢失的问题。经过一系列查看官方文档和测试,发现如下: 1、如果只是host、端口转换,则session不会丢失。例如: location /testwx { proxy_pass http://127.0.0.1:8080/testwx; } 通过浏览器访问http://127.0.0.1/testwx时,浏览器的cookie内有jsessionid。再次访问时,浏览器会发送当前的cookie。 2、如果路径也变化了,则需要设置cookie的路径转换,nginx.conf的配置如下 location /testwx { proxy_pass http://127.0.0.1:8080/wx; } 通过浏览器访问http://127.0.0.1/testwx时,浏览器的cookie内没有jsessionid。再次访问时,后台当然无法获取到cookie了。 详细看了文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path 加上路径转换:proxy_cookie_path /wx /testwx;则可以将wx的cookie输出到testwx上,Tomcat的session正常了。正确的配置是: location /testwx { proxy_pass http://127.0.0.1:8080/wx; proxy_cookie_path /wx /testwx;#这里的路径要注意对应关系 } 如果需要更复杂的路径转换可用通配符的方式进行转换,详情要查看http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path了。 ====== 开启Gzip ====== vim /usr/local/nginx/conf/nginx.conf 找到如下一段,进行修改 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; #gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "MSIE [1-6]\."; 3、解释一下 第1行:开启Gzip 第2行:不压缩临界值,大于1K的才压缩,一般不用改 第3行:buffer,就是,嗯,算了不解释了,不用改 第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1 第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧 第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了 第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧 第8行:IE6对Gzip不怎么友好,不给它Gzip了 F.Y.I. http://www.cnblogs.com/mitang/p/4477220.html