阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

详解Nginx的功能策略配置

235次阅读
没有评论

共计 4406 个字符,预计需要花费 12 分钟才能阅读完成。

负载均衡(做分发服器)
1、基于浏览器的分发
基于浏览器的分发,按照在不同平台的浏览器请求进行分发,比如手机浏览器讲究资源小速度快节省流量,所以将自手机浏览器的请求分发到专供处理移动平台的 web 服务器上,而在 PC 上浏览网页注重体验,所以将来自 IE 浏览器的请求分发到专供处理 PC 平台的服务器上,这样可以使在不同平台的用户都能得到适合自己的体验!
添加多个 upstream
vim /usr/local/nginx/conf/nginx.con

upstream    web {
ip_hash;
server 192.168.1.10
}
upstream    apache {
ip_hash;
server 192.168.1.11
}

在定义 server 的时进行 location 规则判断

server{
listen        80;
server_name  192.168.1.100;  (分发主机)
location/ {
if($http_user_agent ~* Elinks) {
proxy_pass http://web; #来自 Elinks 浏览器的请求, 交给 web 来处理             
}
if($http_user_agent ~* Mozilla) {
proxy_pass http://apache;
# 来自 Mozilla 类型的浏览器的请求,交给 apache 处理,IE 和火狐都属于 Mozilla
}   
}
}

2、基于开发语言的分发
这里开发语言环境的部署,祥看我这篇文章“http://cuimk.blog.51cto.com/6649029/1335770”
常见开发语言的后缀 aspaspx php jsp html,为了将不同语言开发的程序交给特定的语言环境来执行,同样可以实现 Nginx 的 location 规则来实现
同样定义 server 时进行 location 规则判断
location~* \.php$ {
proxy_pass http://192.168.1.250; #访问 php 结尾的,分发到 250
}                     
location ~* \.jsp$ {
proxy_pass http://192.168.1.251;  #访问 jsp 结尾的,分发到 251
}
location / {
root html
index index.html;    #访问其他的,请求本机
}

3、基于源地址的分发
像联通移动的网站,进去之后可以看到,你所进入的页面是你所在城市的页面,里面的信息很多是你当地退出的一些活动,这就是他们根绝你的 IP 地址来得知你当前所在位置,然后将请求分发到对应的服务器所实现的。
首先 Nginx 需要 geoip 模块,故编译添加
1 ./configure–with-http_geoip_module

首先定义多个 upstream

upstream bj.server{
ip_hash;
server 192.168.1.251  #定义 bj 的 IP 访问的服务器
}
upstream sh.server {
ip_hash;
server192.168.1.251  #定义 sh 的 IP 访问的服务器
}
upstream default.server {
ip_hash;
server 192.168.1.100  #定义其他地区访问的服务器
}

定义一个 IP 库

geo$geo {
default default;
192.168.18.0/24bj;
192.168.17.0/24sh;  #定义 bj 和 sh 的 IP 段
}

在 server 里添加 loscation 规则

123 location/ {
proxy_pass http://$geo.server$request_uri
}

这样会对不同的 IP 匹配 IP 库,看其属于哪个地区,然后在有针对性的将请求分发

4、基本 IP 轮询分发
配置十分简单,以两台 RS 做实验
将 RS 定义在一个 upstream 内

vim /usr/local/nginx/conf/nginx.conf

upstream web {
ip_hash;
server      192.168.18.250; 
server      192.168.18.251;  #两台 RS
}

在定义 server 的时候来指定其访问的模块,有多台机器的会默认轮询访问,当然可以自定义访问权重。

server {
listen        80;          #监听 80 端口
server_name  localhost;    #域名
location/ {
proxy_pass http://web;      #协议,模块名
}
}

我在定义 upstream 的时候都添加了一句“ip_hash;”这里是算法,使用 ip 哈希的算法,让来自同一台的清楚只交给后端同一台 RS 来处理.
配置限速
限速也是通过 location 规则实现的

首先需要在 http 里指定最大带宽(比如说是 10M)

limit_zoneone $binary_remote_addr    10M;

然后在 server 添加 location 规则

location/ {
root              html;
index              index.html index.htm;
limit_rate        10k;        #限速多少
limit_rate_after  100k;      #下载多少的时候开始限速
limit_connone 2;              #同一 IP 同时只能下载两个
}

防盗链配置

防盗链原理也是通过 location 规则实现的
1、指定文件的防盗链

location~*.(gif|jpg|png|swf|flv)$  {#针对哪些文件格式进行防盗链                               
root/usr/local/nginx/html;
valid_referersnone blocked baidu.com;  #只允许 baidu 连接
if($invalid_referer) {
 rewrite ^/ http://www.linuxidc.com/retrun.html; #盗链访问重定向到的地址
 #return 403;
}
}

第一行:gif|jpg|png|swf|flv
表示对 gif、jpg、png、swf、flv 后缀的文件实行防盗链
第二行:表示对 www.88181.com 这 2 个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到 http://www.linuxidc.com/retrun.html 页面,当然直接返回 403 也是可以的。
 

2、针对目录防止盗链

12345 location /images/{
alias/data/images/;
valid_referers none blocked server_names *.xok.la xok.la ;
if($invalid_referer) {return403;}
}

 

3. 通过 ngx_http_accesskey_module 模块实现防盗链,比较少用
实现方法如下:
1. 下载 NginxHttpAccessKeyModule 模块文件:Nginx-accesskey-2.0.3.tar.gz;
2. 解压此文件后,找到 nginx-accesskey-2.0.3 下的 config 文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
3. 用一下参数重新编译 nginx:
./configure –add-module=path/to/nginx-accesskey
4. 修改 nginx 的 conf 文件,添加以下几行:
location /download {
 accesskey            on;
 accesskey_hashmethod  md5;
 accesskey_arg        “key”;
 accesskey_signature  “mypass$remote_addr”;
}
其中:
accesskey 为模块开关;
accesskey_hashmethod 为加密方式 MD5 或者 SHA-1;
accesskey_arg 为 url 中的关键字参数;
accesskey_signature 为加密值,此处为 mypass 和访问 IP 构成的字符串。

访问测试脚本 download.php:
<?
$ipkey= md5(“mypass”.$_SERVER[‘REMOTE_ADDR’]);
$output_add_key=”<a href=http://www.linuxidc.com/download/G3200507120520LM.rar?key=”.$ipkey.”>download_add_key</a><br />”;
$output_org_url=”<a href=http://www.linuxidc.com/download/G3200507120520LM.rar>download_org_path</a><br />”;
echo $output_add_key;
echo $output_org_url;
?>
访问第一个 download_add_key 链接可以正常下载,第二个链接 download_org_path 会返回 403 Forbidden 错误。

他的运行方式是:如我的 download 目录下有一个 file.zip 的文件。对应的 URI 是 http://www.linuxidc.com/download/file.zip
使用 ngx_http_accesskey_module 模块后 http://www.linuxidc.com/download/file.zip?key=09093abeac094. 只有给定的 key 值正确了,才能够下载 download 目录下的 file.zip。而且 key 值是根据用户的 IP 有关的,这样就可以避免被盗链了。

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

相关阅读

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4406字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中