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 { listen 80; server_name localhost #动态资源加载 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_name localhost; location ~ \.(html|jpg|png|js|css) { root /home/www/nginx; }}动态资源配置:yum 安装php7.1[root@nginx-server ~]#rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm[root@nginx-server ~]#rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm[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 { listen 80; server_name localhost; location ~ \.php$ { root /home/nginx/html; #指定网站目录 fastcgi_pass 127.0.0.1:9000; #指定访问地址 fastcgi_index index.php; #指定默认文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #站点根目录,取决于root配置项 include fastcgi_params; #包含nginx常量定义 } }
当访问静态页面的时候location 匹配到 (html|jpg|png|js|css) 通过转发到静态做事器,静态做事通过location的正则匹配来处理要求。
当访问动态页面时location匹配到 .\php 结尾的文件转发到后端php做事处理要求。
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_format main '$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访问:
Referer:这个匹配的连接为空 “-”盗链机器配置:192.168.1.10[root@nginx-client ~]# cd /usr/share/nginx/html/[root@nginx-client html]# cp index.html index.html.bak[root@nginx-client html]# vim index.html<html><head><meta charset="utf-8"><title>http://qf.com</title></head><body style="background-color:red;"><img src="http://192.168.1.9/test.jpg"/></body></html>[root@nginx-client html]# systemctl restart nginx
查看做事器日志:
Referer记录了:连接是1.10这台机器。在图片做事器操作[root@nginx-server conf.d]# vim nginx.confserver {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;valid_referers none blocked www.jd.com; #许可这些访问if ($invalid_referer) {return 403;}}}[root@nginx-server conf.d]# systemctl restart nginx测试访问:
图片做事器查看日志:
上面配置并没有许可192.168.1.10这台机器访问。实例二,连续在图片做事器上面操作[root@nginx-server html]# vim /etc/nginx/conf.d/nginx.conf #将原来的删除掉server {listen 80;server_name localhost;location ~ .\.(gif|jpg|png|jpeg)$ {root /usr/share/nginx/html;valid_referers none blocked .http://qf.com 192.168.1.10;if ($invalid_referer) {return 403;}}}重载nginx做事[root@nginx-server ~]# nginx -s reload在个中一台机器测试:测试不带http_refer:[root@nginx-server conf.d]# curl -I "http://192.168.1.9/test.jpg"HTTP/1.1 200 OKServer: nginx/1.16.1Date: Mon, 02 Sep 2019 14:02:56 GMTContent-Type: image/jpegContent-Length: 27961Last-Modified: Mon, 02 Sep 2019 13:23:12 GMTConnection: keep-aliveETag: "5d6d17c0-6d39"Accept-Ranges: bytes测试带造孽http_refer:[root@nginx-server conf.d]# curl -e http://www.baidu.com -I "http://192.168.1.9/test.jpg"HTTP/1.1 403 ForbiddenServer: nginx/1.16.1Date: Mon, 02 Sep 2019 14:03:48 GMTContent-Type: text/htmlContent-Length: 153Connection: keep-alive测试带合法的http_refer:[root@nginx-server conf.d]# curl -e http://www.qf.com -I "http://192.168.1.9/test.jpg"HTTP/1.1 200 OKServer: nginx/1.16.1Date: Mon, 02 Sep 2019 14:04:52 GMTContent-Type: image/jpegContent-Length: 27961Last-Modified: Mon, 02 Sep 2019 13:23:12 GMTConnection: keep-aliveETag: "5d6d17c0-6d39"Accept-Ranges: bytes[root@ansible-server conf.d]# curl -e http://192.168.1.10 -I "http://192.168.1.9/test.jpg"HTTP/1.1 200 OKServer: nginx/1.16.1Date: Mon, 02 Sep 2019 14:05:36 GMTContent-Type: image/jpegContent-Length: 27961Last-Modified: Mon, 02 Sep 2019 13:23:12 GMTConnection: keep-aliveETag: "5d6d17c0-6d39"Accept-Ranges: bytes如果用户直接在浏览器输入你的图片地址,那么图片显斧正常,由于它符合none这个规则。在图片做事器查看日志:
转自:知乎千锋云打算学院