首先咱们先了解一下什么是正向代理,以下图所示正向代理,代理的是客户端的对服务器方发起的访问,能够起到隐藏客户端IP等信息的做用。javascript
反向代理则表示代理的是服务器端内容,web服务器并无直接暴露到公网上而是经过代理服务才能访问到真正的web服务器。php
nginx的负载均衡策略有两种,一种是内置策略,还有一种是扩展策略。其中内置策略分为轮询、加权轮询、IP hash。css
内置策略:html
轮询:是指在因此提供服务的服务器作轮询提供服务。java
加权轮询:根据全部提供服务的服务器权重进行轮询。nginx
ip hash:对客户端请求ip进行hash操做, 而后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,能够解决session不共享的问题。 web
Nginx能够对不一样的文件作不一样的缓存处理,配置灵活,而且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容能够的进行增删管理 。后端
conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。浏览器
#user nobody; 配置用户或用户组,一般为启动nginx的用户组 worker_processes 1; #容许生成的线程数量,一般配置成与cpu数量相同 #error_log logs/error.log info; 指定错误日志路径和级别,debug|info|notice|warn|error|crit|alert|emerg #pid logs/nginx.pid; #指定nginx进程运行pid events { accept_mutex on; #设置网路链接序列化,防止惊群现象发生,默认为on;惊群现象:一个网路链接到来,多个睡眠的进程被同事叫醒,但只有一个进程能得到连接,这样会影响系统性能。 multi_accept on; #设置一个进程是否同时接受多个网络链接,默认为off use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #单个worker_processes进程的最大链接数,默认为512 #最大链接数为worker_processes与worker_connections乘积,在设置了反向代理的状况下最大链接数为前面乘积以后除以4(经验值)。 #设置最大连接数时不该大于系统内打开的最大文件数,系统能打开的最大文件数和系统内存成正比,通常状况下1G内存大约能够打开的文件数为10万左右。 } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #自定义日志格式 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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件, #对于普通应用,必须设为 on, #若是用来进行下载等应用磁盘IO重负载应用,可设置为 off sendfile on; sendfile_max_chunk 100k; #每一个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 #tcp_nopush on; keepalive_timeout 65; #链接超时时间,默认为75s #gzip on; #开启gzip压缩 #负载均衡配置示例默认是以轮询 upstream backend { #ip_hash; server 192.168.1.101:8090; server 192.168.1.101:8080; } #虚拟主机配置 server { listen 80; #监听80端口 server_name www.nginx.cn; #charset koi8-r; #access_log logs/host.access.log main;#该虚拟机下请求日志 #监听根路劲 location / { proxy_pass http://backend; } error_page 500 502 503 504 /50x.html; #错误页面 location = /50x.html { root html; } #静态文件,nginx本身处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { #过时30天,静态文件不怎么更新,过时能够设大一点, #若是频繁更新,则能够设置得小一点。 expires 30d; } #禁止访问 .htxxx 文件 location ~ /.ht { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 deny all; } } }
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;缓存
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态,成功是200;
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面连接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}
通用匹配:“/”
精确匹配:“=”
字符串匹配:字符串匹配开头“ ^~ ”
正则匹配:区分大小写匹配“~”;不区分大小写匹配“~*”;区分大小写不匹配“!~”;不区分大小写不匹配“!~*”。
精确匹配 > 字符串匹配( 长 > 短 [ 注: ^~ 匹配则中止匹配 ]) > 正则匹配( 上 > 下 )
精确匹配只能命中1个
字符串匹配使用匹配最长的匹配结果
正则匹配按照location定义的顺序进行匹配,先定义具备高优先级
#直接匹配网站根,经过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。 #这里是直接转发给后端应用服务器了,也能够是一个静态首页 # 第一个必选规则 location = / { proxy_pass http://tomcat:8080/index } # 第二个必选规则是处理静态文件请求,这是nginx做为http服务器的强项 # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 location ^~ /static/ { # 请求/static/a.txt 将被映射到实际目录文件: /webroot/res/static/a.txt root /webroot/res/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; } #第三个规则就是通用规则,用来转发动态请求到后端应用服务器 #非静态文件请求就默认是动态请求,本身根据实际把握 #毕竟目前的一些框架的流行,带.php,.jsp后缀的状况不多了 location / { proxy_pass http://tomcat:8080/ }