46.6. Example

46.6.1. Nginx + Tomcat

例 46.5. Nginx + Tomcat

server {
    listen       80;
    server_name  www.example.com;

    charset utf-8;
    access_log  /var/log/nginx/www.example.com.access.log;

    location / {
	    proxy_pass http://127.0.0.1:8080;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ ^/WEB-INF/ {
        deny  all;
    }

    location ~ \.(html|js|css|jpg|png|gif|swf)$ {
        root /www/example.com/www.example.com;
        expires 1d;
    }
    location ~ \.(ico|fla|flv|mp3|mp4|wma|wmv|exe)$ {
        root /www/example.com/www.example.com;
        expires 7d;
    }
    location ~ \.flv {
        flv;
    }

    location ~ \.mp4$ {
        mp4;
    }

}
			

46.6.2. 拦截index.html

背景:网站推广审核需要隐藏或不现实首页,其他页面正常

需求:要求访问首页事显示指定页面

server {
    listen       80;
    server_name any.netkiller.cn;

    charset utf-8;
    access_log  /var/log/nginx/any.netkiller.cn.access.log;
    error_log  /var/log/nginx/any.netkiller.cn.error.log;

    location /index.html {
		ssi on;
		proxy_set_header Accept-Encoding "";
        proxy_pass http://172.16.0.1/www/temp.html;
        proxy_set_header Host www.netkiller.cn;

    }

    location / {
		ssi on;
		rewrite ^/$ /zt/your.html; 

		proxy_set_header Accept-Encoding "";
		proxy_pass http://127.0.0.1:8080;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page  404              /error/404.html;
    error_page  403              /error/403.html;
    error_page  502              /error/502.html;
    error_page  500 502 503 504  /error/500.html;

    location ~ ^/WEB-INF/ {
        deny  all;
    }

    location ~ \.(html|js|css|jpg|png|gif|swf)$ {
        root /www/netkiller.cn/www.netkiller.cn;
        expires 1d;
    }
    location ~ \.(ico|fla|flv|mp3|mp4|wma|wmv|exe)$ {
        root /www/netkiller.cn/www.netkiller.cn;
        flv;
        mp4;
        expires 7d;
    }
    location /zt {
		root /www/netkiller.cn/www.netkiller.cn;
		rewrite ^(.*)\;jsessionid=(.*)$ $1 break;
		expires 1d;
    }
    location ^~ /zt/other/ {
		ssi on;
        proxy_set_header Accept-Encoding "";
        proxy_pass http://172.16.0.1/www/;
        proxy_set_header Host www.netkiller.cn;
		proxy_cache www;
		proxy_cache_valid  200 302  1m;
    }

    location /module {
        root /www/netkiller.cn/www.netkiller.cn;
    }
}
		

46.6.3. Session 的 Cookie 域处理

环境

User -> Http2 CDN -> Http2 Nginx -> proxy_pass 1.1 -> Tomcat 

背景,默认情况下 tomcat 不会主动推送 Cookie 域,例如下面的HTTP头

Set-Cookie: JSESSIONID=8542E9F58C71937B3ABC97F002CE039F;path=/;HttpOnly		

这样带来一个问题,在浏览器中默认Cookie域等于 HTTP_HOST 头(www.example.com),如果网站只有一个域名没有问题,如果想共享Cookie给子域名下所有域名 *.example.com 无法显示。

通过配置Tomcat sessionCookieDomain="example.com" 可以实现推送 Cookie 域

<Context path="" docBase="/www/netkiller.cn/www.netkiller.cn"  reloadable="false" sessionCookieName="PHPSESSID" sessionCookieDomain="netkiller.cn" sessionCookiePath="/" />

这样的配置一般用户的需求都可以满足。我的需求中还有一项,在服务器绑定多个域名(二级域名)。问题来了 Tomcat 将始终推送 netkiller.cn 这个域。其他域名无法正确设置Cookie

$ curl -s -I -H https://www.netkiller.cn/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=netkiller.cn;path=/;HttpOnly

$ curl -s -I -H 'Host: www.test.com' https://www.test.com/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=netkiller.cn;path=/;HttpOnly

$ curl -s -I -H 'Host: www.example.com' https://www.example.com/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=netkiller.cn;path=/;HttpOnly

怎样处理需求呢,我想了两个方案,一个方案是在Nginx中配置,另一个方案是在代码中解决。其中Nginx处理起来比较灵活无需开发测试介入,最终选择nginx方案

server {
	listen       443 ssl http2 default_server;
	server_name _;
    location ~ \.(do|jsp|action)$ {

        ssi on;
	    proxy_set_header Accept-Encoding "";
	    proxy_pass http://127.0.0.1:8080;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

        set $domain $host;
	    if ($host ~* ^([^\.]+)\.([^\.]+)\.([^\.]+)$) {
	        set $domain $2.$3;
	    }
	    proxy_cookie_domain netkiller.cn $domain;
    }
}

server_name _; 接受任何域名绑定,default_server 将vhost 设置为默认主机。最终测试结果:

$ curl -s -I -H https://www.netkiller.cn/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=netkiller.cn;path=/;HttpOnly

$ curl -s -I -H https://www.example.com/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=example.com;path=/;HttpOnly

$ curl -s -I -H https://www.domain.com/index.jsp | grep Set-Cookie
Set-Cookie: PHPSESSID=4DBAF36AA7B79CE1ACBA8DD67702B945;domain=domain.com;path=/;HttpOnly

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

时间: 2024-09-20 19:58:13

46.6. Example的相关文章

中国用户计划采用云计算比例达到46%

10月27日消息,VWware今天在北京举办的2011年vForum大会上表示,在对包括中国.http://www.aliyun.com/zixun/aggregation/14583.html">澳大利亚.印度.韩国在内的8个亚太地区过的6141位企业管理者进行调查后发现,用户越来越将云计算看做是其业务竞争能力的关键性因素,其中87%的受访企业认为云计算与其业务有相关性,这一数据在两年中增长了一倍. 调查结果显示,企业规模越大,对云计算的认知度和采用率也越高,64%被调查公司正在或计划采

安卓老大:三星占46%的安卓市场份额

众所周知,三星是一家巨人般的大企业,平板电脑业务和智能手机业务做得风生水起,已经成功夺走了诺基亚的"世界第一大手机品牌"头衔. 三星如此迅速崛起除了自身的实力和营销能力之外,还和谷歌的安卓系统有莫大关系,可以说,三星设备和安卓系统是相辅相成的. 据国外媒体消息,美国移动广告公司 MillennialMedia 发布报告称三星 2013 年第三季占据 46% 的安卓系统份额,也就是说在美国市场,有 46% 的安卓设备来自三星,这个百分比是去年同期的两倍. 三星在安卓阵营中一家独大的同时,

Dreamweaver MX 2004视频宝典教程(46)

dreamweaver|教程 第 46 集:表格标题 课程目标:学会给表格添加表格标题. 课程要点:在Dreamweaver中为表格添加表格标题(<caption></caption>),并设置相应的属性. [全屏观看] | [下载视频] | 本教程尺寸为 800 * 600 建议全屏在线观看或下载观看,以达到最佳观看效果

Webjx收集46个优秀的网页排版网站实例

网站布局排版,绝对是一门艺术,你可以通过不同元素的排列组合,体现想要表达的重点细节,从而使受众自然接受信息(UCD)!下面是DeviantArt 2009年9月评出的46个优秀的排版艺术!GO! 1. Inspira by AlxDesign 2. Jocoo by SencerBugrahan 3. EG-Layout Web 2.0 by ejsing 4. Moodbase by sinthux 5. Book Store by downsign Different ancient sty

PHP开发框架Yii Framework教程(46) Zii组件-Sortable示例

CJuiSortable显示一个列表,列表中的列表项可以通过拖放重新调整顺序,它封装了 JUI Sortable插件. 其基本用 法如下: <?php Yii::app()->clientScript->registerCss('sortable', " #sortable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #sortable li {margin: 2px; padding: 4px; bo

稳扎稳打Silverlight(46)

稳扎稳打Silverlight(46) - 4.0UI之FlowDirection,TextTrimming,响应鼠标滚轮事件,响应鼠标右键事件,全屏的新特性 介绍 Silverlight 4.0 用户界面(UI)相关: * FlowDirection - 指定文本或界面元素在它们的父元素中的流动方向 * TextTrimming - 文字溢出时的显示方式 * 响应鼠标的滚轮事件 * 响应鼠标的右键事件 * 全屏的新特性 - 当其他程序获得焦点时,是否退出全屏模式 在线DEMO http://w

图片-2.46公式推导有误,应该改为

问题描述 2.46公式推导有误,应该改为

[Qt教程] 第46篇 进阶(六) 国际化

[Qt教程] 第46篇 进阶(六) 国际化 楼主  发表于 2013-10-7 09:23:45 | 查看: 109| 回复: 0 国际化 版权声明 该文章原创于Qter开源社区 导语 在第2篇中讲述如何显示中文时,曾提到使用QTextCodec和tr()的方式直接显示中文,其实这只是一种临时的方法,方便我们快速完成程序,显示效果.当真正要发布一个程序时,最好的方式是在程序中使用英文字符串,而后使用国际化工具进行翻译. 国际化的英文表述为Internationalization,通常简写为I18

Android零基础入门第46节:下拉框Spinner

原文:Android零基础入门第46节:下拉框Spinner    上一期学习了GridView的使用,你已经掌握了吗?本期一起来学习Spinner的使用.     一.认识Spinner       Spinner其实就是一个列表选择框.不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择.     Spinner 与 Gallery 都继承了AbsSpinner,AbsSpinner 继承了AdapterView,因此它也表现出AdapterView的特征:只

中国联通2013全年净利104亿元 同比增长46.7%

2月27日 下午,中国联通今日发布2013年业绩报告.报告显示,去年全年,中国联通营收为2950.4亿元, 同比增长18.5%:净利润为104.1亿元,同比增长46.7%. 主要业绩数据: ·2013年全年,中国联通服务收入2385.7亿元,同比增长13.5%.其中,移动业务收入占比63.4%,非语音业务占比56.2%. ·在服务收入中,移动业务收入1511.3亿元,同比增长19.9%:移动用户净增4167万户,总数突破2.8亿户,ARPU(每用户平均收入)升至48.2元:数据流量达到2698亿