一、Nginx访问控制
(1)基于授权的访问控制
Nginx于Apache一样,可以实现基于用户授权的访问控制,当客户端要访问相应网站或者目录时要求输入用户名密码才能正常访问,配置步骤与Apache基本一致
第一步:生成用户密码认证文件,使用htpasswd生成用户认证文件,如果没有该命令,可使用yum安装httpd-tools软件包,用法与之前讲解Apache认证时一样
~]#htpasswd -c /usr/local/nginx/passwd.db test #回车后会让输入两次密码
修改密码文件的权限为400,将所有者改为nginx,使nginx的运行用户能够读取
~]#chmod 400 /usr/local/nginx/passwd.db ~]#chown nginx /usr/local/nginx/passwd.db
第二步:修改主配置文件对应目录,添加认证配置项auth项,检查语法,重启
1 server { ... 2 local / { 3 root html; 4 index index.html index.php; 5 auth_basic "secret"; 6 auth_basic_user_file /usr/local/nginx/passwd.db; 7 ~]#nginx -t 8 ~]#service nginx reload
(2)基于客户端的访问控制
Nginx基于客户端的访问控制要比Apache简单,规则从上往下匹配,如匹配则停止,不再往下匹配
格式:
deny ip/ip段
allow ip/ip段
例:除了10.1.1.0网段,192.168.1.0网段,剩余所有ip还有192.168.1.1都不能登录
1 location / { 2 root html; 3 index index.html index.php; 4 deny 192.168.1.1; 5 allow 192.168.1.0/24; 6 allow 10.1.1.0/16; 7 deny all; 8 }
二、Nginx虚拟主机
可以在一台服务器上,创建多个网站,每个虚拟Web站点都有独立的"server{}"配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的
Nginx支持的虚拟主机有三种:基于域名、基于IP、基于端口
(1)基于域名的虚拟主机搭建(最常用90%以上都用这种)
①为www.bt.com 和 www.test.com准备域名解析,可修改hosts文件
②准备各网站的网站目录及测试首页
~]#mkdir -p /var/www/html/btcom testcom
③在两个文件夹里创建index.html
④修改nginx.conf,配置两个 "server{}"区域(注意红色字体是我们要注意的)
1 server { 2 listen 80; 3 server_name www.test.com; 4 charset utf-8; 5 access_log logs/www.test.log main; 6 location / { 7 root /var/www/html/testcom; 8 index index.html index.htm; 9 } 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 root html; 13 } 14 }
⑤以域名访问两个网站
(2)基于IP的虚拟主机搭建(IP太贵了,不常用)
①准备多个IP地址,可使用子接口或者多网卡
例如:ifconfig eth0:0 192.168.1.2/24 设置子接口网址
②准备各网站的目录及测试首页
③修改nginx.conf,配置两个 "server{}"区域(注意红色字体是我们要注意的,注意对比区别)
1 server { 2 listen 192.168.1.2:80; 3 server_name 192.168.1.2; 4 charset utf-8; 5 access_log logs/www.test.log main; 6 location / { 7 root /var/www/html/testcom; 8 index index.html index.htm; 9 } 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 root html; 13 } 14 }
④以IP地址访问两个网站
(3)基于端口的虚拟主机搭建(公司内部测试使用较多)
①选择端口,选择系统中不用的端口
②准备各网站的目录及测试首页
③视情况准备域名解析,根据配置文件里判断是否要解析
④修改nginx.conf,配置两个 "server{}"区域(注意红色字体是我们要注意的,注意对比区别)
1 server { 2 listen 192.168.1.2:81; #注意:第二个server端口改为81,前面需要用域名登录就把前面的ip地址改为域名 3 server_name 192.168.1.2; #注意:根据需要改为域名 4 charset utf-8; 5 access_log logs/www.test.log main; 6 location / { 7 root /var/www/html/testcom; 8 index index.html index.htm; 9 } 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 root html; 13 } 14 }
⑤以IP地址或者域名访问两个网站,注意输入ip时,后面跟端口号http://192.168.1.2;81