这篇博客是在lnmp的环境下进行实验,关于lnmp环境的搭建,可以参考我的这篇博客LNMP服务部署
NGINX模块和正向代理
简介
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
对虚拟主机配置文件的分析
server
{
listen 80;//指定虚拟主机的服务端口
#listen [::]:80;
server_name test.com ;//指定IP地址或者域名,多个域名之间用空格分开
index index.html index.htm index.php default.html default.htm default.php;//设定访问的默认首页地址
root /home/wwwroot/test.com;//指定虚拟主机的网页根目录
include rewrite/none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
# 基于IP的访问控制
# location /{
# # 拒绝192.168.47.1访问
# deny 192.168.47.1;
# # 允许所有的访问
# allow all;
# }
# 基于用户的访问控制
# location /{
# # 如果认证没有通过则关闭网站
# auth_basic "closed site";
# # 用于认证的用户名密码文件的位置
# auth_basic_user_file /usr/local/nginx/conf/htpasswd;
# }
# 正向代理
location /try/{
proxy_pass http://www.baidu.com/;
}
# 以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理
# 而expires用来指定静态文件的过期时间,这里是30天。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
# 所有扩展名以js、css结尾的静态文件都交给nginx处理
# 而expires用来指定静态文件的过期时间,这里是12小时。
location ~ .*\.(js|css)?$
{
expires 12h;
}
# 除符合正则表达式[/.well-known]之外的URL,全部拒绝访问
location ~ /.well-known {
allow all;
}
# 满足正则表达式[/\.]的URL,全部拒绝访问
location ~ /\.
{
deny all;
}
access_log off;//指定虚拟主机的访问日志存放路径,这里是关闭的
}
URL地址匹配是进行Nginx配置中最灵活的部分。location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。
一些正则表达式规则
- ~ 区分大小写匹配
- ~* 不区分大小写匹配
- ^ 以什么开头的匹配
- $ 以什么结尾的匹配
- 转义字符。可以转. * ?等
基于ip访问的控制
在虚拟主机配置文件中加入下列语句,虚拟主机配置文件位置为
/usr/local/nginx/conf/vhost/test.com.conf
location /{
# 拒绝192.168.47.1访问
deny 192.168.47.1;
# 允许所有的访问
allow all;
}
然后重启nginx服务
nginx -s reload
或重启整个lnmp服务
lnmp restart
再访问test.com出现403即为成功
基于用户的访问控制
在虚拟主机的配置文件中加入下列语句
location /{
# 如果认证没有通过则关闭网站
auth_basic "closed site";
# 用于认证的用户名密码文件的位置
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
接着安装工具
yum -y install httpd-tools
yum provides htpasswd
- 因为接下来需要用到一个命令行工具htpasswd(用来生成访问密码)。此命令是httpd-tools包的一部分,所以要先安装这个工具包
- yum provides反查询文件在什么包中
然后就可以用命令添加用户名和密码到文件中,可以顺便修改一下文件的权限
htpasswd -bc /usr/local/nginx/conf/htpasswd admin 123456
chmod 600 htpasswd
打开这个用户名密码文件可以发现这个密码是被加密过的
接着重启nginx服务,然后去访问该网站就会出现输入用户名和密码的界面
正向代理
在虚拟主机的配置文件中加入下列语句
location /{
proxy_pass http://www.baidu.com;
}
这时候重启nginx服务再去访问test.com就会跳转到百度的页面,并且点浏览器的返回也会不到test.com
接着可以更进一步,修改配置文件为
location /try/{
proxy_pass http://www.baidu.com/;
}
记着这个时候需要去网站目录下新建一个try文件,不然访问时会出错
然后重启nginx服务并去访问test.com会发现就是原页面
这时访问test.com/try/
会发现访问了百度,接着可以仿造百度搜索时的情况在后面加参数,比如
证明我们正向代理配置成功
NGINX简单负载均衡实现
简介
- 负载均衡:分摊到多个操作单元上进行执行。就是我们需要一个调度者,调整各个服务器的负载,从而保持服务器集群的整体性能最优,这就是负载均衡。
- 负载均衡有很多算法,比如原地址哈希法、轮询法、随机法等,这里不讨论他们的算法原理,只采用加权轮询法来实现简单的负载均衡
- 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,按照权值的不同分配负载。比如ABC三个服务器的权值分别是1、2、5,那么分配会按照10%、20%、50%的权重将负载分配给他们。
- 负载均衡分为四层和七层,其区别在于,四层交换在osi第四层工作,这种负载均衡器不理解应用协议。七层交换在osi最高层工作,这种负载均衡器可以理解应用协议。
- 因为环境原因,只能实现负载均衡,无法体现出负载均衡的效果,并且由于我自己理解的也不是很深入,所以并没有进行深入的解释,只是给出了一个实现的方法。
nginx七层负载均衡
这里需要对nginx虚拟主机的配置文件进行修改,虚拟主机配置文件的路径是
/usr/local/nginx/conf/vhost/test.com.conf
,修改的内容如下
# 因为没有这么多机器,所以以下只是举例,没法测试
upstream upload_blancer{
server 192.168.47.144 weight=5;//weight表示权重的值
server 192.168.47.150 weight=5;
server 192.168.47.148 down;//down表示该server临时不参与负载均衡
server 192.168.47.149 backup;//当其他的机器down或者忙的时候,请求backup机器
}
# 配置完负载均衡一定要在这里做代理
location /{
proxy_pass http://upload_blancer;
}
- nginx的upstream模块提供数据转发功能,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发。
- 数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。
- 使用upstream模块定义集群名称和节点地址,定义在server字段之外httpd字段之内
nginx四层负载均衡
这里需要对nginx的配置文件进行修改,nginx配置文件的位置是
/usr/local/nginx/conf/nginx.conf
修改的内如下
stream{
# 利用upstream模块配置数据转发
upstream sshers{
server 192.168.47.144:22;
server 192.168.47.137:22;
}
server{
listen 192.168.47.144:9000;//设置监听端口
proxy sshers;//设置代理
}
}
nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等