初识Nginx

初识Nginx

 

这里写图片描述

 

前言

  Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

  其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆大部分互联网公司都是用Nginx,有的还进行了二次开发来满足自己的需求,比如阿里、腾讯等。

  在17年的十月份nginx的主机的市场份额首次超过了Microsoft,上升到第二位。而在前一百万的站点中的市场份额nginx早已遥遥领先其他主机,与Apache的差距不断缩小。

这里写图片描述

这里写图片描述

参考数据来自:https://news.netcraft.com/archives/2017/10/26/october-2017-web-server-survey-13.html

 

Nginx 介绍

 

Nginx 特性

 Nginx在设计上采用了模块化的结构,这是它拥有较好的扩展性。另外内存消耗方面Nginx的表现也非常好,10000个keep-alive连接模式下的非活动连接,仅需要2.5M内存。而且Nginx支持热部署,可以不停机更新配置文件,升级版本,更换日志文件。Nginx的高可靠性也是大多数互联网企业选择它的重要原因。

 

Nginx 架构

这里写图片描述

                    Nginx架构图

Nginx的程序架构:

master/worker结构

  • 一个master进程:

      负载加载和分析配置文件、管理worker进程、平滑升级

  • 一个或多个worker进程:

      处理并响应用户请求

  • 缓存相关的进程:

     cache loader:载入缓存对象
     cache manager:管理缓存对象

 
 

Nginx 安装

yum安装

yum源地址

  • 官网yum源

  http://nginx.org/packages/centos/6/x86_64/

  • 阿里云epel源

  https://mirrors.aliyun.com/epel/6/x86_64/

配置好yum源地址,就可以安装nginx了

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
gpgcheck=0
enabled=1

安装

yum -y install nginx

 

编译安装

yum -y groupinstall "developments tools" 

yum -y install pcre-devel openssl-devel
  • 创建账号
useradd  -r nginx -s /sbin/nologin
  • 更改版本名
tar -xf nginx-1.12.2.tar.gz

cd nginx-1.12.2

vim src/http/ngx_http_header_filter_module.c 

static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

#Server: nginx 可以通过修改后面的字段,修改版本名

注意:这里修改的版本名,需要在主配置文件中加入server_tokens off; ,这样才会显示此版本名,并且只显示版本名,不能显示版本号。

如果要同时显示版本名和版本号的更改,可以进行以下设置

vim src/core/nginx.h 

#define nginx_version      1020001
#define NGINX_VERSION      "2.1"                     #此处更改的是版本号
#define NGINX_VER          "Jenginx/" NGINX_VERSION  #此处更改版本名
  • 创建Makefile文件
./configure \
--prefix=/usr/share/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 \ #http日志文件路径
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \ #客户端主体文件临时存放路径
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \ #http反向代理服务器响应报文临时文件存放路径
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \ #FastCGI反向代理服务器响应报文临时文件存放路径
--pid-path=/run/nginx.pid \ #pid文件路径
--lock-path=/run/lock/subsys/nginx \ #锁文件路径
--user=nginx \ #wroker进程发起者用户名
--group=nginx \ #wroker进程发起者组名
--with-file-aio \ #文件异步存储模块
--with-http_gunzip_module \ #gunzip压缩模块
--with-http_gzip_static_module \ #gzip压缩模块
--with-http_stub_status_module \ #服务器信息显示模块
--with-pcre \ #支持正则匹配模块
--with-stream=dynamic \ 
--with-stream_ssl_module \
--with-debug 
  • 编译安装
make && make install

 

nginx 目录结构

ls /usr/share/nginx/

html是测试页目录

ls /usr/sbin/nginx

nginx 是主程序,只有一个程序文件

ls /usr/share/nginx/html

index.html 测试网页

 

nginx 命令

  • 启动 nginx 服务
nginx
  • 停止 nginx 服务
nginx -s stop
  • 重新加载配置文件
nginx -s reload
  • 在命令行中指明全局指令
nginx -g directives
  • 检查配置文件语法
nginx -t
  • 查看帮助选项
nginx -h
  • 指定配置文件
