目录
一、nginx的简介
1、nginx的概述
Nginx是一个高性能的HTTP和反向代理服务器
是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件代理服务器
单台物理服务器可支持30000~50000个并发请求
实际上仅支持20000~25000个并发请求
2、nginx和Apache相对的优点
1.nginx相对于apache的优点:
轻量级,同样起web服务,比apache占用更少的内存及资源
抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
2.apache相对于nginx的优点∶
Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
模块多,基本想到的都可以找到
少bug, nginx的bug相对较多
超稳定
二、nginx的搭建及配置
1、安装nginx
(1)查找安装包
[root@www opt]# ls
(2) 安装依赖包
[root@www opt]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make
(3) 创建运行用户 、组
[root@www opt]# useradd -M -s /sbin/nologin nginx
(4) 编译安装Nginx
[root@www opt]# tar zxvf nginx-1.12.2.tar.gz
[root@www opt]# cd nginx-1.12.2/
[root@www nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \ #指定nginx安装路径
> --user=nginx \ #指定用户名
> --group=nginx \ #指定组名
> --with-http_stub_status_module #启用http_stub_status_module模块以支持状态统计
编译并安装
[root@www nginx-1.12.2]# make -j 4 && make install
创建软链接加入$PATH
[root@www nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
(5) 检查、启动、关闭、重启Nginx服务
检查
[root@www nginx-1.12.2]# nginx -t #检查nginx配置文件是否正确
启动服务
[root@www nginx-1.12.2]# nginx #启动nginx服务
[root@www nginx-1.12.2]# netstat -natp | grep nginx #查看服务是否开启
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 126349/nginx: maste
关闭服务
[root@www nginx-1.12.2]# cat /usr/local/nginx/logs/nginx.pid #查看nginx的pid号
126349
[root@www nginx-1.12.2]# kill -3 126349 #根据nginx服务的pid号退出服务
[root@www nginx-1.12.2]# killall -3 nginx #根据服务名杀死服务
2、给nginx添加系统服务
编写配置脚本
[root@www nginx-1.12.2]# vim /etc/init.d/nginx 编写配置脚本
#!/bin/bash
#chkconfig: 35 99 20
#desc: this is nginx control scprit
CMD="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$CMD
;;
stop)
kill -s QUIT `cat $PID`
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP `cat $PID`
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
[root@www conf]# chmod +x nginx #添加执行权限
[root@www conf]# chkconfig -add nginx #添加服务
3、nginx的全局配置
主配置文件
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
全局配置
#user nobody; ##运行用户
worker_processes 1; ##工作进程数,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了
#error_log logs/error.log; ####错误日志文件的位置
#pid logs/nginx.pid; ####PID文件的位置
4、I/O事件配置
events {
use epoll; #使用epoll模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 4096; #每个进程处理 4096个连接
}
epoll(socket描述符)是Linux内核]为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性 能表现。
如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
5、访问状态统计配置
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况,编译安装Nginx时需添加--with-http_stub_status_module来启动模块。
36 server {
37 listen 80;
38 server_name www.zty.com; #配置域名
39
40 #charset utf-8;
location /status{
49 stub_status on; 添加访问控制
50 access_log off;
51 }
6、基于授权密码的访问控制
生成密码控制文件
[root@www ~]# yum install httpd-tools.x86_64 -y
[root@www conf]# htpasswd -c /usr/local/nginx/passwd.db zs
[root@www conf]# chown nginx /usr/local/nginx/passwd.db
[root@www conf]# chmod 400 /usr/local/nginx/passwd.db
[root@www conf]# vim nginx.conf
location /status{
# stub_status on;
# access_log off;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
[root@www conf]# systemctl restart nginx
测试
7、基于客户端的访问控制
基于客户端的访问控制
基于客户端的访问控制简介 基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于 客户端的访问控制要比 Apache 简单
规则如下:
1)deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问
2)allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问
3)规则从上往下执行,如匹配则停止,不再往下匹配
[root@www conf]# vim nginx.conf
deny 192.168.222.1;
allow all;
[root@www conf]# systemctl restart nginx
8、基于域名虚拟主机控制
[root@www var]# cd www
[root@www www]# cd html/
[root@www html]# echo "this is zty web" > dev/index.html
[root@www html]# echo "this is abc web" > abc/index.html
[root@www html]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.dev.com;
charset utf-8;
access_log logs/dev.access.log;
location / {
root /var/www/html/dev;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.abc.com;
charset utf-8;
access_log logs/abc.access.log;
location / {
root /var/www/html/abc;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
客户端进行测试
9、基于ip地址
[root@www html]# vim /usr/local/nginx/conf/nginx.conf #修改主配置文件
listen 192.168.222.100; #修改ip地址
[root@www html]# systemctl restart nginx.service #重启nginx服务
测试
10、基于端口
[root@www html]# vim /usr/local/nginx/conf/nginx.conf #修改主配置文件
listen 192.168.222.100:234; #在IP地址后面添加端口号
[root@www html]# systemctl restart nginx.service #重启nginx服务
测试