文章目录
Nginx概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
它是一款高性能、轻量级web服务软件,有以下特点:
- 稳定性高
- 系统资源消耗少
- 对HTTP并发连接的处理能力高
- 单台物理服务器可支持30000~50000个并发请求
安装Nginx
准备安装包
[root@localhost ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel #安装支持软件
[root@localhost opt]# useradd -M -s /sbin/nologin nginx #创建运行的用户
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz #编译安装
[root@localhost opt]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_ status_ module #开启stub_status状态统计模块
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin #nginx命令执行路径优化
使用service工具进行管理
[root@localhost ~]# cd /etc/inid.d
[root@localhost init.d]# vim nginx #添加配置
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
[root@localhost init.d]# chmod +x nginx #增加权限
[root@localhost init.d]# chkconfig --add nginx
[root@localhost init.d]# chkconfig --level 35 nginx on
开启服务,关闭防火墙,就访问nginx网址
[root@localhost opt]# setenforce 0
[root@localhost opt]# iptables -F
[root@localhost opt]# service nginx start
增加状态统计
对Nginx配置文件进行修改
[root@localhost opt]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.aaa.com; #修改域名
charset utf-8;
#access_log logs/host.access.log;
location /status { #增加此内容
stub_status on; #开启状态统计
access_log off; #关闭访问日志
}
访问控制
基于授权进行访问控制
需要用到htpasswd工具,安装此项工具
[root@localhost ~]# yum install -y httpd-tools
生成用户密码文件
[root@localhost init.d]# htpasswd -c /usr/local/nginx/passwd.db pan
New password:
Re-type new password:
Adding password for user pan
[root@localhost init.d]# ll /usr/local/nginx/passwd.db
-rw-r--r--. 1 root root 42 8月 10 17:13 /usr/local/nginx/passwd.db
减少权限,提高安全
[root@localhost init.d]# cd /usr/local/nginx/
[root@localhost nginx]# chmod 400 passwd.db
[root@localhost nginx]# chown nginx passwd.db
[root@localhost nginx]# ll passwd.db
-r--------. 1 nginx root 42 8月 10 17:13 passwd.db
修改配置文件
[root@localhost nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.aaa.com;
charset utf-8;
#access_log logs/host.access.log;
location / {
auth_basic "secret"; #在此项中添加权限
auth_basic_user_file /usr/local/nginx/passwd.db; #密码文件位置
root html;
index index.html index.html;
}
[root@localhost nginx]# service nginx stop
[root@localhost nginx]# service nginx start
此时访问网页会要求输入账号密码
基于IP地址进行的访问控制
通过客户端IP地址,决定是否允许对页面访问
配置规则
- deny IP/IP段:拒绝某个IP或IP段的客户端访问
- allow IP/IP段:允许某个IP或IP段的客户端访问
- 规则从上往下执行,如匹配则停止,不再往下匹配
修改主配置文件
除主机192.168.110.10之外允许其他客户端访问
[root@localhost nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.aaa.com;
charset utf-8;
#access_log logs/host.access.log;
location / {
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
deny 192.168.110.10; #禁止此ip地址的主机访问
allow all; #其它全部允许
root html;
index index.html index.html;
}
[root@localhost nginx]# service nginx restart
Nginx支持的虚拟主机
基于域名
在配置文件末尾大括号里单独插入
[root@localhost conf]# vim nginx.conf
server {
listen 80;
server_name www.aaa.com;
location / {
root /var/www/aaa;
index test.html;
}
}
server {
listen 80;
server_name www.bbb.com; #指定域名
location / {
root /var/www/bbb; #指定页面路径
index bbb.html; #指定页面显示文件
}
}
基于端口
server {
listen 192.168.110.10:80;
server_name www.aaa.com:80;
location / {
root /var/www/aaa;
index aaa.html;
}
}
server {
listen 192.168.110.10:8080;
server_name www.bbb.com:8080;
location / {
root /var/www/bbb;
index bbb.html;
}
}
基于IP
需要添加一块网卡配置IP
server {
listen 192.168.110.10:80;
server_name www.aaa.com:80;
location / {
root /var/www/aaa;
index aaa.html;
}
}
server {
listen 192.168.110.6:80;
server_name www.aaa.com:80;
location / {
root /var/www/bbb;
index bbb.html;
}
}