nginx服务介绍及搭建
1 web服务软件种类介绍
apache:是中小型web服务的主流
nginx:大型网站服务的主流,分支tengine
lighttpd:不温不火的优秀web软件,社区不活跃,静态解析效率很高
2 动态服务的软件
php:大中小型网址站都会使用,动态网页php程序的解析容器
tomcat:中小企业动态web服务主流,互联网java容器主流
resin:大型动态web服务主流,互联网java容器主流
3 nginx软件服务特征介绍
1.支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
2.资源消耗少:在3W并发连接下,开启10个nginx线程消耗的内存不到200M
3.支持异步网络I/O事件模型Epoll apache select
select(同步) apache和nginx epoill(异步)
异步的安全性、稳定性没有同步高,中间容易被人窃取,用户收不到数据
静态业务高并发选择nginx和lighttpd
动态业务理论上nginx和apache
举例说明:高铁列车员
假如车站到车了,会提醒乘客
select模型的乘务员:会一个一个的去提醒乘客到车站了,准备下车了
优点: 客户可以确保知道到那个站了
缺点:速度比较慢,效率低
epoll模型的乘务员:会通过广播的形式,告诉客户到站了,准备下车了
优点:通知速度较快,效率较高
缺点:假如客户睡着了,没有听到这个广播,那么这个乘客就会坐过站
4 nginx功能介绍
1.作为web服务软件(处理用户访问静态请求)
2.反向代理或者负载均衡服务
3.前端业务数据缓存服务
5 编译安装nginx
5.1 下载安装包
http://nginx.org/en/download.html
5.2 安装依赖
yum install -y pcre-devel openssl-devel pcre-devel: perl语言正则表达式兼容软件包 openssl-devel:使系统支持https方式访问
5.3 创建用户
useradd -s /sbin/nologin -M www
此处我设置的nginx的启动用户是www,这个用户可以自己随意设置
5.4 编译安装
①. 编译配置
./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=PATH 指定软件安装在什么目录下 --user=USER 指定软件worker进程管理用户,利用www虚拟用户管理worker进程 --group=USER 指定用户组 --with-http_ssl_module 使nginx程序可以支持HTTPsF访问功能 --with-http_stub_status_module 用于监控用户访问nginx服务情况
如果上述没有出现报错,开始下一个模块
这个位置编辑的时候可以自己添加参数,具体可以使用./configure --help查看更多的参数
②. 编译安装
make && make install
5.5 为nginx程序软件创建链接目录
ln -s /application/nginx-12.2 /application/nginx
5.6 启动nginx程序服务
添加环境变量
echo 'PATH=/application/nginx/sbin/:$PATH' >>/etc/profile source /etc/profile ##使环境变量生效
启动的两种方式
方式一:直接执行nginx命令启动
方式二:编写启动脚本进行起停(CentOS7)
cat > /usr/lib/systemd/system/nginx.service <<EOF [Unit] Description=nginx After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/application/nginx/logs/nginx.pid ExecStartPost=/bin/sleep 0.1 ExecStartPre=/application/nginx/sbin/nginx -t -c /application/nginx/conf/nginx.conf ExecStart=/application/nginx/sbin/nginx -c /application/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOF systemctl start nginx #启动nginx systemctl enable nginx #设置开机自启
6 nginx软件程序目录结构
conf --- nginx程序所有配置文件保存目录 nginx.conf --- nginx程序主配置文件 精简nginx.conf配置文件内容: grep -Ev "#|^$" nginx.conf.default >nginx.conf nginx配置文件组成: ①. main nginx主区块 ②. event nginx事件区块 ③. http nginx http功能区块 ④. server nginx 网站主机区块,一个server就是一个虚拟主机 ⑤. location nginx 匹配或者定位区块 html --- nginx程序站点目录 logs --- nginx程序日志文件保存目录 sbin --- nginx程序命令所在目录 nginx命令参数说明: -V --- 查看nginx软件编译配置参数 -t --- 检查nginx配置文件语法格式是否正确 -s --- 用于管理nginx服务运行状态 stop 停止nginx服务 reload 平滑重启nginx服务器
重启nginx服务
nginx -s stop 停止 nginx 启动
7 三个语法格式说明:
①. 大括号要成对出现 ②. 每一行指令后面要用分号结尾 ③. 每一个指令要放置在指定的区块中
8 虚拟主机配置文件编写方法:
①. 基于域名的虚拟主机配置方法(最常用) ②. 基于端口的虚拟主机配置方法 说明:当你访问的网站域名在虚拟主机配置中不存在时,默认会将第一个虚拟主机的配置页面响应给用户 ③. 基于IP地址的虚拟主机配置方法 说明:nginx服务中只要涉及IP地址的修改,都需要重启nginx服务,而不能采用平滑重启
9 nginx服务日志信息
9.1 错误日志
Syntax: error_log file [level]; Default: error_log logs/error.log error; Context: main, http, mail, stream, server, location #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
错误日志的,默认情况下不指定也没有关系,因为nginx很少有错误日志记录的。
但有时出现问题时,是有必要记录一下错误日志的,方便我们排查问题。
error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit
该级别在日志名后边定义格式如下:
error_log /your/path/error.log crit;
crit 记录的日志最少,而debug记录的日志最多。
如果nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,
那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富
9.2 访问日志
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 | 调用定义格式信息,生成访问日志 |
$remote_addr 1 | 访问客户端的源地址信息 |
$remote_user | 访问客户端认证用户信息 |
[$time_local] | 显示访问时间 |
$request | 请求行信息 |
$status | 状态码信息 |
$body_bytes_sent | 服务端响应客户端的数据大小信息 |
$http_referer | 记录链接到网站的域名信息 |
$http_user_agent | 用户访问网站客户端软件标识信息 |
$http_x_forwarded_for | 反向代理 |
10 nginx配置文件location匹配优先级
1)等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项,停止搜索。
2)^~类型表达式,不属于正则表达式。一旦匹配成功,则不再查找其他匹配项,停止搜索。
3)正则表达式类型( ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
4)/str/ 常规字符串匹配类型。按前缀匹配。
5)/ 通用匹配,如果没有匹配到,就匹配通用的
11 如何利用nginx进行访问控制
deny allow ngx_http_access_module --- 实现访问控制模块 官方链接:https://nginx.org/en/docs/http/ngx_http_access_module.html
12 利用location区块进行定位
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location 官方链接:https://nginx.org/en/docs/http/ngx_http_core_module.html#location
= | 精确匹配网站uri资源信息 |
~ | 区分大小写匹配网站uri资源信息 |
~* | 不区分大小写匹配 |
^~ | 优先匹配 |
/av/ | 指定匹配网站资源 |
/ | 默认匹配 |
! | 对匹配的内容取反 |
12.1 匹配优先级
= | 优先级最高 |
^~ | 优先匹配 |
~* | 不区分大小写 |
// | 根据目录匹配 |
/ | 默认匹配 |
13 负载均衡
13.1 负载均衡调度算法
调度算法自带的一共四种,还有一些第三方的调度算法,此处不做介绍
调度算法 | 含义 |
---|---|
轮询 | 每个请求按照时间顺序逐一分配到不同的主机 |
权重调度算法 | 权重值越大分配的越多 |
ip_hash | 每个请求按照访问的ip哈希结果分配 |
定义最小连接数 | 连接数最少的优先匹配 |
13.2 负载均衡调度状态
状态 | 含义 |
---|---|
down | 表示不参与负载均衡 |
backup | 预留的机器,所有非backup都挂掉或者繁忙的时候,才会用到 |
max_fails | 允许请求失败的次数,默认为1,当超过次数,就会返回错误信息 |
fail_timeout | 请求失败超时时间,在经历max_files的次数后,暂停服务的时间 |
NGINX与PHP进行协同工作原理
当我们访问网站的时候
www.test.com/index.php-------nginx-----加载nginx的fast-cgi模块-----请求到达php-fpm-----接收到请求启动worker进程处理请求----处理完成返回给nginx—nginx返回给浏览器
- 使用Nginx搭建Web服务的详细介绍!!干货!!!!!
- 全面掌握Nginx配置+快速搭建高可用架构 一 开启status页面检测服务状态
- Nginx服务器上搭建图片缓存服务的基本配置解析
- CentOS6使用nginx搭建web网站服务的方法
- Nginx安装配置与服务搭建
- 网易视频云:用Nginx搭建flv,mp4,hls流媒体服务
- centos6.4 nginx + rtmp 流媒体服务搭建
- 搭建nginx网站服务及应用
- Android系统上使用ANMPP搭建Nginx+PHP+MySQL+FTP服务(以天猫魔盒TMB100A为例)搭建网站
- 安装Nginx之 Linux裸机下搭建各种服务(第二篇)
- Docker使用(搭建2048游戏、搭建nginx服务)
- centos LNMP第一部分环境搭建 LAMP LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/php/{p.conf.default,p.conf} php运行方式SAPI介绍 第二十三节课
- 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)
- 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务
- Windows Server 2012R2 IIS服务介绍及搭建
- lvs keepalived nginx-rtmp 视频流服务负载均衡系统搭建
- exportfs命令、FTP介绍、使用vsftpd搭建ftp服务
- Nginx服务搭建负载均衡,反向代理,缓存加速,访问分布式文件系统高可用
- Nginx学习之如何搭建文件防盗链服务的方法示例
- ubuntu下搭建nginx+scala+play 2.0运行环境的方法介绍