The server of Nginx(二)——Nginx基本功能配置
一、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
三、平滑升级
在安装完nginx1.6以后,在不停用服务的情况下,升级到1.8(注意不要跨版本升级),如果直接安装的话,会端口冲突,修改端口的话,客户端还不认,首先我们分析其实升级nginx就是把sbin下的nginx主程序文件给替换下就可以了,其他文件不需要动,那么我们知道,nginx运行时候会有两个进程在运行,我们要实现1.8版本和1.6版本同时运行,也就是有4个进程同时运行,然后再把旧进程kill掉,在掌握这个大方向后,让我们来看一下具体操作。
1 ~]#ps -aux | grep nginx # 可以查看到master主进程和worker进程 2 ~]#tar zxvf nginx-1.8 -C /usr/src/ 3 ~]#cd /usr/src/nginx-1.8/ 4 ~]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make #注意这里只编译拿到新的主程序文件nginx即可,不能安装 5 ~]#mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old #把1.6版本的主程序文件修改为别的名字,这时原程序在内存中跑,不影响使用 6 ~]#cp /usr/src/nginx-1.8/objs/nginx /usr/local/nginx/sbin #把1.8的主程序文件拷贝到1.6版本文件夹中,注意主配置文件nginx.conf可以更换也可以不换 7 ~]#kill -USR2 `cat /usr/local/nginx/logs/nginx.pid #通过这个语句就产生了一个新的nginx.pid文件,以前的pid文件名字会被修改成nginx.pid.oldbin. 8 ~]#ps -aux | grep nginx #这个时候我们可以看到有4个关于nginx的进程 9 ~]#kill -s QUIT 原来nginx的进程号 #结束原1.6版本的nginx进程
四、Nginx反向代理
注意反向代理当客户端访问我们的网站时,输入的是代理服务器IP或域名,这里就是Nginx的公共IP
配置方法:nginx.conf文件中每个server段就是一个主机或虚拟主机,在一个server段中的location / 中把网站家目录(root html)和首页(index index.html)注释掉,添加
proxy_pass http://实际处理请求的服务器IP;