Nginx 介绍及日常管理的详解

Nginx 介绍及日常管理的详解

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。本文简要描述了Nginx的基本特性及其配置文件的简单描述。

一、Nginx的工作进程

1、一个主进程:
  主进程的主要目的是读取和评估配置,启动、终止及维护工作进程以及创建、绑定及关闭套接字。 

2、多个工作进程:
  工作进程处理web请求。nginx的采用了基于事件的模型和操作系统相关的机制,有效地分配工作进程之间的请求。
  负责解析http协议;提供反向代理及过滤功能;nginx任何能完成的其它任务;
  工作进程的数量被定义在配置文件中,可以使用配置文件定义固定的数量,或根据可用的CPU内核数实现自动调整其数量。

3、缓存加载器(cache loader):
  检查缓存存储中的缓存对象;
  使用缓存元数据建立内存数据库;
  接收、传入并处理来自客户端的连接;

4、缓存管理器(cache manager):
  缓存的失效及过期检验;

5、基于配置文件定义Nginx的工作方式
  nginx的工作方式及其模块的工作是在配置文件中确定的。
  缺省情况下,其配置文件为nginx.conf,通常位于/usr/local/nginx/conf, /etc/nginx, 或者/usr/local/etc/nginx目录下。

二、Nginx特性

1、Nginx的模块化特性
    Nginx服务器与Apache httpd类似,采用了基于模块化的构建方式。
    在安装部署Nginx服务器时,一定要遵循:最小化模块安装,以节省无用模块对Nginx的性能影响及占用系统资源。
    a、从功能上划分
      Nginx核心模块:包括Nginx的内核模块和事件驱动模块
      http服务器模块:这类模块包括三类模块,即HTTP的内核模块和标准模块以及可选的HTTP模块

    b、从发布模块的方式来划分
      官方模块
      第三方模块

    c、从模块的可选项来划分
      必选模块(Main和Events)
      可选模块

2、Nginx功能特性
    模块化设计、较好扩展性
    高可靠性
      master-->worker
    低内存消耗
      10000个keep-alive连接在Nginx仅消耗2.5MB
    支持热部署
      不停机而更新配置文件、更换日志文件、更新服务器程序版本

  基本功能:
    静态资源的web服务器,能缓存打开的文件描述符;
    http, smtp, pop3协议的反向代理服务器,缓存、负载均衡;
    支持FastCGI (fpm);
    模块化,非DSO机制,过滤器zip,SSI及图像大小调整;
    支持SSL;
    非阻塞、事件驱动、一个master生成一个或多个worker, 每个worker响应n个请求;

  扩展功能:
    基于名称和IP的虚拟主机;
    支持keepalive
    支持平滑升级
    定制访问日志 ,支持使用日志缓冲区提高日志存储性能
    支持url rewrite
    支持路径别名
    支持基于IP及用户的访问控制
    支持速率限制,支持并发数限制

  Nginx的基本架构:
    一个master进程,生成一个或多个worker
    事件驱动: epoll, kqueue, /dev/poll (event ports)
      消息通知:select, poll, rt signals
    支持sendfile, sendfile64
    支持AIO
    支持mmap

  模块类型:
    核心模块
    Standard HTTP modules
    Optional HTTP modules
    Mail modules
     3rd party modules

三、Nginx的启动、停止、配置文件重新装载

1、启动
  直接使用命令启动,示例,-c后面跟上配置文件路径及名字,如果忽略-c,则使用缺省的配置文件
  # /usr/sbin/nginx -c /etc/nginx/nginx.conf
  使用服务方式启动,示例如下
  # service nginx start

2、启动后的常用管理语法
  nginx -s signal
  其中signal可以为下列值
    stop — fast shutdown
    quit — graceful shutdown
    reload — reloading the configuration file
    reopen — reopening the log files

3、nginx的停止
  stop — 快速停止,粗暴模式,不再接受新请求,已经处理的请求被强制关闭,示例如下
    # /usr/sbin/nginx -s stop
  quit — 优雅停止,不再接受新请求,等待当前的工作进程完成当前的服务器请求,并停止nginx
    # /usr/sbin/nginx -s quit
  通过服务方式关闭nginx
    # service nginx stop