nginx -c PATH:file  (默认:/etc/nginx/nginx.conf)

nginx 配置

配置文件的组成部分:

  • 主配置文件:
/etc/nginx/nginx.conf
  • 子配置文件:
/etc/nginx/conf.d/*.conf  #子配置文件可以自定义
  • fastcgi, uwsgi, scgi等协议相关的配置文件

  • mime.types:支持的mime类型
     

主配置文件的配置指令:

directive value [value2 ...]

注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
  内建变量:由Nginx模块引入,可直接引用
  自定义变量:由用户使用set命令定义set variable_name value;
  引用变量: $variable_name

 

nginx 配置文件

主配置文件结构
main block:             #主配置段,即全局配置段,对http,mail都有效
        event {
        ...
        }                #事件驱动相关的配置
http {
    ...
 }                       #http/https 协议相关配置段
mail {
    ...
 }                       #mail 协议相关配置段
stream {
    ...
 }                       #stream 服务器相关配置段

 

http相关配置
http {
            ...
                        ...             #各server的公共配置
            server {                    #每个server用于定义一个虚拟主机
                    ...
                    }
            server {
                    ...
                    server_name         #虚拟主机名
                    root                #主目录
                    alias               #路径别名
                    location [OPERATOR] URL { 
                                指定URL的特性
                                ...
                    if CONDITION {
                                ...
                              }
                     }
              }
    }

 

  • Main 全局配置段常见的配置指令分类
    1. 正常运行必备的配置
    2. 优化性能相关的配置
    3. 用于调试及定位问题相关的配置
    4. 事件驱动相关的配置

 

 

正常运行必备的配
  • user
Syntax: user user [group];
Default: user nobody nobody;
Context: main

   指定worker进程的运行身份,如组不指定,默认和用户名同名

  • pid /PATH/TO/PID_FILE

  指定存储nginx主进程PID的文件路径

  • include file | mask

   指明包含进来的其它配置文件片断

  • load_module file

   模块加载配置文件: /usr/share/nginx/modules/*.conf
   指明要装载的动态模块路径: /usr/lib64/nginx/modules

 

 

性能优化相关的配置

1、worker进程的数量;通常应该为当前主机的cpu的物理核心数

worker_processes number | auto

2、worker进程和CPU绑定,提高缓存命中率

worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask] 

例如:

# 4颗CPU,启动4个worker进程,将每个进程分别与CPU0, CPU1, CPU2, CPU3绑定
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

# 4颗CPU,启动2个worker进程,第一个进程绑定到CPU0/CPU2上,第二个进程绑定到CPU1/CPU3上
worker_process 2;
worker_cpu_affinity 0101 1010;

#自动绑定
worker_process auto;
worker_cpu_affinity auto;

3、指定worker进程的nice值,设定worker进程优先级: [-20,20]

worker_priority number

4、worker进程所能够打开的文件数量上限,如65535

worker_rlimit_nofile number

 

事件驱动相关的配置:
events {
...
}

1、每个worker进程所能够打开的最大并发连接数数量,如:10240总最大并发数: worker_processes * worker_connections

worker_connections number

2、指明并发连接请求的处理方法,默认自动选择最优方法

use method

# example
use epoll;

3、处理新的连接请求的方法; on指由各个worker轮流处理新请求, Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能,默认on

accept_mutex on | off     

 

调试和定位问题

1、是否以守护进程方式运行nignx,默认是守护进程方式

daemon on|off

2、是否以master/worker模型运行nginx;默认为on,off 将不启动worker

master_process on|off

3、错误日志文件及其级别;出于调试需要, 可设定为debug;但debug仅在编译时使用了“–with-debug”选项时才有效

error_log file [level]
#设置log文件 file /path/logfile;
stderr:                                             #发送到标准错误
syslog:server-address[,parameter=values]:           #发送到syslog
memory:size                                         #内存
level:debug|info|notice|warn|error|crit|alter|emerg

 

http协议的相关配置

http {

server {

server_name
root
location [OPERATOR] /uri/ {

}
}
server {

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值