Nginx基本概述 #yyds干货盘点#

逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述Nginx基本概述 #yyds干货盘点#相关的知识,希望能为你提供帮助。
nginx基本概述 1.HTTP协议回顾 1.1.用户访问页面的过程

  • DNS解析过程、HTTP工作原理
  • 1.用户打开浏览器输入URL地址
  • 2.通过DNS解析url地址找到对应的ip地址
  • 3.通过ip地址向对应的web服务器发送tcp连接请求
    • 1.首先是网络设备去转发数据
    • 2.网站所在平台的私网防火墙(也就是哪个公司写的程序,就会转交给对应公司的防火墙),进行访问控制
    • 3.dns解析的ip地址就是负载均衡调度器的地址,实际上是由网络设备与负载调度器建立tcp三次握手,然后将http请求发给调度器
  • 4.调度器再通过tcp三次握手将http请求发送给web服务器
  • 常见的web架构类型
    Nginx基本概述 #yyds干货盘点#

    文章图片
1.2.DNS解析过程
  • 1.首先看本地缓存,是否有对应的页面信息
  • 2.如果本地缓存没有则去看本地hosts文件有没有记录
  • 3.如果本地hosts文件没有记录,则通过递归查询将dns解析请求发送至本地DNS服务器,也就是通过递归的方式去互联网上解析此页面,将解析的结果缓存到本地服务器上,可以通过IPS DNS、网关、自己搭建的Cache DNS缓存DNS实现
  • 4.去公网请求的方式是:通过迭代查询将dns的解析请求发送到互联网DNS服务器也就是13台根域服务器
  • DNS域名解析记录指针
    • NS记录:name server,负责解析dns服务器信息
    • MX记录:mail server,负责收发邮件服务器信息
    • A记录:主机记录,正向解析,域名----> IP
    • PTR记录:反向解析,IP----> 域名,现在基本不能使用PTR来找对对应的域名
1.3.http工作原理:
  • 1.用户通过浏览器输入url:http://www.baidu.com
  • 2.DNS将域名解析为IP
  • 3.用户通过IP和web服务器建立TCP连接
  • 4.通过HTTP发送请求(请求的页面)
  • 5.服务器解析请求,响应报文
  • 6.浏览器将收到的响应报文(开发人员写的代码),将代码解析为我们能看懂的页面
  • 7.TCP断开
  • http协议响应数据的过程,静态的找nfs、动态的找mysql、redis
  • 返回数据的过程
    • 数据库--> redis--> web--> lb--> network--> 浏览器
2.Nginx基本简述 2.1.Nginx简介
  • Nginx是一个开源且高性能、可靠的http web服务、代理服务、负载均衡
  • Nginx的好处
    • 开源:直接获取源代码
    • 高性能:支持海量并发
    • 可靠:服务稳定
    • 轻量:占用资源少
  • 常见的http web服务
    • httpdApache基金会开发
    • IIS必须是微软服务器才可以使用
    • GWSGoogle开发
    • openrestry基于Nginx+lua
    • tengine淘宝基于Nginx开发
2.2.为什么选择Nginx
  • Nginx非常轻量
    • 功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
    • 代码模块化(易读,便于二次开发,对于开发人员非常友好)
      server
      location /nba

      localtion /cba

  • Nginx技术成熟,国内公司基本大规模使用
    • 适合当前主流架构趋势,微服务、云架构、中间层
    • 统一技术栈,降低维护成本,降低技术更新成本
  • Nginx采用epoll(异步)网络模型,Apache采用select模型
    • select:当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下,相当于全文一行行找
    • epoll:当用户发起请求,epoll模型会直接进行处理,效率高效,并无连接限制,相当于直接定位某一行
3.Nginx应用场景
Nginx基本概述 #yyds干货盘点#

文章图片

  • 静态服务
    • html | jpg | png ...
    • Nginx缓存
  • 代理服务
    • 正向代理,内访外(内网pc上网,代理服务器代替pc上网)
Nginx基本概述 #yyds干货盘点#

