Nginx-加密会话
2018-11-30 08:28
260 查看
Nginx实现ssl会话加密:
ssl on | off; 为指定虚拟机启用HTTPS protocol, 建议用listen指令代替 ssl_certificate file; 当前虚拟主机使用PEM格式的证书文件 ssl_certificate_key file; 当前虚拟主机上与其证书匹配的私钥文件 ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 支持ssl协议版本,默 认为后三个 ssl_session_timeout time; 客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; none: 通知客户端支持ssl session cache,但实际不支持 builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有 [shared:name:size]:在各worker之间使用一个共享的缓存 server { listen 443 ssl default_server; listen [::]:443 ssl http2 default_server; server_name app.a.com; root /www/app/html; ssl_certificate "/etc/nginx/conf.d/nginx.crt"; ssl_certificate_key "/etc/nginx/conf.d/nginx.key"; # ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_session_cache shared:sslcache:20m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; # location / { } } } 支持同一主机多虚拟主机实现ssl会话 快速申请测试证书: 在/etc/pki/tls/certs/目录下执行: make [*].crt即可 需要更改一下Makefile文件 /usr/bin/openssl genrsa $(KEYLEN) > $@ #/usr/bin/openssl genrsa [-aes128】 $(KEYLEN) > $@ 去掉[]中的内容,否则会加密!
Nginx地址重写功能:
7 地址重写-rewrite[server|location] rewrite [表达式] [替换路径] [标志位] location / { root /www/b.org; rewrite ^/images/(.*)$ /imgs/$1; } 这样用户再查找http://www.b.org/images/a.jpg就会跳转至 http://www.b.org/imgs/a.jpg--这个网站一样会被location规则检查 标志位: last:一旦被rewrite规则匹配并重写后,立刻停止检查后续的 rewrite规则,而后通过重写后的规则重新发起请求[响应码200] break:一旦被rewrite规则匹配并重写后,立刻停止检查后续的 rewrite规则,而后继续由nginx进行后续的操作 redirect:临时重定向 重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端 由客户端重新发起请求 使用相对路径,或者http://或https:// 开头 状态码返回302临时重定向[访问路径会改变|会发起两次请求] permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端 由客户端重新发起请求 状态码:301 具体应用1:整网站重定向 server { server_name www.c.com; listen 80; index index.html; root /web/c.com; error_page 404 =302 /404.html; location /test2/ { try_files $uri /test2/test.html; } location / { rewrite / http://www.a.com/break; } } 测试访问: [root@apache113:21:20network-scripts]#curl -L http://www.c.com <h1>test a.com page for nginx virt</h1> 已经跳转至www.a.com网站! 具体应用2:http--->https在不同虚拟机之上 location / { rewrite / https://app.a.com/; } 测试访问: [root@apache113:28:41network-scripts]#curl -Lk http://www.c.com <h1>test nginx ssl session page</h1> 具体应用3:http--->https在同一虚拟主机 如果此时在按照之前的设置进行配置就会出现死循环 因为无论是http还是https都是一个"/" 报错格式: [root@apache113:30:50network-scripts]#curl -Lk http://app.a.com curl: (47) Maximum (50) redirects followed 此时我们就需要用到另外一个关键语法: if(判断条件) { } 使用"="和"!="来比较变量与字符串的关系。 使用"~"(对于区分大小写匹配)和"~*"(不区分大小写匹配)的操作符来匹配变量的正则表达式。 正则表达式可以包含可用于以后重用的$ 1…$ 9变量的捕获。 "!~"和"!"!~*"也可用。 如果正则表达式包含"}"或""字符,则整个表达式应该用单引号或双引号括起来。 用"-f"和"!-f"检查文件的存在性! 用"-d"和"!-f"检查目录的存在性! 用"-e"和"!-e"检查文件、目录或符号链接的存在! 用"-x"和"!-x"检查可执行文件 Nginx内置变量:$scheme[获取http|https] 正确设置方式: location / { if ( $scheme = http ) { rewrite / https://app.a.com; } } 解析:如果请求协议时http就转发! 测试结果: [root@apache113:30:54network-scripts]#curl -Lk http://app.a.com <h1>test nginx ssl session page</h1> return code: 用于结束rewrite规则,并且为客户端返回状态码 可以使用的状态码有 204 400 402-406 500-504等 具体使用:返回提示语句 location /admin { return 403 "You can't GET this region"; } 访问测试: [root@apache113:44:30network-scripts]#curl -I http://www.c.com/admin HTTP/1.1 403 Forbidden 具体使用2:直接跳转其它页面 location /admin { return http://app.a.com; } 测试结果: [root@apache113:46:59network-scripts]#curl -Lk http://www.c.com/admin <h1>test nginx ssl session page</h1> rewrite_log on|off 是否把重写过程记录再错误日志中,默认级别为notice级别 默认是off,再繁忙的服务器中不建议打开 设置: server { server_name www.c.com; listen 80; index index.html; root /web/c.com; error_log /web/c.com/c.com.erro.log; rewrite_log on; error_page 404 =302 /404.html; location /test2/ { try_files $uri /test2/test.html; } location /admin { return http://app.a.com; } location /down { rewrite /down http://www.c.com/test2; } } 仅对rewrite语句有效|对return语句不起作用! set $variable value; 用户自定义变量 注意:变量定义和调用都要以$开
Nginx防盗链:
很多情况下,如果我们没有对我们网站的资源做足够多 的保护,就很可能被别的网站进行盗链活动,这样会很占 据我们自己的网络带宽! 例如: 我们自己的网站:www.c.com 竞争产品网站:www.a.com a网站index.html主页代码: [root@www19:20:50a.com]#cat index.html <h1>test a.com page for nginx virt</h1> <img src="http://www.c.com/linux.jpg"> 这样访问的时候,会在a网站的页面上出现我们的图片! 这时候就需要我们运维人员进行设置,防止对方盗链: 方法:valid_referers[server|location] 1 定义合规的引用 valid_referers none | blocked | server_names | string ...; 解析: none:referer为空,浏览器直接访问referer值为空, 应该允许访问 blocked:请求首部中有referer字段,但是referer字段被 清空,通常情况下应该允许访问 server_names:主机名 regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头 arbitrary_string:任意字符串,但可使用*作通配符 2 拒绝不合规的引用 if($invalid_referer) { rewrite; } 具体应用: c网站运维人员设置: location ~* .*\.(jpg|gif)$ { valid_referers none blocked www.c.com *.c.com; if ($invalid_referer) { rewrite ^/ http://www.c.com/test2/index.html; } } 这样再次访问a网站的时候就不会被盗链了!
相关文章推荐
- IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法 分类: 数据安全 2014-06-28 11:35 2804人阅读 评论(0) 收藏
- Nginx+Tomcat+Redis实现持久会话
- 通过Nginx+Tomcat+Redis实现持久会话
- Nginx反向代理实现会话(session)保持的两种方式
- Tomcat(三) Tomcat安装配置: Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群
- 对基于Lua和Nginx的iOS应用数据的加密框架
- lnmp添加nginx-sticky-module-1.1模块解决负载均衡会话保持问题。
- nginx+apache实现网站的ssl加密(https)
- 如何使用 ASP.NET 实用工具加密凭据和会话状态连接字符串
- Nginx+Memcached+Tomcat session会话共享实战
- nginx配置ssl加密(单双向认证、部分https)
- IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法
- Nginx虚拟主机(包括ssl加密主机)
- Nginx+tomcat session cluster会话保持实验 推荐
- sails.js + nginx + https加密 + 反向代理
- 用Nginx配置https加密站点
- Nginx下配置自己的SSL加密网站
- redis缓存服务器(Nginx+Tomcat+redis+MySQL实现session会话共享) 推荐
- hi-nginx通过redis管理会话。
- nginx配置ssl加密(单双向认证、部分https)