文章目录

  • 1.1 简介
  • 1.2 常见的服务器
  • 1.3 反向代理
  • 1.4 Nginx的安装与运行
  • 1.5 Nginx的进程模型
  • 1.6 Nginx处理Web请求机制解析
  • 1.7 Nginx核心配置文件nginx.conf解析
  • 1.8 Nginx常用命令解析
  • 1.9 Nginx日志切割
  • 1.10 Nginx为静态资源提供服务
  • 1.11 使用Gzip压缩提高请求效率
  • 1.12 location匹配规则解析

1.1 简介

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务,主要功能是反向代理,通过配置文件可以实现集群和负载均衡,还可以实现静态资源虚拟化。

1.2 常见的服务器

  1. MS IIS:asp.net
  2. Weblogic、Jboss:用于传统行业,如ERP/物流/电信/金融
  3. Tomcat、Jetty:用于J2EE开发
  4. Apache、Nginx:用于发布一些静态服务实现反向代理
  5. Netty:高性能服务器编程

以下是Netcraft统计的服务器市场使用率

1.3 反向代理

正向代理:客户端请求目标服务器之间的一个代理服务器,请求会先经过代理服务器,然后再转发请求到目标服务器,获得内容后最后响应给客户端,这个处于中间的服务器就是所谓的正向服务器,代理的是客户端
反向服务:用户请求目标服务器,由代理服务器决定访问哪个ip(服务器ip),代理的是服务器

1.4 Nginx的安装与运行

我的开发环境为Centos7+Finalshell

nginx的下载地址,下载稳定版即可

然后将下载好的文件通过Finalshell上传到Centos 7服务器的指定的文件夹下:

安装依赖环境

  1. 安装gcc环境:yum install gcc-c++
  2. 安装PCRE库,用于解析正则表达式:yum install -y pcre pcre-devel
  3. zlib压缩和解压缩依赖:yum install -y zlib zlib-devel
  4. SSL安全的加密的套接字协议层,用于HTTP传输,也就是https:yum install -y openssl-devel

解压

tar -zxvf nginx-1.22.1.tar,注意解压后得到的是源码,源码需要编译后才能安装

编译

编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错mkdir /var/temp/nginx -p

在nginx目录,输入如下命令进行配置,目的是为了创建mkefile文件

cd进入解压后的nginx的目录

./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--with-http_gzip_static_module \--http-client-body-temp-path=/var/temp/nginx/client \--http-proxy-temp-path=/var/temp/nginx/proxy \--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \--http-scgi-temp-path=/var/temp/nginx/scgi

命令 解释
–prefix 指定nginx的安装目录
–pid-path 指定nginx的pid
–lock-path 锁定安装文件,防止被恶意篡改或误操作
–error-log 指定错误日志路径
–http-log-path http日志路径
–with-http_gzip_static_module 启用gzip模块,在线实时压缩输出数据流
–http-client-body-temp-path 设定客户端请求的临时路径
–http-proxy-temp-path 设定http代理临时目录
–http-fastcgi-temp-path 设定fastcgi临时目录
–http-uwsgi-temp-path 设定uwsgi临时目录
–http-scgi-temp-path 设定scgi临时目录

make编译

make

安装

make install

测试安装结果

进入 /usr/local/nginx(前面配置的nginx安装目录)下的sbin目录启动nginx

./nginx -s stop #停止服务
./nginx #启动服务
./nginx -s reload #重启服务

本机访问虚拟机的ngnix服务(注意关闭防火墙)

默认index.html显示原理解析:
上面我们已经安装好nginx并访问到了默认主页,其原理是,首先我们在浏览器端输入我们要访问的nginx服务所在的服务器ip,并访问发起请求,服务器端Nginx会持续监听80端口,在接受到用户的访问请求后会找到对应的Server,然后映射路由到index.html,访问成功。下面是nginx.conf这一核心配置文件中服务器的配置内容:

1.5 Nginx的进程模型

  1. master:主进程
  2. worker:工作进程


我们可以在nginx.conf配置worker的进程数量(worker_processes:n),配置后重启服务即可

在具体的工作过程中,首先程序员将操作命令发送给master进程,master进程会将命令一个个分发给worker进程,然后每个worker会连接处理每一个客户端请求,并响应请求

1.6 Nginx处理Web请求机制解析

worker抢占机制:

