当前位置: 首页>编程语言>正文

nginx的主要功能和原理 nginx的作用及详解

一、nginx是什么

Nginx是一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,内存、CPU等系统资源消耗却很低,运行很稳定

二、nginx的作用

1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器

2、负载功能(与高并发高可用对应):对后台服务器集群进行负载

3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责

三、相关概念

正向代理与反向代理

1、代理:客户端自己请求出现困难。客户请了一个代理,来代自己做事,就叫代理

2、反向代理:多个服务端推出来的一个代理

四、源码安装nginx

先去https://github.com/openresty/echo-nginx-module/tags下载echo的源码包echo-nginx-module-0.62.tar.gz

或者链接:https://pan.baidu.com/s/1VOIO5SXUkwirG0_1EGBGCA     提取码:085p 

放到之前的共享文件夹(D:\zc\tools\docker\docker_study)中,这个共享文件夹是在Nginx基础(1)—— win7上配置环境  中设置的  

echo命令,是为了后面学习location方便测试,根据自己需要安装

进入正题

nginx有多种安装方式,比如源码安装,yum安装

一般使用源码安装,好处是可以指定安装位置

安装步骤:

注:一般系统中已经装了了make和g++,无须再装,我们这里不需要装g++,但需要装make
安装make:
yum -y install autoconf automake make
安装g++: 
yum -y install gcc gcc-c++ 

注:安装nginx依赖的库
yum -y install pcre pcre-devel    
yum -y install zlib zlib-devel
yum install -y openssl openssl-devel

注:安装相关命令
yum -y install wget
yum -y install tar

注:进入共享文件夹,解压echo的源码,echo是为了后面测试,根据自身需要选择是否安装
cd /docker_study
tar -zxvf echo-nginx-module-0.62.tar.gz

注:下载nginx源码
wget  http://nginx.org/download/nginx-1.9.15.tar.gz
tar -zxvf nginx-1.9.15.tar.gz
cd nginx-1.9.15
./configure   --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module  --add-module=/docker_study/echo-nginx-module-0.62
注:--prefix指定安装目录。
注:--with-http_ssl_module安装https模块。
注:如果不安装echo,可以不加--add-module=/docker_study/echo-nginx-module-0.62 

注:最后安装并且编译
make && make install

我们这里指定了安装路径为/usr/local/nginx,然后进入该目录,启动nginx

./sbin/nginx

在页面浏览器中输入http://172.17.0.2/,看到如下页面,表示nginx启动成功

nginx的主要功能和原理 nginx的作用及详解,nginx的主要功能和原理 nginx的作用及详解_nginx的主要功能和原理,第1张

五、目录结构

我们进入/usr/local/ngnx目录下

Conf 

 配置文件,最主要的配置文件nginx.con

Html  

网页文件,放静态文件的

Logs 

日志文件

Sbin 

二进制程序, 启动程序

 

这里顺便介绍一下常用命令

启停命令
./nginx -c nginx.conf     指定nginx配置文件,如果不指定,默认为NGINX_HOME/conf/nginx.conf
./nginx -s stop           停止
./nginx -s quit           退出
./nginx -s reload         重新加载nginx.conf
发送信号的方式
kill -QUIT  进程号         安全停止
kill -TERM  进程号         立即停止

六、Nginx模型

Nginx会按需同时运行多个进程:

一个主进程(master)和几个工作进程(worker),配置了缓存时,还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等

所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。

主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份(user配置项)运行。

主进程主要完成如下工作:

1. 读取并验正配置信息

2. 创建、绑定及关闭套接字

3. 启动、终止及维护worker进程的个数

4. 无须中止服务而重新配置工作特性

5. 重新打开日志文件

worker进程主要完成的任务包括:

1. 接收、传入并处理来自客户端的连接

2. 提供反向代理及过滤功能

3. nginx任何能完成的其它任务

七、nginx.conf配置文件解析

首先大致了解一下配置文件的结构

nginx的主要功能和原理 nginx的作用及详解,nginx的主要功能和原理 nginx的作用及详解_nginx_02,第2张

7.1 全局配置

#user  nobody; 
worker_processes  1;           
worker_rlimit_nofile 100000;   
#error_log  logs/error.log;  
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;     
#pid        logs/nginx.pid;
events {
use epoll;
worker_connections  1024;
}

下面解析每行配置的作用:

user:主模块命令,指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行    

worker_processes:指定Nginx要开启的进程数,一般设置为CPU核心数

error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,而crit(严重)输出日志最少,默认是error

pid: 用来指定进程id的存储文件位置

Event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。

其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选

worker_connection是设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数 max_client = worker_processes * worker_connections

进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit

7.2 应用配置

#nginx对http服务器相关属性的设置
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;
#gzip  on;  
           
#下面是server段虚拟主机的配置(可多个,对应不同虚拟主机)
server {
        //省略..... 
}
}

下面解析每行配置的作用:

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;

指定nginx访问日志的格式,可根据自己需要进行配置日志格式

sendfile        on;   

开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝

#tcp_nopush     on;

开启TCP_NOPUSH套接字(sendfile开启时有用)

#keepalive_timeout  0;

客户端连接超时时间

#gzip  on;            

设置是否开启gzip模块

以上配置,通常只需要配置一次,无需修改,下面server部分才是我们经常需要修改的地方

7.3 server配置

server {
        listen       80;   虚拟主机的服务端口
        server_name  localhost;   用来指定ip或者域名,多个域名用逗号分开
        #charset koi8-r;

        location / {        
               #地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
            root   html;                   虚拟主机的网页根目录
            index  index.html index.htm;   默认访问首页文件
        }
        #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;
        }

一个server模块 对应一个虚拟主机,我们可以配置多个,下节我们会学习重点内容 location和rewrite


https://www.xamrdz.com/lan/5ze1962496.html

相关文章: