Nginx简介
是一个高性能的 HTTP 和 反向代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特性是:1.模块化设计,较好的扩展性(不支持动态装卸载机制) ;2.较好的高可靠性3.低内存消耗(一个线程响应多个请求) 4.支持热部署(不停机二更新配置文件、日志文件的滚动、也包括升级程序版本) 5.支持时间驱动机制、异步IO(AIO)、内存映射机制(mmap)。 Nginx具有独特的工作模式,它基于非阻塞、事件驱动机制由一个master进程生成多个worker线程,每个worker响应n个请求,基于这种模式,nginx的并发能力在国内外享有很高的评价,特别是响应静态资源的能力尤其突出,是一款强大的HTTP和反向代理服务器。
实验准备:
yum源:epel源 源码包:nginx-1.6.2.tar.gz 本机IP:192.168.3.136
实验步骤:
一、nginx的编译安装
安装开发环境和pcre-devel包,以及添加nginx组和nginx用户
1
2
3
4
| #yum groupinstall "Development Tools""Server Platform Development" –y
# yum install pcre-devel –y
# groupadd -r nginx
# useradd -r -g nginx nginx
|
1. 解压nginx安装包至本地目录,然后执行编译、安装
1
2
3
4
5
| # tar -xf nginx-1.6.2.tar.gz
#cd nginx-1.6.2
#./configure --prefix=/usr/local/nginx--conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log--pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock--with-http_ssl_module --with-http_stub_status_module--with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module--http-client-body-temp-path=/var/tmp/nginx/client--http-proxy-temp-path=/var/tmp/nginx/proxy--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
#make && make install
#mkdir -pv/var/tmp/nginx/{client,proxy,fastcgi,uwsgi}
|
2. 启动nginx,并确保80端口已经监听
1
2
3
4
| # ss -tnl | grep 80 保证80端口此时没被监听
# /usr/local/nginx/sbin/nginx
#ss -tnl | grep 80
LISTEN 0 128 *:80 *:*
|
到此nginx的编译安装就已经成功完成了,在浏览器中输入:192.168.3.136,进行测试访问,就出现nginx的的欢迎页面。
二、基于端口的虚拟主机的配置
1. 在上面的基础上,编辑配置文件,添加虚拟主机sever{}
1
2
3
4
5
6
7
| #vim /etc/nginx/nginx.conf
……在最http{}里面添加如下内容….
server{ #定义一个虚拟主机
listen 8080; #指明监听的端口为8080
server_name www.vega.ict; #指明服务器的名字
root "/vhosts/web1/"; #指明主页面文档的根目录
}
|
2. 创建虚拟主机页面目录,并准备主页面文件
1
2
3
4
5
| # mkdir /vhosts/web1 –pv
# cd /vhosts/web1/
# vim index.html
…..添加如下内容…..
<h1>page web1(nginx)</h1>
|
3.重新载入配置文件 1
| # /usr/local/nginx/sbin/nginx -s reload
|
到此我们基于端口的虚拟主机就配置完成了,下面在浏览器进行访问测试,输入192.168.3.136:8080,观察显示结果
三、基于用户请求做访问控制的配置
1. 编辑配置文件/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #vim /etc/nginx/nginx.conf
….将上面server{}段的内容改为如下…..
server {
listen 8080; #监听8080端口
server_name www.vega.ict; #定义主机名
#凡是用户的URL带/的就定向至本地文件系统路径:/vhosts/web1/中
location / {
root "/vhosts/web1/";
}
#凡是用户的URL以.txt结尾的就定向至本地文件系统路径:/vhosts/text/中
location ~* \.txt$ {
root "/vhosts/text/";
}
}
|
2. 提供测试页面目录及页面主目录文件
1
2
3
4
5
6
7
| #mkdir /vhosts/text
#vim/vhosts/web1/a.txt
….添加如下内容,….
It is /vhosts/web1/a.txt
#vim/vhosts/text/a.txt
….添加如下内容,….
It is /vhosts/text/a.txt
|
3. 重新载入配置文件,并进行相应测试
1
| #/usr/local/nginx/sbin/nginx -s reload
|
在浏览器中测试访问,分别输入:http://192.168.3.136:8080/a.txt,之所以是访问的/vhosts/text/a.txt是因为~*location的优先级高于不带任何符号的location,所以就被定向至/vhosts/text/a.txt而非/vhosts/web1/a.txt.
四、基于IP的访问控制的配置(以状态页面为例)
1.编辑配置文件,添加location /status {}段:
1
2
3
4
5
6
| #vim /etc/nginx/nginx.conf
…..在上述定义server{}段中添加如下内容….
location /status { #定义状态页的URL为/status
stub_status on; #开启状态页
allow 192.168.3.0/24; #允许192.168.3.0网段的主机访问
deny all; #其他网段的主机禁止访问
|
}
2.测试语法是否有误,然重新载入配置文件,最后执行访问测试即可
1
2
| # /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload
|
基于IP的控制就配置完成了,下面对其进行测试访问,在浏览器中输入:http://192.168.3.136:8080/status,观察访问结果!!
五、基于用户的访问控制的配置
1.编辑配置文件/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
| #vim /etc/nginx/nginx.conf
………在location{}段中,添加蓝色2行即可……
location /status {
stub_status on;
allow 192.168.3.0/24;
deny all;
auth_basic "Only for VIP";
auth_basic_user_file/etc/nginx/users/.htpasswd;
}
|
2.在/etc/nginx目录创建认证用户目录users,并用命令htpasswd为用户tom创建认证文件.htpasswd(最好用隐藏文件,如.htpasswd)
1
2
3
4
| # mkdir /etc/nginx/users
# yum install httpd –y
#htpasswd -c -m /etc/nginx/users/.htpasswd tom
….输入密码123即可
|
3.确保没有语法错误,并重新载入配置文件
1
2
| #/usr/local/nginx/sbin/nginx -t
#/usr/local/nginx/sbin/nginx -s reload
|
到此我们基于用户的访问控制配置就完成了,下面对已经完成的配置进行访问测试,在浏览器中输入:http://192.168.3.136:8080/status,然后输入用户名tom和密码:123,认证通过即可访问nginx web服务器的状态页面了
|