nginx会话保持与防盗链
nginx 会话保持
nginx会话保持主要有以下几种实现方式 。
1、ip_haship_hash使用源地址哈希算法 , 将同一客户端的请求总是发往同一个后端服务器 , 除非该服务器不可用 。
ip_hash语法:
upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com down;}
ip_hash简单易用 , 但有如下问题: 当后端服务器宕机后 , session会丢失; 来自同一局域网的客户端会被转发到同一个后端服务器 , 可能导致负载失衡;
2、sticky_cookie_insert使用sticky_cookie_insert , 这会让来自同一客户端的请求被传递到一组服务器的同一台服务器 。 与ip_hash不同之处在于 , 它不是基于IP来判断客户端的 , 而是基于cookie来判断 。 (需要引入第三方模块才能实现)
sticky模块
语法:
upstream backend {server backend1.example.com;server backend2.example.com;sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/;}
说明: expires:设置浏览器中保持cookie的时间 domain:定义cookie的域 path:为cookie定义路径
4、使用后端服务器自身通过相关机制保持session同步 , 如:使用数据库、redis、memcached 等做session复制
10、nginx 实现动静分离为了加快网站的解析速度 , 可以把动态页面和静态页面由不同的服务器来解析 , 加快解析速度 。 降低原来单个服务器的压力 。简单来说 , 就是使用正则表达式匹配过滤 , 然后交个不同的服务器 。
1、准备环境
准备一个nginx代理 两个http 分别处理动态和静态 。
1.配置nginx反向代理upstream;upstream static {server 10.0.105.196:80 weight=1 max_fails=1 fail_timeout=60s;}upstream php {server 10.0.105.200:80 weight=1 max_fails=1 fail_timeout=60s;}server {listen80;server_namelocalhost#动态资源加载location ~ \.(php|jsp)$ {proxy_pass http://phpserver;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#静态资源加载location ~ .*\.(html|jpg|png|css|js)$ {proxy_pass http://static;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}静态资源配置server {listen 80;server_namelocalhost;location ~ \.(html|jpg|png|js|css) {root /home/www/nginx;}}动态资源配置:yum 安装php7.1[root@nginx-server ~]#rpm -Uvh [root@nginx-server ~]#rpm -Uvh [root@nginx-server ~]#yum install php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-mcrypt -y[root@nginx-server ~]#yum install -y php71w-fpm[root@nginx-server ~]#systemctl start php-fpm[root@nginx-server ~]#systemctl enable php-fpm编辑nginx的配置文件:server {listen80;server_namelocalhost;location ~ \.php$ {root/home/nginx/html;#指定网站目录fastcgi_pass127.0.0.1:9000;#指定访问地址fastcgi_indexindex.php;#指定默认文件fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; #站点根目录 , 取决于root配置项includefastcgi_params;#包含nginx常量定义}}
当访问静态页面的时候location 匹配到 (html|jpg|png|js|css) 通过转发到静态服务器 , 静态服务通过location的正则匹配来处理请求 。
当访问动态页面时location匹配到 .\php 结尾的文件转发到后端php服务处理请求 。
【nginx会话保持与防盗链】11、nginx 防盗链问题
两个网站 A 和 B ,B网站引用了A网站上的图片 , 这种行为就叫做盗链 。防盗链 , 就是要防止B引用A的图片 。
1、nginx 防止网站资源被盗用模块
ngx_http_referer_module
如何区分哪些是不正常的用户?
HTTP Referer是Header的一部分 , 当浏览器向Web服务器发送请求的时候 , 一般会带上Referer ,
告诉服务器我是从哪个页面链接过来的 , 服务器借此可以获得一些信息用于处理 , 例如防止未经允许
的网站盗链图片、文件等 。 因此HTTP Referer头信息是可以通过程序来伪装生成的 , 所以通过Referer
信息防盗链并非100%可靠 , 但是 , 它能够限制大部分的盗链情况.
2. 防盗链配置配置要点:
[root@nginx-server ~]# vim /etc/nginx/nginx.conf# 日志格式添加"$http_referer"log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# valid_referers 使用方式Syntax:valid_referers none | blocked | server_names | string ...;Default:—Context: server, location
- none : 允许没有http_refer的请求访问资源;
- blocked : 允许不是http://开头的 , 不带协议的请求访问资源---被防火墙过滤掉的;
- server_names : 只允许指定ip/域名来的请求访问资源(白名单);准备两台机器,一张图片图片网站服务器:上传图片192.168.1.9[root@nginx-server ~]# cp test.jpg /usr/share/nginx/html/[root@nginx-server ~]# cd /etc/nginx/conf.d/[root@nginx-server conf.d]# cp default.conf default.conf.bak[root@nginx-server conf.d]# mv default.conf nginx.conf[root@nginx-server conf.d]# vim nginx.confserver {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}}[root@nginx-server conf.d]# nginx -t[root@nginx-server conf.d]# systemctl restart nginx访问:
- linux配置nginx定时日志分割
- 终端|中兴手机回归国内2C市场,保持中兴、努比亚、红魔三个品牌
- 5G华为取得胜利!6G又传来两大消息,我国还能保持领先吗?
- 使用nginx反向代理github
- 头文件|阿里面试题 | Nginx 所使用的 epoll 模型是什么?
- Vue实战091:Vue项目部署到nginx服务器
- 保持领先个性化营销 人工智能如何改变客户服务业
- 直播平台|直播软件开发平台功能需要不断优化更新,保持新鲜感
- 了解情绪划分:如何使用机器学习来保持积极心态?
- 芯片|IC涨价大盘点,多家芯片厂商明年Q1保持续涨趋势