文章图片

  • 反向代理,外访内(客户访问到代理服务器,代理服务器去代替客户访问对应的节点web服务器)
    • 负载均衡
  • 和反向代理的效果一样,但工作方式有区别,反向代理是一台服务器提供服务,而负载均衡是多台服务器同时提供服务
    • 安全服务
  • 访问控制,基于ip的、基于身份认证的
  • WAF,云waf、硬件waf、Nginx+lua、花钱买
    • 架构
  • LNMPLinuxNginxMySQLphp
  • LNMTLinuxNginxMySQLTomcat
4.Nginx安装 4.1.Nginx安装方式
  • EPEL源
    • 版本低,功能少
  • 官方源
    • 官方编译好的,封装成rpm包,并提供yum源
  • 源代码
    • 自己下载源代码,使用./configure & & make & & make install安装
  • 安装问题
    • 如果企业之前的Nginx都是通过源码安装,这时要我们部署新的Nginx服务器,怎时实现
      解决办法:Nginx-v获取版本,Nginx -V获取编译参数
    • 选项那么多,必须要配吗?
      解决方法:官方配置选项是根据企业需求来定制的,最好按官方的或者企业来实现
4.2.yum安装Nginx
配置repo文件,一定要叫Nginx.repo [root@localhost yum.repos.d]# vim Nginx.repo [Nginx] name=Nginx baseurl=http://Nginx.org/packages/centos/7/$basearch enabled=1 gpgcheck=0查看所有的yum仓库列表 [root@localhost yum.repos.d]# yum repolist安装Nginx [root@localhost yum.repos.d]# yum -y install Nginx查看Nginx版本信息 [root@localhost yum.repos.d]# Nginx -v-v查看版本号 Nginx version: Nginx/1.16.1[root@localhost yum.repos.d]# Nginx -V-V查看版本号及编译参数 Nginx version: Nginx/1.16.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) built with OpenSSL 1.0.2k-fips26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/etc/Nginx --sbin-path=/usr/sbin/Nginx --modules-path=/usr/lib64/Nginx/modules --conf-path=/etc/Nginx/Nginx.conf --error-log-path=/var/log/Nginx/error.log --http-log-path=/var/log/Nginx/access.log --pid-path=/var/run/Nginx.pid --lock-path=/var/run/Nginx.lock --http-client-body-temp-path=/var/cache/Nginx/client_temp --http-proxy-temp-path=/var/cache/Nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/Nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/Nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/Nginx/scgi_temp --user=Nginx --group=Nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC --with-ld-opt=-Wl,-z,relro -Wl,-z,now -pie

4.3编译安装Nginx
4.3.1.下载源码包并解压
  • http://Nginx.org进行下载
4.3.2.解包
[root@localhost soft]# tar xf Nginx-1.16.0.tar.gz [root@localhost soft]# useradd Nginx -s /sbin/nologin

4.3.3.安装依赖软件
[root@localhost soft]# yum -y install pcre pcre-devel openssl openssl-devel

4.3.4.编译安装
[root@localhost Nginx-1.16.0]#./configure --prefix=/application/Nginx --user=Nginx --group=Nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC --with-ld-opt=-Wl,-z,relro -Wl,-z,now -pie & & make & & make install

4.3.5.优化Nginx
[root@localhost Nginx]#ln -s /application/Nginx/sbin/* /usr/sbin/ [root@localhost Nginx]# ./sbin/Nginx [root@localhost Nginx]# netstat -lnpt | grep Nginx tcp00 0.0.0.0:800.0.0.0:*LISTEN30181/Nginx: master

