【Nginx01】Ngnix入门
1.版本
- Nginx开源版
- Nginx plus商业版
- Openresty
- Tengine
2.Nginx开源版安装
2.1下载
2.2编译安装
如果本身没有c语言的编译器
命令:
yum install -y gcc
解压Nginx
命令:
tar -zxvf nginx-1.22.1.tar.gz
安装perl库
命令:
yum install -y pcre pcre-devel
安装zlib库
命令:
yum install -y zlib zlib-devel
进入nginx文件夹,用configure脚本来安装
命令:
./configure --prefix=/usr/local/nginx
命令:
make
命令:
make install
查看是否在刚才所述的路径下/usr/local/nginx
2.3启动Nginx
首先进入sbin目录
命令1:
./nginx
(后台启动)
命令2:./nginx -s stop
快速停止
命令3:./nginx -s quit
优雅关闭,在退出前完成已经接受的连接请求
命令4:./nginx -s reload
重新加载配置
关闭防火墙
命令:
systemctl stop firewalld
访问nginx
禁止防火墙开机自启
命令:
systemctl disable firewalld
2.4安装成系统服务,即开机自启
1.创建服务脚本
命令:
vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载系统服务
命令:
systemctl daemon-reload
关闭nginx
命令:
./nginx -s stop
使用脚本启动nginx
命令:
systemctl start nginx
开机启动命令
命令:
systemctl enable nginx
重启
发现服务开机自启成功
3.目录结构与基本原理
3.1目录结构
- conf:核心配置文件
- sbin:nignx主程序
- html:默认情况下的网页
- logs:记录日志
3.2基本运行原理
Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。
3.3Nginx配置文件
先将注释全部删除,后面会讲,先将没注释的
worker_processes 1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个
events {
#单个进程最大连接数(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
worker_connections 1024;
}
http {
#文件扩展名与文件类型映射表(是conf目录下的一个文件)
include mime.types;
#默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
default_type application/octet-stream;
#sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
sendfile on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
#虚拟主机的配置,也可以配置多个主机(监听端口号不能相同)
server {
#监听端口
listen 80;
#域名或主机名,可以有多个,用空格隔开
server_name localhost;
#配置根目录以及默认页面
#http://atguigui.com/xxoo/index.html
location / {
root html;
index index.html index.htm;
}
#出错页面配置
#http://atguigui.com/xxoo/50x.html
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
}
无sendfile
有sendfile