1. 概念

1.1. 消息通知机制:同步synchronous,异步asynchronous

  同步:等待对方返回信息

  异步:被调用者通过状态、通知或回调通知调用者

    状态:调用者每隔一段时间就需要检查一次(盲等);

    通知:调用着需要每隔一段时间检查一下请求是否被回应(标志位被置为ready);

    调用:调用者留下联系方式,如果请求ready就会被通知

1.2. 调用者等待结果返回之前所处的状态:阻塞:block,非阻塞:noblock

  阻塞:调用结果返回之前,调用者会被挂起;

  非阻塞:调用结果返回之前,调用着不会被挂起;

1.4. 网络IO:本质是socket读取;磁盘IO:本质是流

1.5. IO过程:

  第一步:数据先加载至内核内存空间(缓冲区),这是等待数据准备完成的阶段

  第二步:数据从内核缓冲区复制到用户空间的进程的内存中去,数据从内核复制到进程

1.3. I/O模型:同步阻塞,同步非阻塞,I/O复用(IO multipexing),信号驱动I/O(Signal Driver IO),异步I/O(Asynchronous IO)

1.4. Nginx特性:

  模块化设计,较好的扩展性;

  高可靠性:master/worker

  支持热部署

    (不停机更新配置文件,更换日志文件,更新服务器程序版本)

  低内存消耗

    (10000个keep-alive链接模式下的非活动连接仅消耗2.5M内存)

  event-driven,alo,mmap

1.5.基本功能:

  静态资源的web服务器

  http协议反向代理服务器

  pop3/imap4协议反射代理服务器

  FastCGI(Lnmp),uWSGI等协议;

  模块化(非DSO),著名有zip,SSL

1.6. web服务器相关功能:虚拟主机,keepalive,访问日志,url rewrite,路径别名,基于IP及用户的访问控制,支持速率限制

1.7. nginx的程序架构

  master/worker

    一个master进程,可生成一个或多个worker进程;

      master:加载配置文件、管理worker进程、平滑升级

      worker:http服务、http代理、fastcgi代理

2. 版本:ngxin 1.8 RHEL7

3. 安装

3.1. OS安装:略

3.2. Nginx安装

3.2.1. rpm/yum安装: yum install ngxin

3.2.2. 编译安装

3.2.2.1. 依赖的软件包:yum groupinstall -y "Development Tools" "Server Platform Development" openssl-devel pcre-devel zlib-devel

3.2.2.2. 编译选项详解

./configure \
--prefix=/usr/local/ \ #安装路径
--sbin-path=/usr/sbin/nginx \ #执行程序路径
--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/nginx.pid \ #pid文件位置
--lock-path=/var/lock/nginx.lock \ #锁文件位置
--http-client-body-temp-path=/var/tmp/nginx/client/ \ #客户端请求的临时文件
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \ #作为代理的临时文件
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ #作为fastcgi临时文件
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ #作为uwsgi的临时文件
--http-scgi-temp-path=/var/tmp/nginx/scgi \ #作为scgi的临时文件
--user=nginx \ #使用哪个用户来运行worker进程
--group=nginx \ #使用哪个组来运行worker进程
--with-http_ssl_module \ #模块
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \

  

3.2.2.3. 配置文件:

