跟Coy学运维—Nginx架构、安装、主配置文件详解

一,什么是正向代理或者反向代理                                                                                                                    

在服务器前端,加一台代理服务器,代理服务器也监听80端口上,也接收http的请求,如果允许访问就封装成别的样子然后给后端的nginx
  正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。
  反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。
  区别:
正向代理需要你主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去获取访问内容并返回;而反向代理不需要你做任何设置,直接访问服务器真实ip或者域名,但是服务器内部会自动根据访问内容进行跳转及内容返回,你不知道它最终访问的是哪些机器。
  正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;而反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。
代理服务器可以加速
 

二,什么是nginx                                                                                                                                            

Nginx是一个web服务器和方向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议
nginx的一些特性
  静态资源的web服务器,能缓存打开的文件 描述符
  http, smtp, pop3协议的反向代理服务器,缓存、负载均衡;
  支持FastCGI (fpm,LNMP)
  模块化,非DSO机制,过滤器zip,SSI及图像大小调整;
  支持SSL
  扩展功能:
  基于名称和IP的虚拟主机;
  支持keepalive
  支持平滑升级
  定制访问日志 ,支持使用日志缓冲区提高日志存储性能
  支持url rewrite
  支持路径别名
  支持基于IP及用户的访问控制
  支持速率限制,支持并发数限制
 

三,nginx架构                                                                                                                                              

 
   nginx启动时,会生成两种类型的进程,一个是主进程(Master),一个或多个工作进程(Worker)。主进程并不处理网络请求,主要负责调度工作进程,也就是图示的三项:加载配置、启动工作进程及非停升级。所以,nginx启动以后,查看操作系统的进程列表,我们就能看到至少有两个nginx进程。事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports。
每一个缓存都会有存活期限,cache loader是加载缓存  cache manager清理缓存
支持一些高级的io机制,
 
一个master进程,生成一个或多个worker
        事件驱动: epoll(边缘触发)
        消息通知:select, poll, rt signals (复用器)
        支持sendfile, sendfile64
        支持AIO
        支持mmap(内存映射)
 
nginx: 非阻塞、事件驱动、一个master生成一个或多个worker, 每个worker响应n个请求
 
sendfile解析
一个web服务器
如果想要从内核内存直接发送给客户端
 
那么这种机制就叫 sendfile,这个机制httpd也支持
 

四,模块类型及http安装方法:                                                                                  

        核心模块
        Standard HTTP modules(标准http协议模块)
        Optional HTTP modules(可选的http协议模块)
        Mail modules(邮件模块)
        3rd party modules(第三方模块)
 
安装方法
yum groupinstall "Development Tools" "Server Platform Development" -y
yum -y install pcre-devel
groupadd -r nginx
useradd -g nginx -r nginx
 
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
 
mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi}
 
启动
/usr/local/nginx/sbin/nginx  
查看监听端口
这个就是主和子进程
 
配置文件:
main配置段是全局配置
event定义event模型工作特性
http:{}:定义http协议的相关
配置指令:要以分号结尾
支持使用自定义变量,
    内置变量
    自定义变量
主配置段的指令的类别:
            用于调试、定位问题
            正常运行必备的配置
            优化性能的配置
            事件相关的配置
 
nginx官方文档各模块查询方法
HOW-TO是编译安装nginx
Development是开发人员
Modules reference是模块
 

核心模块一些指令,可写在配置文件中
 
 

五,主配置段的指令:                                                

正常运行的必备配置:

1,user USERNAME [GROUPNAME] #以哪个用户的身份来运行work进程的,或者某个组,注意组名和用户名要一样
要是编译安装user是注释的
 
2,pid 指明pid的路径
编译安装pid注释掉的。指定nginx守护进程的pid文件
 
3,worker_rlimit_nofile 
每个用户最大能打开1024个文件,假设一万的并发连接,需要维持一万个套接字文件。worker能够接受更多的并发连接,用户能够同时打开更多的并发链接
指定所有worker进程所能够打开最大文件句柄数
worker_rlimit_core
指明这个进程所使用的核心数量,或者核心文件的最大体积大小,用来核心文件的最大大小,所有的worker进程加起来能够使用总体的核心文件大小
 

性能优化相关的配置:

1,worker_processes
worker进程的个数,通常应该略少于cpu物理核心数:现在自动打开自动判断
 
 
2,worker_cpu_affinity cpumask(cpu掩码)

cpumask假设,worker_cpu_affinity 0000001 0000002 00000003
3,timer_resolution
#计时器解析度
 
作用
任何一个请求到达nginx的时候,nginx就响应,响应完后记录日志,日志中记录时间,一旦有用户请求到达,我们处理请求响应要记录日志的话,必须要获取当前的系统时间,并记录在日志文件中,怎么获取系统时间,就通过 gettimeofday来获取时间,然后把结果保存在日志文件中,如果时间解析度过大的话带来结果就是一秒钟就发起1000次的调用,时间解析度越低,精准就越低,为了要求性能,所以对时间解析度要低的
 
4,worker_priority
指明worker进程的优先级,worker进程的nice值:默认是0
-20,19
100,139
 
只有管理员才能调优先值,好在启动的时候是用root用户启动的,只不过运行woker时候他们才会由nginx普通用户来运行它
 
 

事件相关的配置

1,accept_mutex
#互斥锁
 
打开这个功能以后,会让多个worker轮流的序列化的响应新请求,一个挨着一个的,否则的话随机
 
accept_mutex_delay
如果某一个worker正在尝试接收用户请求的时候,其他的用户请求要延迟多长时间的等待,一个请求来了不能抢,轮到谁谁来响应
但是这个worker有可能忙不过来,延迟多长时间
 
2,lock_file
就是互斥锁锁文件路径
 
3,use [epoll|rtsig|select|poll]
定义使用的事件模型的,建议让nginx自行选择
在 linux上,能用epoll就不用select,epoll才是真正支持事件驱动机制
 
4, worker_connections
一个worker进程所能够接收的最大连接数

 worker_connections 10240;那么总共有多少并发,是worker_processes*worker_connections

 

用于调试,定位问题:

./configure --with-debug
1,daemon(on|off)
是否一守护进程的方式运行nginx:调试应该设置为off
 
2,master_process(on|off)
是否以master/worker模型来运行nginx;调试时候设为off,  
 
3,error_log
格式:日志记录位置+级别,
若要使用debug级别,需要在编译nginx时候要./configure --with-debug
 
总结:常用需要进行调整的参数worker_processes,worker_connections worker_cpu_affinity worker_priority
 
nginx命令
-?,-h : 打开帮助信息
-v : 显示版本信息并退出
-V : 显示版本和配置选项信息,然后退出
-t : 检测配置文件是否有语法错误,然后退出
-q : 在检测配置文件期间屏蔽非错误信息
-s signal : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新加载配置文件)
-p prefix : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/)
-c filename : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
-g directives : 设置配置文件外的全局指令
 

猜你喜欢

转载自www.cnblogs.com/Coy-chen/p/9048537.html
今日推荐