Nginx简介
Nginx优点
高性能、高并发
支持很高的并发,在处理大量并发的情况下,比其他web服务器要高效
轻量且高扩展
功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
代码模块化(易读,便于二次开发,支持第三方模块,对于开发人员非常友好)
高可靠性
只要不过分不会出现问题
宕机时间,99.999%
大部分web服务需要定期重启维护,nginx不需要
支持热部署
运行期间,更新迭代、代码部署
互联网公司都选择 Nginx
Nginx技术成熟, 国内公司基本大规模使用
适合当前主流架构趋势, 微服务、云架构、中间层
统一技术栈, 降低维护成本, 降低技术更新成本。
事件模型:Nginx 采用 Epoll 网络模型, Apache 采用 Select 模型
Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
Epoll: 当用户发起请求,epoll模型会直接进行处理,效率高效,并无连接限制。
Nginx应用场景
Nginx架构原理
1.主管进程负责工作进程的配置加载、启停等操作;
2.工作进程负责处理具体请求;
3.工作进程之间都是独立的,每个工作进程处理多个连接;
4.每个连接由一个工作进程全权处理,不需要进行进程切换,不会产生进程切换引起的资源消耗问题;
5.共享内存允许多个进程访问同一个内存地址,一个进程改变了内存中的内容后,其他进程都可以使用变更后的内容。
Nginx安装
1.Yum安装
1)配置nginx.repo软件源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2)安装
yum install -y nginx3)启动nginx服务
systemctl start nginx
systemctl enable nginx
2.源码包安装
1)基础环境与配置准备
1—1.安装编译需要的插件或依赖包
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
1-2.创建用户和组,且不创建用户的家目录
groupadd nginx -g 888
useradd -u 888 -g 888 -s /sbin/nologin -M nginx2)下载nginx源码包
wget http://nginx.org/download/nginx-1.24.0.tar.gz3)解压
mkdir -p /app
tar xf nginx-1.24.0.tar.gz -C /app/
cd /app/nginx-1.24.04)配置./configure --prefix=/app/nginx-1.24 --user=nginx --group=nginx5)编译编译安装
make && make install6)做软链接,方便后期维护
ln -s /app/nginx-1.24 /app/nginx7)配置环境变量
echo "export PATH=$PATH:/app/nginx/sbin" >> /etc/profile
source /etc/profile8)启动nginx
nginx验证nginx是否启动
查看进程
ps aux | grep [n]ginx监听端口号
ss -lntp | grep :80
Nginx配置文件
Nginx的相关命令
nginx #启动nginx。 等价于systemctl start nginx-s reopen #重启Nginx。 等价于systemctl restart nginx-s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx。 等价于systemctl reload
nginx-s stop #强制停止Nginx服务。 等价于systemctl stop nginx-s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)-?,-h #打开帮助信息-v #显示版本信息并退出-V #显示版本和配置选项信息,然后退出-T #检测配置文件是否有语法错误,转储并退出-q #在检测配置文件期间屏蔽非错误信息-p prefix #设置前缀路径(默认是:/usr/share/nginx/)-c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)-g directives #设置配置文件外的全局指令
Nginx配置文件介绍
/etc/nginx/nginx.conf 主配置文件
[root@web02 ~]# cat /etc/nginx/nginx.conf
#全局配置模块
user nginx; # nginx 程序用户
worker_processes auto; #工作进程的数量 根据cpu内核数量去进行生成工作进程数error_log /var/log/nginx/error.log notice; #错误日志存放的位置 notice 错误日志的一种格式
pid /var/run/nginx.pid; #进程ID的文件
#事件处理模块
events {worker_connections 1024;
}
#http的核心模块
http {include /etc/nginx/mime.types; #include引入配置文件 mime.type传输文件的文件类型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 /var/log/nginx/access.log main; #运行日志sendfile on; #程序不需要通过内存 而直接给到用户#tcp_nopush on;keepalive_timeout 65; #长连接超时时间#gzip on; #对传输的http的超文本文件进行压缩#引入虚拟主机配置文件include /etc/nginx/conf.d/*.conf;
}虚拟主机的配置文件
/etc/nginx/conf.d/default.conf
虚拟主机
server {listen 80;server_name localhost; #主机名称 localhost本地 -> 10.0.0.8#域名nierenjun.com#access_log /var/log/nginx/host.access.log main; #运行日志location / {root /usr/share/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 404 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}
Nginx案例
需求:
输入zjh.game.com/maliao打开马里奥游戏
输入zjh.game.com/h5game打开h5小游戏1.将两个小游戏的压缩包传到主机上
[root@web03 ~]# ls
anaconda-ks.cfg h5game.zip html5-mario.zip2.创建/web目录存放解压后的两个小游戏
mkdir -p /web
unzip h5game.zip
mv h5game /web/
unzip html5-mario.zip
mv html5-mario /web/maliao3.让/etc/nginx/conf.d目录下的default.conf
cd /etc/nginx/conf.d
rename .conf .conf.bak *.conf4.编写新的虚拟主机配置文件
vim /etc/nginx/conf.d/game.conf
server {listen 80;server_name zjh.game.com; root /web;location /maliao {index index.html;}location /h5game {index index.html;}
}5.检查配置文件是否有错误
nginx -t6.重启nginx服务
systemctl restart nginx7.修改本地dns的地址
7-1.win+R 输入C:\Windows\System32\drivers\etc
7-2.将本地dns的所有权限放开
7-3.在hosts文件里面添加10.0.0.9 zjh.game.com并保存8.验证
浏览器输入zjh.game.com/maliao
浏览器输入zjh.game.com/h5game