主配置文件:nginx.conf,也可以使用include conf.d/*.conf, fastcgi,scgi,uwscgi的相关配置,mime.types

配置文件结构:

  main block:全局配置

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

  http{}:http协议的相关配置

  mail{}:mail相关的配置

  http{

    server{

        

    }

常用配置:

#正常运行必备的配置
user nginx nginx; #用于指定运行worker进程的用户和组
pid /var/log/nginx/nginx.pid; #指定nginx进程pid文件路径
worker_rlimit_nofile number #单个worker进程所能够打开的最大文件数 #性能优化相关的配置
worker_processes 2; #worker的进程数,通常应该为CPU的核心数或核心数减1,也可以使用auto
worker_cpu_affinity 0000 0001; #绑定CPU,使用cpumask表示
worker_priority -5; #-5为nice值 #调试、定位问题
daemon on|off; #是否以守护进程方式启动nginx进程,调试时候改为off
master_process on|off; #是否以master/worker模式进程,调试时候改为off
error_log file | stderr|syslog:server=address[,parameter=value]|memory:size[debug|info|notice|warn|error|crit|alert|emerg]; #错误日志文件的记录方式,及其日志级别;debug级别依赖于configure时--with-debug选项 events {
use epoll; #指定并发连接请求时使用的方法
multi_accept on;
accept_mutex on | off; #默认启用,表示用于让多个worker轮流地、序列化地相应请求
worker_connections 51200; #每个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 /var/log/nginx/access.log main;
access_log syslog:server=10.26.2.65; server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120; gzip on; include /usr/local/nginx/conf.d/*.conf;
} server{
##定义套接字相关配置 #监听80端口
#listen address[:port][default_server][ssl][backlog=number][rcvbuf=size][sndbuf=size];
#listen port [default_server][ssl];
#listen unix:path[default_server][ssl]
listen 80; default_server; #默认虚拟主机;
ssl; #限制只能通过ssl连接提供服务;
backlog; #后援队列的长度
rcvbug; #接收缓冲区大小
sndbuf; #发送缓冲区大小 #指明当前server的主机名,后可跟一个或空白字符分隔的多个主机
#支持使用*任意长度的任意字符;
#支持~起始的正则表达式模式字符串
server_name HOSTNAME; #应用策略
#(1)首先精确匹配,www.example.com
#(2)左侧*通配符匹配,*.example.com
#(3)右侧*通配符匹配,www.example.*
#(4)正则表达式模式匹配,~^.*\.example\..*$ ##定义路径相关配置
root /PATH/TO/DOCUMENTROOT; #设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径
#可用上下文:http tcp_nodelay; #对keepalive模式下的连接是否启用tcp_nodelay选项;
tcp_nopush; #默认为off sendfile on| off; #默认为关闭 #根据用户请求的URI来匹配定义的location,匹配到时,此请求将被相应的location块中的指令所处理
# =:URI精确匹配
# ~:正则表达式模式匹配,区分字符大小写
# ~*:做正则表达式模式匹配,不区分字符大小写
# ^~:对URI的左半部分做匹配检查,不区分字符大小写
# 匹配优先级: =、^~、~/~*、不带符号
location [ = | ~ | ~* | ^~ ] url {...}
location @name{...} #定义路径别名,文档映射的一种机制;仅能用于location上下文;
#root指令:指定的路径对应于location中的/uri/左侧的/
#alias指令:指定的路径对应于locaation中的/uri/右侧的/
#http://www.example.com/bbs/a.jpj
#location /bbs/ {alias /web/forum} ==> /web/forum/a.jpg
#location /bbs/ {root /web/forum} ==> /web/forum/bbs/a.jpg
alias path; index;#设置默认主页可用位置:http、server、location error_page code...[=[response]] url; #根据用户请求的资源的http相应的状态码实现错误 ## 定义客户端请求的相关配置
keepalive_timeout timeout [header_timeout] #设定保持连接的超时时常,0表示禁止长连接;默认为75s
keepalive_requests number; #在一次长连接上所允许请求的资源的最大数量。默认为100;
keepalive_disable none | browser ...; #对那种浏览器禁用长连接;
send_timeout time; #向客户端发送相应报文的超时时长;特别地,是指两次写操作之间的间隔时长;
client_body_buffer_size size; #用于接收客户端请求报文的body部分的缓冲区大小;默认为16K;超时此大小时;将缓存到磁盘上
client_body_temp_path path [level1[level2[level3]]] #设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量 00-ff ##对客户的请求进行限制的相关配置
limit_rate rate; #限制相应给客户端的传输速率,单位是bytes/second,0表示无限制
limit_except method ...{...}; #对指定的请求方法之外的其他方法的使用客户端 ##文件操作优化的配置
alo on|off|threads[=pool]; 是否启用alo功能 directio size|off;
open_file_cache off;
#nginx可以缓存三种信息
#文件的描述符、文件大小和最近一次的修改时间
#打开的目录的结构
#没有找到的或者没有权限的文件的相关信息
#max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;
#inactive=time:缓存项的超时时长,在此处指定的时长内未被命中的缓存项即为非活动项
open_file_cache max=N[inactive=time]; open_file_cache_error on|off; #是否缓存查找时发生错误的一类的信息
open_file_cache_min_user number; #在open_file_cache指令的inactive参数指定的时长内,至少命中此处指定的次数方可不被归类到非活动项;
open_file_cache_valid time; #缓存项有效性的检查频率;默认是60s ##ngx_http_access_module模块;实现基于IP的访问控制功能 #可用上下文:http,server,location,limit_except
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all; ##ngx_http_auth_basic_module
auth_basic string | off; #使用basic机制进行用户认证
auth_basic_user_file file; #认证用的账号密码文件 ##ngx_http_stub_status_module模块,用于输出nginx的基本状态信息 Active connection:处于活动状态的客户端连接的数量;
accepts:已经接受的客户端请求的总数;
handled:已经处理完成的客户端请求的总数;
requests:客户端发来的总的请求数;
reading:处于读取客户端请求报文首部的连接数
writing:处于想客户端发送相应报文过程中的连接数;
waiting:处于等待客户端发出请求的空闲连接数; ##ngx_http_referer_module模块
# 定义合法的referer数据
# none:请求报文首部没有referer首部
# blocked:请求报文的referer首部没有值
# server_names:其值是主机名
# arbitrary string:直接字符串,可以使用*作为通配符
# regular expression:被指定的正则表达式模式匹配到的字符串;要使用-起始
valid_referers none | blocked | server_names | string ...;
}

  

  

【Linux】【Services】【Web】Nginx基础的更多相关文章

  1. linux web服务基础知识,dns

    #web服务基础知识c/s 客户端/服务器b/s 浏览器/服务器 nginx   >   web  server  服务端浏览器  >    web  client  客户端 #dns解析 ...

  2. Linux - nginx基础及常用操作

    目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...

  3. 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...

  4. day63:Linux:nginx基础知识&nginx基础模块

    目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...

  5. Linux下Nginx基础应用

    Nginx简介: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.其将源代码以类BSD许可证的形式发布,因 ...

  6. Linux学习笔记:nginx基础

    nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP pro ...

  7. Linux最常用的基础命令

    Linux最常用的基础命令个人总结 计算机基础知识: 32bit和64bit系统的区别.系统运行机制 32bit=内存的最大寻址空间是2**32,也就是说最大只能使用4GB的内存64bit=内存的最大 ...

  8. Linux最常用的基础命令 上篇

    Linux最常用的基础命令个人总结 计算机基础知识 32bit和64bit系统的区别.系统运行机制 1989年python 诞生 C语言是编译型的语言,不太支持跨平台 Django 江购 32bit= ...

  9. Web服务基础介绍

    Web服务基础介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正常情况下的单次web服务访问流程 博主推荐阅读: https://www.cnblogs.com/yinzh ...

  10. Nginx基础优化

    Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...

随机推荐

  1. yum设置取消代理

    unset http_proxy unset https_proxy 暂时取消代理,若永久取消代理,需要修改/etc/yum.conf 去掉 proxy=http://proxyhost:8080

  2. [cf566C]Logistical Questions

    记$d(x,y)$为$x$到$y$的距离,$cost_{x}=\sum_{i=1}^{n}w_{i}d(x,i)^{\frac{3}{2}}$为$x$的代价 取$C$为足够大量,对于一条边权为$w$的 ...

  3. [hdu7097]Just a Data Structure Problem

    (四边形不等式的套路题) 对于某一组$a_{i}$,显然可以区间dp,设$f_{l,r}$表示区间$[l,r]$​的答案,则转移即$$f_{l,r}=\begin{cases}0&(l=r)\ ...

  4. [hdu7065]Yinyang

    将一个格子看作一个节点,相邻(有公共边)的同色格子之间连边,那么由前两个条件即要求图恰被分为两个非空连通块(由于$n,m\ge 3$,显然不能不使用某种颜色) 下面,来分析图中的简单环,其对应于网格图 ...

  5. [hdu6989]Didn't I Say to Make My Abilities Average in the Next Life?!

    显然问题即求$\frac{\sum_{x\le l\le r\le y}(\max_{l\le i\le r}a_{i}+\min_{l\le i\le r}a_{i})}{(y-x+2)(y-x+1 ...

  6. [noi713]魔法

    分治,维护一个dp数组,当递归到区间[l,r]时,需要保证这个dp数组维护的是除去[l,r]以外的dp数组维护其实很简单,就是递归左区间是先将右区间加入,然后再将左区间加入(要先复原)然后递归右区间即 ...

  7. 5、使用ZSetOperations(有序)操作redis(Zset有序集合)

    文章来源:https://www.cnblogs.com/shiguotao-com/p/10564454.html 方法 c参数 s说明   void set(K key, V value); ke ...

  8. nginx安装与配置1-nginx安装

    反向代理: 客户端不需要配置就可以访问,将请求发送到反向代理服务器, 由反向代理服务器选择目标服务器获取数据,再返回客户端,对外暴露代理服务器地址,隐藏真实ip 负载均衡: 客户端请求nginx等服务 ...

  9. Linux排序数据

    1.sort 默认是按照字符大小来排序,如果要按照数字大小排序,需要加参数-n,-M按月排序 如:sort text.txt按字符大小排序 sort -n text.txt 按照数字大小排序 sort ...

  10. [源码解析] PyTorch 分布式 Autograd (1) ---- 设计

    [源码解析] PyTorch 分布式 Autograd (1) ---- 设计 目录 [源码解析] PyTorch 分布式 Autograd (1) ---- 设计 0x00 摘要 0x01 分布式R ...