目录
1.Nginx服务基础
1.1Nginx介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
Nginx服务特点:
-
更快:单次请求响应更快,高并发可以更快的处理响应
-
高拓展性:设计极具扩展性,由多个不同功能、不同层次、不同类型且耦合度极低的模块组成
-
高可靠性:很多高流量网站都在核心服务器上大规模使用 Nginx
-
低内存消耗:一般1万个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗2.5MB内存
-
高并发:单机支持10万以上的并发连接
-
热部署:master 管理进程与 worker工作进程的分离设计,使得 Nginx 能够支持热部署
-
开源协议:使用 BSD 许可协议,免费使用,且可修改源码
1.2 Apache和Nginx的优缺点
Apache的优缺点
优点:重写能力强大;模块多,支持较多功能;bug少运行稳定
缺点:配置复杂,支持并发数小
Nginx的优缺点
优点:轻量级,占资源少;高并发,异步非阻塞处理请求
缺点:模块少;动态网页处理能力差;bug较多
2.Nginx安装过程
安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
创建nginx用户
useradd -M -s /sbin/nologin nginx
解压软件包并安装
tar -zxf nginx-1.12.0.tar.gz
#切换至解压后的文件夹编译
./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
make && make install
安装完成之后启动nginx服务
nginx -t #检查nginx配置文件是否有误
nginx #开启nginx服务
netstat -natp | grep 80 #查看80端口启动情况
停止Nginx服务
停止服务需要获取服务的端口号,配合kill命令来停止
3.使用脚本控制Nginx
在/etc/init.d目录下创建,Nginx控制脚本
#!/bin/bash
#chkconfig: 35 99 20
#desc:this is nginx control scplit
cmd="/usr/local/nginx/sbin/nginx"
pid="/usr/local/nginx/logs/nginx.pid"
case
start)
$cmd
;;
stop)
kill -3 `cat $pid`
;;
restart)
$0 stop
$0 start
;;
reload)
kill -1 `cat $pid`
;;
*)
echo "please input,start,reload,restart "
exit 0
;;
esac
exit 1
脚本完成后将nginx加入到chkconfig中,并使用service来控制nginx
chkconfig --add nginx #加入到chkconfig中
service nginx start #启动nginx服务
配置完成
4.Nginx的配置文件
4.1 全局模块
全局配置,对全局生效
#user nobody; #运行用户,若编译时未指定则默认为
nobody worker processes 1; #工作进程数量,一般设置为和CPU核数一样
#error log logs/error.log; #错误日志文件的位置
#pid 10gs/nginx.pid; #PID文件的位置
4.2 events模块
I/O事件配置,影响Nginx服务器与用户的网络连接
worker_connections 1024 #单个进程处理的最大连接数
如提高每个进程的连接数还需执行“ulimit-n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台上,在进行高并发TCp连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit-a命令查看系统允许当前用户进程打开的文件数限制。
epol1是Linux内核为处理大批句柄而作改进的po11,是Linux下多路复用Io接口select/po11的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
4.3 http模块
配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置
http {
include mime.types; ##文件扩展名与文件类型映射表
default_type application/octet-stream; ##默认文件类型
##日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; #日志格式设定
sendfile on; ##支持文件发送(下载)
##此选项允许或禁止使用socket的TCP cORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp_nopush on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on; ##gzip模块设置,设置是否开启gzip压缩输出
server {
listen 80; ##监听地址及端口
server_name www.example.com; ##站点域名,可以有多个,用空格隔开
#charset utf-8; #网页的默认字符集
#access_log logs/host.access.log main;
location / { ##根目录配置
root html; ##网站根目录的位置/usr/local/nginx/html
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;
}
日志格式设定:
$remote_addr与shttp_x_forwarded_for用以记录客户端的ip地址;Sremoteuser:用来记录客户端用卢名称:
Stime 1ocal:用来记录访问时间与时区;
$time_local:
$request:用来记录请求的url与http协议;
$status:用来记录请求状态;成功是200,sbody bytes sent:记录发送给客户端文件主体内容大小;shttpreferer:用来记录从哪个页面链接访问过来的;shttp_user_agent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过sremoteadd拿到的Ip地址是反向代理服务器的ip地址。反向代理服务器在转发请求的http头信息中,可以增加xforwarded for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
4.4 server模块
配置虚拟主机的相关参数,一个http块中可以有多个server块
4.5 location模块
用于配置匹配的uri
location常见配置指令,root、alias、proxy pass
root(根路径配置):root/var/www/html请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias/var/www/html请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
5.访问控制
在配置文件的event模块中,加入一条命令;server模块中加入一段location模块
Active connections: 1 #激活的连接数
server accepts handled requests #已经处理的连接信息
2 2 4 #已处理的连接数、成功的TCP握手次数、已处理的请求数
Reading: 0 Writing: 1 Waiting: 1