Nginx基本概述

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

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架构类型

image.png

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服务

httpd Apache基金会开发

IIS 必须是微软服务器才可以使用

GWS Google开发

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应用场景

image.png

  • 静态服务
  • html | jpg | png …
  • Nginx缓存
  • 代理服务
  • 正向代理,内访外(内网pc上网,代理服务器代替pc上网)image.png反向代理,外访内(客户访问到代理服务器,代理服务器去代替客户访问对应的节点web服务器)


负载均衡


和反向代理的效果一样,但工作方式有区别,反向代理是一台服务器提供服务,而负载均衡是多台服务器同时提供服务

安全服务


访问控制,基于ip的、基于身份认证的

WAF,云waf、硬件waf、Nginx+lua、花钱买

架构


LNMP Linux Nginx MySQL PHP

LNMT Linux Nginx MySQL Tomcat

4.Nginx安装

4.1.Nginx安装方式

EPEL源

版本低,功能少

官方源

官方编译好的,封装成rpm包,并提供yum源

源代码

自己下载源代码,使用./configure && make && make install安装

安装问题

如果企业之前的Nginx都是通过源码安装,这时要我们部署新的Nginx服务器,怎时实现

解决办法:Nginx-v获取版本,Nginx -V获取编译参数

选项那么多,必须要配吗?

解决方法:官方配置选项是根据企业需求来定制的,最好按官方的或者企业来实现

4.2.yum安装Nginx


image.png

配置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-fips  26 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.下载源码包并解压

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-

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
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30181/Nginx: master 

5.Nginx配置文件

  • 使用rpm -ql Nginx可以看到Nginx的所有文件路径image.png  
  • 使用Nginx -V可以看到编译安装的参数image.png

6.Nginx模块

Nginx主配置文件/etc/Nginx/Nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组成的,一般每个块以一对大括号{}来表示开始与结束

1.CoreModule    核心模块      全局配置
2.EventModule   事件驱动模块
3.HTTPCoreModule    http内核模块   局部

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

效果

image.png

8.排查

1.解析问题,找本地hosts文件


2.nginx无法启动


检查端口是否被占用:lsof -i:80

配置文件是否写错

重载失败,使用nginx -t检测是否存在语法错误

遇到其他错误一定要看日志,例如403、404都会在日志中提现出来

9.总结

1.nginx的功能


web服务器、代理、负载均衡、安全控制

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/*.conf rpm安装的nginx建议把server单独配置在conf.d目录下,后缀必须是.conf,编译安装的则没有


6.服务管理


nginx.services systemctl rload nginx

7.命令工具


nginx

-v 版本

-V 编译选项

-t 语法测试

-s reload


目录
相关文章
|
存储 负载均衡 架构师
Nginx极简入门(七)Nginx的日志管理及配置
前面讲了如何配置Nginx虚拟主机和Nginx负载均衡。我们知道日志对于Nginx非常重要。今天要说的是如何配置Nginx的日志。
Nginx极简入门(七)Nginx的日志管理及配置
|
9月前
|
负载均衡 Java 应用服务中间件
【Nginx】第一章 Nginx简介
【Nginx】第一章 Nginx简介
67 0
|
4月前
|
缓存 应用服务中间件 nginx
Nginx 简介和安装(一)
Nginx 简介和安装
142 0
|
4月前
|
监控 应用服务中间件 nginx
Nginx 简介和安装(二)
Nginx 简介和安装
73 0
|
6月前
|
缓存 负载均衡 前端开发
Nginx基础
Nginx基础
48 0
|
7月前
|
缓存 负载均衡 应用服务中间件
【Nginx系列】(一)Nginx基础概念
【Nginx系列】(一)Nginx基础概念
|
12月前
|
负载均衡 关系型数据库 MySQL
Nginx 基础配置
Nginx应该都不陌生,作为“上古时期”服务器四大件LNMP(Linux、Nginx、Mysql、PHP)之一,已经证明了它的强大之处,直到今天Nginx仍然有着相当强大的作用与价值。
384 0
|
缓存 负载均衡 Kubernetes
Nginx概述
Nginx概述
117 0
Nginx概述
|
监控 网络协议 应用服务中间件
Nginx基础配置
Nginx基础配置
99 0
Nginx基础配置
|
域名解析 安全 搜索推荐
Nginx简介说明
Nginx简介说明
143 0