4、配置文件重新装载
  reload — 重新载入配置文件
    nginx配置文件的任意变更,不会被立即生效,需要使用重载命令或重启nginx
    一旦主进程接收到重新加载配置的信号,它检查新的配置文件的语法正确性,并尝试应用新的配置。
    否则,主进程回滚所做的更改,并继续使用旧的配置文件工作。
    旧的工作进程,接收命令关闭, 停止接受新的连接,并继续服务于当前的请求,直至当前请求服务完毕后,旧的工作进程退出
    进程信号可以被发送到nginx,通过Linux/Unix的 kill工具来杀死进程。
    在这种情况下的带有进程ID的信号被直接发送到一个进程。
    缺省情况下,nginx的主进程PID被写入到位于/usr/local/logs或者/var/run目录的nginx.pid文件。
    例如,如果主进程ID是1628,发送nginx正常关机的退出信号,则执行:
    kill -s QUIT 1628

  通过服务方式重载配置文件
    # service nginx reload

四、Nginx配置文件结构

1、配置说明
  a、nginx配置文件由不同模块组成,通过模块化的方式实现不同的功能。
  b、配置指令分为简单指令和块指令。一个简单的指令,包括名称,用空格分隔参数,并用分号(;)结束。
  c、一个块指令由一个或多个简单具有相同的结构简单指令组合而成,使用一组用{}括号括起来表示块结束。
  d、上下文:一个块的指令包含有大括号其他指令,它被称为上下文(例如:事件,HTTP,服务器,和位置)。
     放置在配置文件中的任何上下文以外的指令都被认为是在主上下文。
  e、检查配置文件语法: nginx -t
  f、指定nginx要加载的配置文件:nginx -c  

2、配置文件构成
  Nginx配置文件结构主要由以下几部分构成。
  ......
  events  #Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。
    {
     ......
    }

  http       #http上下文专用于配置用于http的各模块
    {        #包括客户端类指令,文件IO类指令,hash类指令,套接字类指令等
     ......
        server   #用于定义虚拟服务器相关的属性,常见的指令有backlog、rcvbuf、bind及sndbuf等
        {
         ......
        }
        server
        {
         ......
        }
     ......
     }  

3、基本的nginx.conf配置描述
# more /etc/nginx/nginx.conf

#user nobody;    #指定运行worker进程的用户和组
worker_processes 1; #worker线程的个数;通常应该为物理CPU核心个数减1;

#error_log logs/error.log;    #配置错误日志文件位置及日志记录级别
#error_log logs/error.log notice;#可用于main、http、server及location上下文中
#error_log logs/error.log info; #语法格式为error_log file |stderr [debug|info|notice|warn|error|crit|alert|emerg]

#pid    logs/nginx.pid;     #指定pid存放路径  

events {
  worker_connections 1024; 每个worker进程所能够响应的最大并发请求数;
}

http {
  include    mime.types;
  default_type application/octet-stream;

  #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;

  sendfile    on;  #文件发送
  #tcp_nopush   on;

  #keepalive_timeout 0;
  keepalive_timeout 65; #保持连接的超时时长,默认为65s

  #gzip on;  #是否开启gzip压缩

  server {
    listen    80;    #定义监听的端口 Author:Leshami
    server_name localhost; #定义监听的主机 Blog :http://blog.csdn.net/leshami

    #charset koi8-r;    #定义字符集

    #access_log logs/host.access.log main; #访问日志文件存放路径

    location / {   #location通常用于server上下文中,用于设定某URI的访问属性。location可以嵌套。
      root  html; #默认首页文件位置,此处当前为相对路径,/etc/nginx/html
      index index.html index.htm; #首页文件顺序,如果找不到index.html,则找index.htm
    }

    #以下部分根据http状态码重定向错误页面
    #error_page 404       /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }
  }
}

五、获取Nginx帮助