当客户端发送请求到代理服务器时,各个worker进程会抢占一个一个互斥锁来进行服务,抢占到互斥锁的woker进程可以处理客户的请求(这个就是Nginx的Worker抢占机制)


传统服务器事件处理:

假设现在master进程仅仅fork一个worker进程,而woker1处理一个客户的请求时由于某些原因发生了阻塞,现在又来了一些新的请求,按照传统服务器的处理方式所有的进程都会被阻塞等待,此时,master进程会fork一个新的worker进程去处理这些新来的客户请求。这里是传统的服务器事件处理,而nginx在阻塞后worker进程会放弃继续处理当前阻塞的请求而出处理新的客户端请求(这是一种异步非阻塞的模型),同样worker的最大连接数可以在核心配置文件中进行配置。

1.7 Nginx核心配置文件nginx.conf解析

nginx.conf配置结构

main 全局配置
event:配置工作模式以及连接数
http:http模块的相关配置{

server:虚拟主机配置,可以有多个

location:路由规则,表达式
upstream:集群,内网服务器

user nobody:标志worker进程所属用户(这里是可以修改的),默认是nobody
worker_processes:worker进程的数量

配置日志和进程的信息,同样可以修改

工作模式默认是epoll
worker_connections:每个worker运行连接的客户端最大连接数

include:可以导入外部的配置文件
default_type:默认的type类型
log_format:日志的格式
access_log:每次请求都会记录到acces.log文件中
sendfile:用于进行文件的高校传输
tcp_nopush:和sendfile一起使用,表示当数据包累积到一定大小时才会发送
keepalive_timeout:客户端连接的超时时间
gzip:内容的传输会压缩成zip,提升传输效率

一个server代表一个虚拟主机
listen:服务监听窗口
server_name:服务器名
location:默认路由(会把index首页展示出来)
error_page:默认错误展示页面

1.8 Nginx常用命令解析

关闭nginx

  1. 暴力关闭:./nginx -s stop,会关闭所有的用户连接,对用户是很不友好的
  2. 优雅关闭:./nginx -s quit,当当前还有用户连接时不会关闭直到没有用户连接时会关闭

更改配置文件后监测语法是否正确

./nginx -t

查看nginx当前版本号

./nginx -v:粗略的查看版本信息
./nginx -V:详细的查看nginx信息

1.9 Nginx日志切割

根据我们之前的配置可以知道,日志文件都放置在/var/log/nginx文件夹下,随着nginx服务器的运行,所保存的日志信息会越来越判断,所以我们需要针对日志进行切割下面有两种切割方式:
手动日志切割

现有的日志都会保存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积也会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天或者半小时对日志切割一下:

  1. 创建一个shell可执行文件:cut_my_log.sh,内容为
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M).log #
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
kill -USR1 'cat $PID'
  1. 为cut_my_log.sh添加可执行权限
    chmod +x cut_my_log.sh

定时切割
3. 安装定时任务

yum install crontabs

  1. crontab -e 编辑并且添加一行新的任务

*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

  1. 重启定时任务

service crond restart

常见定时任务命令(可以看我这篇博客)
service crond start #启动服务
service crond stop #关闭服务
service crond restart #重启服务
service crond reload #重新载入配置
crontab -e #编辑任务
crontab -l #查看任务列表

1.10 Nginx为静态资源提供服务

常见的静态资源可以分为两类,第一类是我们的html页面,css文件等,另一类如视频、音频和图片

  1. 设置server
  2. 上传静态文件到server中配置的路径下(下载地址)

1.11 使用Gzip压缩提高请求效率

在没有使用Gzip压缩方式之前,我们可以看到浏览器请求各类资源的大小

下面在核心配置文件中配置gzip(然后再次访问比较文件大小)

gzip  on;  #打开gzip服务gzip_min_length 1; #设置压缩下限(小于1字节不压缩)gzip_comp_level 3; #设置压缩级别(级别越高cpu消耗越到)
#设置压缩文件的类型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;

1.12 location匹配规则解析

location是一种路径的匹配规则,相当于ssm的控制器前面的路径映射

  1. location /:默认匹配规则,代表当前server的根路径(可以访问该路径下所有内容)
  2. location = /:代表路径精确匹配,这里表示只能匹配/
  3. location ~* \.(GIF|png|bmp|jpg){ root /home;}:正则表达式匹配方式。*代表不区分大小写,这里表示可以匹配home下指定文件后缀的文件
  4. location ^~ /home/img{ root /home;}:正则表达式,以某个字符路径开头请求,这里表示只能请求img下的文件资源