5.Nginx配置文件
  • 使用rpm -ql Nginx可以看到Nginx的所有文件路径
    路径 类型 作用
    /etc/Nginx< br/> /etc/Nginx/Nginx.conf< br/> /etc/Nginx/conf.d< br/> /etc/Nginx/conf.d/default.conf 配置文件 Nginx主配置文件
    /etc/Nginx/fastcgi_params< br /> /etc/Nginx/scgi_params< br /> /etc/Nginx/uwsgi_params 配置文件 Cgi、Fastcgi、Uwcgi配置文件
    /etc/Nginx/koi-utf< br/> /etc/Nginx/koi-win< br /> /etc/Nginx/win-utf 配置文件 Nginx编码转换映射文件
    /etc/Nginx/mim.types 配置文件 http协议的content-type与扩展名< br /> Nginx所能支持的文件类型
    /usr/lib/systemd/system/Nginx.service 配置文件 配置系统守护进程管理器
    /usr/sbin/Nginx< br/> /usr/sbin/Nginx-debug 命令 Nginx终端管理命令
    /etc/logrotate.d/Nginx 目录 Nginx日志轮询,日志切割
    /etc/Nginx/modules< br /> /usr/lib64/Nginx< br /> /usr/lib64/Nginx/modules 目录 Nginx模块目录
    /usr/share/Nginx< br/> /usr/share/Nginx/html< br/> /usr/share/Nginx/html/50x.html< br/> /usr/share/Nginx/html/index.html 目录 Nginx默认站点目录
    /usr/share/doc/Nginx-1.16.1< br/> /usr/share/man/man8/Nginx.8.gz 目录 Nginx的帮助手册
    /var/cache/Nginx 目录 Nginx的缓存目录
    /var/log/Nginx 目录 Nginx的日志目录
  • 使用Nginx -V可以看到编译安装的参数
    编译选项 作用
    --prefix=/etc/Nginx < br/> --sbin-path=/usr/sbin/Nginx < br/> --modules-path=/usr/lib64/Nginx/modules < br/> --conf-path=/etc/Nginx/Nginx.conf < br/> --error-log-path=/var/log/Nginx/error.log < br/> --http-log-path=/var/log/Nginx/access.log < br/> --pid-path=/var/run/Nginx.pid < br/> --lock-path=/var/run/Nginx.lock 程序安装目录和路径
    --http-client-body-temp-path=/var/cache/Nginx/client_temp < br/> --http-proxy-temp-path=/var/cache/Nginx/proxy_temp < br/> --http-fastcgi-temp-path=/var/cache/Nginx/fastcgi_temp < br/> --http-uwsgi-temp-path=/var/cache/Nginx/uwsgi_temp < br/> --http-scgi-temp-path=/var/cache/Nginx/scgi_temp 临时缓存文件
    --user=Nginx < br/> --group=Nginx 指定Nginx进程启动用户和组
    --with-cc-opt 设置额外的参数将被添加到CFLAGS变量
    --with-ld-opt 设置附加的参数,连接系统库
6.Nginx模块Nginx主配置文件/etc/Nginx/Nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组成的,一般每个块以一对大括号来表示开始与结束
1.CoreModule核心模块全局配置2.EventModule事件驱动模块3.HTTPCoreModulehttp内核模块局部

6.1需了解的扩展项
  • CoreModule层下面可以有Event、HTTP
  • HTTP模块层允许有多个server层,server主要用于配置多个网站
  • server层又允许有多个Location,Location主要用于定义网站访问路径
一个简单的架构
http server listen 80; server_name www.know.com; location / root /know_system/know; html index.html; server listen 80; server_name www.baidu.com; location / root /baidu/www index index.php

6.2.CoreModule模块
user Nginx; #Nginx进程所使用的的用户 worker_processes 1;#Nginx允许的work进程数量(建议与CPU数量一致或者auto,ps命令时可以看到) error_log /log/Nginx/error.log; #Nginx错误日志存放路径 pid /var/run/Nginx.pid; #Nginx服务运行后产生的pid进程号

6.3.events模块
events worker_connections 1024; #每个worker进程支持最大的连接数,一般一个CPU是1024,二个就是2048... use epoll; #事件驱动模型,epoll默认

