一,什么是正向代理或者反向代理
在服务器前端,加一台代理服务器,代理服务器也监听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 : 设置配置文件外的全局指令