Nginx (“engine x”) 是一个一款轻量级高性能的Web服务器、反向代理服务器,也是一个IMAP/POP3/SMTP服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用
Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。
Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作
下载地址,官网下载: http://nginx.org/en/download.html
启动方式:start nginx 或者 nginx.exe
停止:nginx.exe -s stop 或者 nginx.exe -s quit
重新载入Nginx:nginx.exe -s reload
测试配置文件 :nginx.exe -t -c conf/nginx.conf
载入指定配置文件启动 : start nginx.exe -c conf/nginx.conf
下载地址,官网下载: http://nginx.org/en/download.html
解压后安装必须环境
安装gcc
install gcc-c++
安装PCRE pcre-devel ,zlib ,Open SSL
install pcre pcre-devel , zlib zlib-devel,openssl openssl-devel
然后直接再解压后的包里输入 make 编译,成功后就输入make install就好了。
启动:进入解压后的sbin 输入 ./nginx
关闭: ./nginx -s quit 或者 ./nginx -s stop
重启:./nginx -s reload
查看nginx进程: ps aux|grep nginx
nginx.conf文件结构
... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { } location [PATTERN] { ... } } server { } ... #http全局块 }
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入数等。
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
配置虚拟主机的相关参数,一个http中可以有多个server。
配置请求的路由,以及各种页面的处理情况
Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端
配置如下
server { listen80; # 端口号 server_name:ip地址 location / { root /usr/share/nginx/html; # 本地静态文件路径 } }
代理就是一个代表、一个渠道,此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户
它代理的是客户端,代客户端发出请求,用途
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
反向代理的好处:反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
正向代理的客户端和代理处在同一局域网中,反向代理服务端和代理服务处在同一局域网中,如图:
Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。配置:
upstream myserver #定义的服务器名 { server ip+port; #服务器1 server ip+port backup; #服务器2 热备 } location / { proxy_pass http://myserver; #请求转向myserver }
常用的负载均衡策略:
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号
通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问
由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器
静态资源: html、js、css、图片、音乐、视频等。
动态资源: 我的理解就是我们所说的接口,jsp、themleaf和freemark这些模板引擎也属于动态资源。
动态请求和静态请求使用不同的域名。比如所有的静态资源都使用静态资源域名来访问,所有的接口都使用动态资源的域名来请求
优点:扩展性比较强,静态资源是什么都可以。
缺点:需要配置两个server, 存在跨域问题,所有的html全靠ajax请求来请求接口,后端域名和前端不一致导致跨域问题。
这个只配置一个server,然后配置两个location,一个通过正则表达式拦截静态资源,还有一个拦截uri的接口请求有指定字符的。
优点:不存在跨域问题。
缺点:扩展性太差,静态资源的类型不可确定,每增加一种类型都需要重新修改配置文件并且重启nginx。
nginx配置文件:
########### 每个指令必须有分号结束。################# #user administrator administrators; #配置用户或者组,默认为nobody nobody。 #worker_processes 2; #允许生成的进程数,默认为1 #pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址 error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大连接数,默认为512 } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 } error_page 404 https://www.baidu.com; #错误页 server { keepalive_requests 120; #单连接请求上限次数。 listen 4545; #监听端口 server_name 127.0.0.1; #监听地址 location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页 proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip } } }
初学者写的不好轻点喷!谢谢!