开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

1.6. Example

简介:
+关注继续查看

1.6.1. Nginx + Tomcat

例 1.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;
    }

}
			

1.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;
    }
}
		

1.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 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云监控 --- 主机监控
云监控通过在主机上安装插件,为您的主机提供监控功能。无论您的主机是云服务器ECS,还是其他云厂商的虚拟机或物理机,都可以使用云监控的主机监控功能。目前云监控仅支持为Linux和Windows操作系统的主机安装插件。
0 0
【ECS 常见问题三 —— 镜像】删除&更换 镜像 FAQ
我曾把自己账号中的某个自定义镜像共享给其他账号,现在我可以删除这个镜像吗? 可以删除。但是当您删除共享镜像后,使用该共享镜像创建的 ECS 实例都不能重新初始化系统盘。 所以,建议您把该自定义镜像的所有关系删除后再删除镜像。
0 0
SAP扫盲系列之一:什么是SAP系统和应用服务器
SAP扫盲系列之一:什么是SAP系统和应用服务器
0 0
NAS SMB ACL自动配置自动检查脚本
NAS SMB ACL的系列文章详细叙述了如何安装并启用AD域服务与DNS服务,将阿里云SMB协议文件系统挂载点接入AD域,将Windows客户端加入AD域,Windows客户端以AD域用户身份挂载并使用阿里云SMB协议文件系统。 即便我们提供了多篇文章尽力描述清楚整个NAS SMB ACL的配置步骤,但是复杂的流程仍然给用户造成了困扰。为了让配置更加简单,我们开发了NAS SMB ACL自动配置和自动检查脚本,将复杂的步骤尽量压缩在数个Powershell命令中。 注意:该Powershell每次运行一条修改命令,会弹出确认框,需要手动确认要执行的命令。
0 0
悟空CRM-11.0正式开源发布!
悟空CRM-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离CRM系统
0 0
一种挖掘用户评论文本的跨领域冷启动用户推荐网络 | sigir论文解读
在大型推荐场景中,存在着众多类目(例如亚马逊平台中的书籍、影视推荐等)。用户往往只与其中部分类目有过交互,对于其他类目,由于缺少相应的历史行为记录,协同过滤方法会遭遇冷启动问题。
0 0
阿里云峰会 | 阿里云CDN六大边缘安全能力,全力助推政企数字化转型
6月9日,2020年阿里云线上峰会召开。阿里云CDN正式对外发布基于CDN构建的六大边缘安全能力,全力助推政企数字化发展。
0 0
跑赢业务的同时如何实现技术成长?
做业务就好比打仗,团队是我们的归属。在团队中,我们既要通力协作,又要定义问题,既要业务先赢,又要技术成长。越来越多的前端将投身业务研发,要有更好的发展,业务理解力非常关键。
0 0
Nginx静态资源POST请求返回405状态
http://my.oschina.net/lemonzone2010/blog/174505 同事给了一个json请求,在HTTP接口测试工具中post请求结果返回405状态,get请求则返回数据。
947 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载