[root@wms ~]# nginx -h
nginx version: nginx/1.8.0
Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
 -?,-h     : this help
 -v      : show version and exit
 -V      : show version and configure options then exit
 -t      : test configuration 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: /etc/nginx/)
 -c filename  : set configuration file (default: /etc/nginx/nginx.conf)
 -g directives : set global directives out of configuration file

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Linux 6下安装编译安装Nginx的步骤

    Linux 6下安装编译安装Nginx的步骤 前言: Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一.能够支持高达50,000个并发连接数的响应,而且内存开销极小.这也是Nginx广受欢迎的重要原因.本文演示了基于Linux 6下编译安装Nginx,供大家参考. 一.安装环境 # cat /etc/issue Red Ha

  • nginx使用nginx-rtmp-module模块实现直播间功能

    系统环境 wujianjun@wujianjun-work ~ $ uname -a Linux wujianjun-work 4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 软件环境 OBS(Open Broadcaster Software) v20.0.1 (Linux) nginx version: nginx/1.13.6 built

  • PHP使用Nginx实现反向代理

    一.代理服务器 1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机. 2.为什么要使用代理服务器 1)提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度. 2)防火墙作用 由于所有的客户机请求都必须通过代

  • 关于Spring Boot WebSocket整合以及nginx配置详解

    前言 本文主要给大家介绍了关于Spring Boot WebSocket整合及nginx配置的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一:Spring Boot WebSocket整合 创建一个maven项目,加入如下依赖 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId>

  • Laravel 5.5官方推荐的Nginx配置学习教程

    前言 本文主要给大家介绍了关于Laravel 5.5官方推荐的Nginx配置的想内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍把. Laravel 5.5 版本官方放出了 Nginx 服务器的配置,中文文档:服务器配置 Nginx server { listen 80; server_name example.com; root /example.com/public; add_header X-Frame-Options "SAMEORIGIN"; add_head

  • keepalived实现nginx高可用

    keepalived直译就是保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,keepalived实现的基础是vrrp,至于vrrp是什么请直接看这里vrrp,下面我们直接看应用吧. keepalived使用 为了方便使用,写了一个基于ubuntu 16.04 server 的一键配置脚本,配置使用相关就在脚本里见吧 #!/bin/bash # nginx+keepalived 高可用一键脚本for

  • Linux下nginx生成日志自动切割的实现方法

    Linux下nginx生成日志自动切割的实现方法 1.编辑切割日志的 shell 程序,目录自定 #vi /data/nginx/cut_nginx_log.sh 输入代码: #!/bin/bash # This script run at 00:00 function cutAccess() { dir=$1 newdir="${dir}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday&quo

  • Nginx一个IP如何配置多个站点的方法教程

    前言 对于Nginx,一个IP上配置多个站点还是很常见的.尤其是在开发环境上,更是如此. 下面在我的阿里云上简单的实现这样一个需求: 在一个IP上通过对端口区分来配置多个站点. 环境初始化目录一览配置站点准备添加配置文件疑难杂项fastcgi_passNginxphp-fpm的进程间通信有两种方式总结 环境 手头上正好有一台阿里云学生机,趁着没过期,就拿来用吧. 操作系统:centOS7 php-fpm Nginx 初始化 在centos上搭建php-fpm+nginx环境不是很难,网上有很多的

  • Nginx的使用经验小结

    Nginx Nginx简单介绍 一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 Nginx命令参数 nginx -t 测试配置是否正确 nginx -s reload 加载最新配置 nginx -s stop 立即停止 nginx -s quit 优雅停止 nginx -s reopen 重新打开日志 kill -USR2 cat /usr/local/nginx/logs/nginx.pid 快速重启 Nginx全局段配置 worker_processes

  • Nginx 防止被域名恶意解析的办法

    Nginx 防止被域名恶意解析的办法 前言: 今天太倒霉了,发现通过IP无法访问服务器的80端口很无语,昨天都还好的啊,也没有修改过配置,其他端口又是正常的,防火墙也没问题.于是问了下机房,给了个崩溃的回复说我们的服务器有个域名没有备案被电信多次通告,然后就把我们ip端口给封了....封了啊...疯了,关键是这个域名TMD不是我的啊 经过一番折腾,发现是 nginx 配置上貌似有个漏洞,导致任何域名解析到服务器都能被正常请求,虽然是个空白页,但HTTP状态码是200. 主要是缺少下面的配置代码:

随机推荐