Nginx教程(1)相关推荐

  1. agentzh 的 Nginx 教程(版本 2015.03.19) 第一篇

    转载:http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html#02-NginxDirectiveExecOrder10 目录 缘 ...

  2. Nginx 教程:基本概念

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 英文:netguru,翻译:开源中国 www.oschina.net/t ...

  3. nginx教程全集汇总(ttlsa出品)

    为什么80%的码农都做不了架构师?>>>    nginx教程写了一段时间,无意中发现,nginx相关文章已经达到了近100篇了.觉得很有必要汇总到一起,它是我们运维生存时间的一片心 ...

  4. Nginx教程(一) Nginx入门教程

    Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...

  5. yum安装Nginx教程

    yum安装Nginx教程   安装CentOS 7:本人原创 更新yum yum update -y 下载Nginx 安装nginx源 rpm -ivh http://nginx.org/packag ...

  6. Linux环境下安装及部署Nginx教程

    一.安装教程 1.官网下载地址:nginx: download 2.下载教程: 1)选择Stable version版本下载到本地(该版本为Linux版本),下载完成后直接在本地解压后放入linux系 ...

  7. Linux下安装nginx教程

    Linux下安装nginx教程 安装依赖包 #执行一下命令 安装4个依赖包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl- ...

  8. 苹果电脑mac安装nginx教程

    苹果电脑MAC安装nginx教程 使用homebrew安装,提醒需要翻墙,最后面介绍的源码安装方式不需要翻墙,只需要在墙内搞到源码即可,建议先确认一下自己能否翻墙,如果可以翻墙就用第一种方法,如果不能 ...

  9. 在centOS7中安装nginx教程

    在centOS7中安装nginx教程 在安装nginx之前,确保你的虚拟机能够联网! 安装nginx步骤: 一.安装好nginx所依赖的环境(gcc.PCRE.zlib.Open SSL). 二.安装 ...

  10. docker安装nginx教程

    Docker安装Nginx教程(小白教程) 1.查看可用的 Nginx 版本 Nginx 镜像库:Docker Hub . 我们还可以用 docker search nginx 命令来查看可用版本:  ...

最新文章

  1. 变量作用域与预处理命令习题
  2. 一种算法的实现,几个相同大小的div组合在一起,判断是不是矩形
  3. statsmodels 笔记:自回归模型 AutoReg
  4. IBatisNet基础组件
  5. 火了 2 年的服务网格究竟给微服务带来了什么?
  6. 【Java多线程】高级主题:定时调度、quartz、指令重排、volatile、ThreadLocal
  7. 天云大数据_天云大数据三度蝉联毕马威领先金融科技50强
  8. C语言函数库:动态库和静态库优缺点比较
  9. [Python] 对 Python 装饰器的理解心得
  10. C++ 哪些不能为虚函数
  11. [渝粤教育] 盐城工学院 材料物理性能 参考 资料
  12. DLL和EXE如何读取包含在自身的资源文件
  13. AR红包大战一触即发,2017年会成AR营销元年吗?
  14. C语言排序之冒泡法(起泡法)
  15. 苹果x支持5g吗_【苹果】曝iPhone12双卡下不支持5G?NO!小白实测支持
  16. PTA L3-031 千手观音 (30 分)
  17. 全国青少年软件编程等级考试C语言标准解读(1_10级)
  18. 暗影精灵4适合计算机专业,暗影精灵4评测_暗影精灵4代怎么样|值得买吗-太平洋电脑网...
  19. 高德GPS坐标转换成平面坐标(C#代码实现方式)
  20. WideCharToMultiByte

热门文章

  1. cocos2d-x 将js代码混淆成jsc
  2. SqlSession was not registered for synchronization because synchronization is not active
  3. oralc 中图片的存储与读取
  4. Falcom:英雄传说系列
  5. Neo4j图数据库的Cypher 语句总结
  6. SaaS 服务供应商Wynd获3170万美元B轮融资
  7. 竞赛图强连通分量大小幂和计数 - 组合计数 - 多项式
  8. Gin框架从入门到上手学习指南
  9. 2017移动端UI设计规范模板参考以及设计规范的好处
  10. Linux sed使用方法