6.4. http内核模块
公共的配置定义在http http//http层开始 server//使用server配置网站,每个server代表一个网站(简称虚拟主机) listen80;//监听端口,默认80,多个server可以使用不同监听端口 server_name localhost; //通过服务的域名或主机名 location / root/usr/share/Nginx/html; //存放网站代码的路径 indexindex.php index.html index.htm; //服务器返回的默认页面文件也就是首页索引,谁在前优先去查找error_page500 502 503 504 /50x.html; //指定错误代码,统一定义错误页面,错误代码重定向到新的locationsendfileon; //是否可用发送文件 keepalive_timeout65; //tcp长连接试时间,65表示65秒后没有其他操作就断开 include /etc/Nginx/conf.d/*.conf; //加载引入其他配置文件,一般主配置文件只保留事件模块和http模块,server模块一般在单独文件然后使用include引入 //http层结束默认配置文件内容 [root@localhost conf.d]# egrep -v ^$|.*# default.conf.bak server listen80; //监听端 server_namelocalhost; //域名 location / root/usr/share/nginx/html; //根目录 indexindex.html index.htm; //索引error_page500 502 503 504/50x.html; //错误页面 location = /50x.html root/usr/share/nginx/html;

这里/50x.htm; 表示/usr/share/nginx/html/50.html
7.配置网站注意:配置文件要位于/etc/nginx/conf.d/*.conf
[root@localhost web]# cat /etc/nginx/conf.d/know.conf server listen 80; server_name know.com; location / root/web/know; indexindex.html; 创建网站目录 [root@localhost ~]# mkdir -p /web/know检测配置语法 [root@localhost web]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful关闭selinux [root@localhost web]# setenforce 0 [root@localhost web]# sed -ri /^SELINUX/c\\SELINUX=disabled /etc/sysconfig/selinux配置网站,将之前在培训时制作的网站进行上传 [root@localhost know]# rz know_system.zip重载服务 [root@localhost web]# systemctl restart nginx实现域名访问 在Windows主机上打开C:\\Windows\\System32\\drivers\\etc\\hosts,加上192.168.81.210 know.com在命令行,执行下面命令表示成功 [C:\\~]$ ping know.com正在 Ping know.com [192.168.81.210] 具有 32 字节的数据: 来自 192.168.81.210 的回复: 字节=32 时间< 1ms TTL=64 来自 192.168.81.210 的回复: 字节=32 时间< 1ms TTL=64

效果
Nginx基本概述 #yyds干货盘点#

文章图片

Nginx基本概述 #yyds干货盘点#

文章图片

8.排查1.解析问题,找本地hosts文件
2.nginx无法启动
  • 检查端口是否被占用:lsof -i:80
  • 配置文件是否写错
  • 重载失败,使用nginx -t检测是否存在语法错误
  • 遇到其他错误一定要看日志,例如403、404都会在日志中提现出来
9.总结1.nginx的功能
  • web服务器、代理、负载均衡、安全控制
【Nginx基本概述 #yyds干货盘点#】2.nginx的优势
  • 轻量、开源、高性能、高可靠、模块化、配置可读性高、二次开发容易实现
3.nginx的应用场景
  • web应用、缓存、代理、负载均衡、安全访问
4.nginx安装
  • epel源、官方源、源码
  • 企业能联网的情况下,开源使用官方源,直接在repo文件中的baseurl=http://Nginx.org/packages/centos/7/$basearch写成这样既可安装nginx
  • 一般推荐是用源码编译,因为官方编译的路径不是很一体化,建议还是使用nginx编译安装的方式,编译参数可以根据官方源提供的进行配置即可
  • epel不是很推荐,版本低功能少
5.nginx配置文件
  • /etc/nginx/nginx.conf
    • 核心模块:例如进程数、用户等配置
    • 事件模块,evtens
    • http模块主要用户发布网站用
    • server一个网站一个主机头
      • location网站配置
  • /etc/nginx/conf.d/*.confrpm安装的nginx建议把server单独配置在conf.d目录下,后缀必须是.conf,编译安装的则没有
6.服务管理
  • nginx.servicessystemctl rload nginx
7.命令工具
  • nginx
    • -v版本
    • -V编译选项
    • -t语法测试
    • -sreload

    推荐阅读