Nginx教程

nginx

本文主要是介绍nginx,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

简介

nginx是一款轻量级的web服务器/反向代理服务器/电子邮件(IMAP,POP3)代理服务器,并在一个BSD-like协议下发行。

nginx的特点是内存占用少,并发能力强。,在同类网页服务器中表现比较好。

特性与优点

特性

  • 能支持最高50000个并发连接数的响应
  • nginx作为负载均衡服务器,既可以作为http服务器对外服务,也可内部直接支持php程序对外服务(反向代理)
  • nginx采用c编写,系统资源开销或cpu使用效率都高于perlbal( Perl 编写的单线程的事件驱动服务器,可充当 Web 服务器 和 HTTP 负载均衡)

优点

  • 高并发连接,最多支持5万并发,生产环境能到2~3万并发连接数
  • 内存消耗少,3万并发连接下,10个nginx进程占用150M内存
  • 配置文件通俗易懂(相对)
  • 成本低廉(开源软件)
  • 支持rewrite重写规则,根据域名,统一资源定位器URL,将http请求分发到不同后端服务器群组。
  • 内置健康检测,不会因为单个web服务器宕机影响前端访问
  • 节省带宽,可以添加浏览器本地缓存
  • 模块化设计,支持动态编译。
  • 外围支持好:模块和二次开发多
  • 支持热部署: 不停机重载配置文件
  • 支持事件驱动,AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

nginx功能

基本功能

  • 静态资源的web服务器

  • http,smtp,pop3协议的反向代理服务器

  • 缓存加速,负载均衡(负载均衡离不开反向代理,二者相互依存)

  • 支持FastCGI(fpm,LNMP),uWSGI(python)等

  • 模块化

  • 支持SSL(证书https等)

扩展功能

  • 基于名称和IP的虚拟主机

  • 支持keepalive(长连接,不是高可用!)

  • 支持平滑升级

  • 定制访问日志、支持使用日志缓冲区提高日志存储性能

  • 支持URL重写

  • 支持路径别名

  • 支持基于IP及用户的访问控制

  • 支持速率限制,支持并发数限制

    应用类别

  • 使用nginx结合FastCGI运行PHP、JSP、Perl等程序

  • 使用nginx作反向代理、负载均衡、规则过滤

  • 使用nginx运行静态HTML网页、图片

  • nginx与其他新技术的结合应用

nginx模块与工作原理

nginx由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

模块分类

nginx的模块从结构上分为:

核心模块

  • HTTP模块
  • EVENT模块
  • MAIL模块

基础模块

  • HTTP Access模块
  • HTTP FastCGI模块
  • HTTP Proxy模块
  • HTTP Rewrite模块

第三方模块

  • HTTP Upstream模块
  • Request Hash模块
  • Notice模块
  • HTTP Access Key模块

nginx模块从功能上分类,分为三类:

  • Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个
  • Filters(过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出
  • Proxies(代理器模块)。就是nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如fastcgi等操作交互,实现服务代理和负载均衡等功能

nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模块、第三方模块和补丁等

  • nginx基本模块:所谓基本模块,指的是nginx默认的功能模块,它们提供的指令,允许你使用定义nginx基本功能的变量,在编译时不能被禁用,包括:
    • 核心模块:基本功能和指令,如进程管理和安全。常见的核心模块指令,大部分是放置在配置文件的顶部(配置文件行的最左)
    • 事件模块:在Nginx内配置网络使用的能力。常见的events(事件)模块指令,大部分是放置在配置文件的顶部
    • 配置模块:提供包含机制(include)

工作原理

nginx模块被直接编译进nginx,属于静态编译方式。

启动时将模块编译为一个so文件,然后在配置文件中决定是否加载模块。

nginx启动,产生一个master进程,该进程不处理任何客户端请求,而是用来产生worker线程。worker线程用来处理多个request(请求)

基本的WEB服务请求步骤:

nginx安装与配置

安装(源码)

//防火墙selinux关闭
systemctl stop firewalld.service 
setenforce 0
//创建nginx用户
[root@node1 ~]# useradd -r -M -s /sbin/nologin nginx

//安装开发工具组和依赖包
[root@node1 ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make 
[root@node1 ~]# yum -y groups mark install 'development tools'
//创建日志存放目录
[root@node1 ~]# mkdir -p /var/log/nginx
[root@node1 ~]# chown -R  nginx.nginx /var/log/nginx
//下载源码包
[root@node1 ~]# cd /usr/src/
[root@node1 src]# wget http://nginx.org/download/nginx-1.20.0.tar.gz
[root@node1 src]# ll
...
-rw-r--r--. 1 root root 1061070 Apr 20 22:46 nginx-1.20.0.tar.gz
//解压
[root@node1 src]# tar xf nginx-1.20.0.tar.gz 
[root@node1 src]# cd nginx-1.20.0/
//编译安装
[root@node1 nginx-1.20.0]# ./configure \
> --prefix=/usr/local/nginx \	#指定路径
> --user=nginx \	#指定用户
> --group=nginx \	#指定组
> --with-debug \	#启用debug测试
> --with-http_ssl_module \	#启用ssl证书模块
> --with-http_realip_module \	#启用http真实ip模块
> --with-http_image_filter_module \	#启用http图像过滤器模块
> --with-http_gunzip_module \	#启用http压缩模块
> --with-http_gzip_static_module \	#启用静态压缩
> --with-http_stub_status_module \	#启用状态页面
> --http-log-path=/var/log/nginx/access.log \	#指定日http访问日志路径
> --error-log-path=/var/log/nginx/error.log	#指定报错日志路径

//启用多核心加速安装
[root@node1 nginx-1.20.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install

配置

配置文件详解

默认是“nginx安装路径/conf/nginx.conf'

配置文件 作用
nginx.conf nginx的基本配置文件
mime.types MIME类型关联的扩展文件
fastcgi.conf 与fastcgi相关的配置
proxy.conf 与proxy相关的配置
sites.conf 配置nginx提供的网站,包括虚拟主机
//添加环境变量
[root@node1 nginx-1.20.0]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@node1 nginx-1.20.0]# source /etc/profile.d/nginx.sh
[root@node1 nginx-1.20.0]# which nginx
/usr/local/nginx/sbin/nginx

//语法
[root@node1 nginx-1.20.0]# nginx -help
nginx version: nginx/1.20.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help	#帮助信息
  -v            : show version and exit	#显示版本
  -V            : show version and configure options then exit		#显示版本和配置选项
  -t            : test configuration and exit	#测试配置并退出
  -T            : test configuration, dump it and exit	#测试配置
  -q            : suppress non-error messages during configuration testing	#配置测试期间只输出错误信息
  -s signal     : send signal to a master process: stop, quit, reopen, reload	#传递控制信号给主进程
  -p prefix     : set prefix path (default: /usr/local/nginx/)	#设置路径
  -e filename   : set error log file (default: /var/log/nginx/error.log) #设置错误日志路径
  -c filename   : set configuration file (default: conf/nginx.conf)	#设置配置文件路径
  -g directives : set global directives out of configuration file	#从配置文件中设置全局指令

//启动测试
[root@node1 nginx-1.20.0]# nginx 
[root@node1 nginx-1.20.0]# ss -antl
State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port  
LISTEN  0       128            0.0.0.0:80            0.0.0.0:*     
LISTEN  0       128            0.0.0.0:22            0.0.0.0:*     
LISTEN  0       128               [::]:22               [::]:* 

这篇关于nginx的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!