标签归档:nginx

淘宝Web服务器Tengine正式开源:Nginx定制版

淘宝Web服务器Tengine正式开源:Nginx定制版

站长之家()12月5日报道:日前,由淘宝核心系统团队定制和开发的淘宝Web服务器Tengine正式开源,并对外提供下载。

Tengine是由淘宝核心系统部基于Nginx开发的Web服务器淘宝Web服务器Tengine正式开源:Nginx定制版hao123网站大全,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网hao123网站大全,淘宝商城等得到了很好的验证。而它的最终目标是打造一个高效、稳定、安全、易用的 Web 平台。

据淘宝核心系统团队称hao123网站大全,由于每天淘宝网的PV超过了几十亿。大压力的访问,对淘宝网的Web服务器提出了严苛的要求。经过一系列的对比,团队最终选择了Nginx作为Web服务器,因为它性能高,又非常节省资源(CPU和内存)万发商务移动站,并且有足够的灵活性。

淘宝核心系统团队表示打造最安全的nginx web服务器,随着对Nginx的越来越了解,团队发现Nginx本身已经不能够完全满足淘宝的需求打造最安全的nginx web服务器,所以就开始对Nginx核心进行定制和开发。考虑到开发功能中的一些对其它的互联网用户也可能有用处,所以淘宝核心系统团队就想到了把这些公用的功能开源出来。淘宝网是开源软件的用户和受益者,所以他们也想成为开源软件的贡献者。这就是他们决定开源Tengine的原因。

Tengine基于最新的Nginx稳定版(Nginx-1.0.10),在它的基础上开发了一些功能和做了一些bug修复,比如:

1、组合多个CSS、文件的访问请求变成一个请求;

2、支持管道和syslog形式的日志和抽样;

3、自动根据CPU数目设置亲缘性;

4、监控系统的负载和资源占用从而对系统进行保护;

5、显示对运维人员更友好的出错信息,便于定位出错机器;

6、更强大的访问速度限制模块;

7、模块hao123网站大全,程序崩溃的时候可以显示出错的调用栈;

8、根据文件类型设置过期时间;

基本上,Tengine可以被看作一个更好的Nginx,或者是Nginx的超集。可以在这里下载:

818114文章来源于互联网,本网转载出于传递更多信息和动漫学习之目的,并不意味着赞同其观点或证实其内容的真实性,如有侵权请通知我们立刻删除!

如何针对 Nginx 为基础的服务进行容器优化

如何针对 Nginx 为基础的服务进行容器优化

曾经写过一篇使用 Docker 、Traefik 以及 Nginx 创建自动索引站点的文章,本篇内容将聊聊如何进行优化。

包含内容:剥离容器配置中的变量、如何对容器进行健康检查、如何限制容器日志尺寸等。

剥离环境变量

前文的 docker-compose.yml 中,许多内容是直接写死在文件中的,随着配置文件越来越“复杂”、同类的服务启动越来越多万发商务移动站hao123网站大全,我们需要将一些基础的配置剥离出来,以方便后续的维护。

nginx:
    image: nginx:1.15.7-alpine
    labels:
      - "traefik.frontend.rule=Host:demo.soulteary.com"
    extra_hosts:
      - "demo.soulteary.com:127.0.0.1"

比如“域名”、“镜像名称”等信息,我们可以从上面配置文件中进行剥离,剥离后的配置如下:

nginx:
    image: ${NGX_IMAGE}
    labels:
      - "traefik.frontend.rule=Host:${NGX_DOMAIN}"
    extra_hosts:
      - "${NGX_DOMAIN}:127.0.0.1"

为了让 docker-compose.yml 能够像之前一样正常工作,我们需要创建一个 .env 文件nginx后端服务器监控hao123网站大全,存放刚刚剥离的信息。

NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com

后续这类信息多起来之后,可以通过配置系统接口获取,或者让CD系统自动生成。

支持 HTML 文件预览或直接下载

Nginx 默认配置中,HTML 类型文件将会被渲染成我们熟悉的网页,这显然不符合 auto index 的需求,如果能够像 TEXT 纯文本一样直接在浏览器中进行预览或许会更好。

修改 Nginx 使用的 mime.types 文件nginx后端服务器监控,将 HTML 类型文件进行修改如何针对 Nginx 为基础的服务进行容器优化hao123网站大全,原始文件如:

text/html                                       html htm shtml;

需要修改为:

text/plain                                       html htm shtml;

如果你需要用户在访问页面时,能够直接下载文件,那么可以将 text/plain 修改为 /octet-stream。

容器服务监控检查

为了容器中的应用运行结果更加可靠,我们需要让容器进行健康检查。

因为本例中的内容是动态生成的,虽然程序效率很高,但是还是建议让检查工具请求的内容尽可能更简单一些,为此我们定义一个新的路径 /health-checkhao123网站大全,并将它添加到 nginx.conf 配置中:

location = /health-check {
    access_log  off;
    default_type text/html;
    return      200 'alive';
}

当健康检查器或者用户访问这个地址时,将会得到“alive”的结果。

接着,在 docker-compose.yml 中定义检查器:

healthcheck:
  test: ["CMD-SHELL", "wget -q --spider --proxy off localhost/health-check || exit 1"]

当你执行 docker ps 时,终端输出的文本将会有一些不同。

CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                            PORTS                                                                              NAMES
d9903d19aae7        nginx:1.15.8-alpine                        "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds (health: starting)   80/tcp

当程序完全运行之后,Up 4 seconds (health: ) 将会变更为 Up 10 seconds (healthy) 。

未来在调试/查看容器服务状况时,辨别服务运行状态就又有了一个新的依据啦。

约束日志文件尺寸

搭建在公网上的应用,除了会被用户访问之外,还可能遭到扫描器问候、恶意攻击的海量请求。

这时,如果不约束日志文件尺寸,很容易将磁盘占满,造成其他麻烦。

除了使用 处理日志外,更简单的方案是在 docker-compose.yml 中对日志尺寸进行限制hao123网站大全,将下面的内容添加到配置文件中。

logging:
    driver: "json-file"
    options:
        max-size: "10m"

818114文章来源于互联网,本网转载出于传递更多信息和动漫学习之目的,并不意味着赞同其观点或证实其内容的真实性,如有侵权请通知我们立刻删除!

nginx正则配置解释多用于伪静态规则

 1、^: 匹配字符串的开始位置; 2、 $:匹配字符串的结束位置;   3、.*:   .匹配任意字符,*匹配数量0到正无穷;   4、\. 斜杠用来转义,\.匹配 .    特殊使用方法,记住记性了;   5、(值1|值2|值3|值4):或匹配模式,例:(jpg|gif|png|bmp)匹配jpg或gif或png或bmp   6、i不区分大小写   一.正则表达式匹配,其中:   * ~ 为区分大小写匹配   * ~* 为不区分大小写匹配   * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配   二.文件及目录匹配,其中:   * -f和!-f用来判断是否存在文件   * -d和!-d用来判断是否存在目录   * -e和!-e用来判断是否存在文件或目录   * -x和!-x用来判断文件是否可执行   三.rewrite指令的最后一项参数为flag标记,flag标记有:   1.last    相当于apache里面的[L]标记,表示rewrite。   2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。   3.redirect  返回302临时重定向,浏览器地址会显示跳转后的URL地址。   4.permanent  返回301永久重定向,浏览器地址会显示跳转后的URL地址。       使用last和break实现URI重写,浏览器地址栏不变。而且两者有细微差别,使用alias指令必须用last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{……}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。   例如:如果我们将类似URL/photo/123456 重定向到/path/to/photo/12/1234/123456.png   rewrite “/photo/([0-9]{2})([0-9]{2})([0-9]{2})”/path/to/photo/$1/$1$2/$1$2$3.png ;       四.NginxRewrite 规则相关指令       1.break指令   使用环境:server,location,if;   该指令的作用是完成当前的规则集,不再处理rewrite指令。       2.if指令   使用环境:server,location   该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。       3.return指令   语法:returncode ;   使用环境:server,location,if;   该指令用于结束规则的执行并返回状态码给客户端。   示例:如果访问的URL以”.sh”或”.bash”结尾,则返回403状态码   location ~ .*\.(sh|bash)?$   {   return 403;   }       4.rewrite 指令   语法:rewriteregex replacement flag   使用环境:server,location,if   该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句,示例如下:   if( $host ~* www\.(.*) )   {   set $host_without_www $1;   rewrite ^(.*)$  http://$host_without_www$1permanent;   }       5.Set指令   语法:setvariable value ; 默认值:none; 使用环境:server,location,if;   该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。   示例:set$varname “hello world”;       6.Uninitialized_variable_warn指令   语法:uninitialized_variable_warnon|off   使用环境:http,server,location,if   该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。       五.Nginx的Rewrite规则编写实例   1.当访问的文件和目录不存在时,重定向到某个php文件   if( !-e $request_filename )   {   rewrite ^/(.*)$ index.php last;   }       2.目录对换 /123456/xxxx  ====>  /xxxx?id=123456   rewrite ^/(\d+)/(.+)/  /$2?id=$1 last;       3.如果客户端使用的是IE浏览器,则重定向到/ie目录下   if( $http_user_agent  ~ MSIE)   {   rewrite ^(.*)$ /ie/$1 break;   }       4.禁止访问多个目录   location ~ ^/(cron|templates)/   {   deny all;   break;   }       5.禁止访问以/data开头的文件   location ~ ^/data   {   deny all;   }       6.禁止访问以.sh,.flv,.mp3为文件后缀名的文件   location ~ .*\.(sh|flv|mp3)$   {   return 403;   }       7.设置某些类型文件的浏览器缓存时间   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$   {   expires 30d;   }   location ~ .*\.(js|css)$   {   expires 1h;   }       8.给favicon.ico和robots.txt设置过期时间;   这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志   location ~(favicon.ico) {   log_not_found off;   expires 99d;   break;   }   location ~(robots.txt) {   log_not_found off;   expires 7d;   break;   }       9.设定某个文件的过期时间;这里为600秒,并不记录访问日志   location ^~ /html/scripts/loadhead_1.js {   access_log  off;   root /opt/lampp/htdocs/web;   expires 600;   break;   }       10.文件反盗链并设置过期时间   这里的return412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求   “rewrite ^/ http://img.zzm8.com/leech.gif;”显示一张防盗链图片   “access_log off;”不记录访问日志,减轻压力   “expires 3d”所有文件3天的浏览器缓存       location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {   valid_referers none blocked *.zzm8.com*.zzm8.com localhost 208.97.167.194;   if ($invalid_referer) {   rewrite ^/ http://img.zzm8.com/leech.gif;   return 412;   break;   }   access_log  off;   root /opt/lampp/htdocs/web;   expires 3d;   break;   }       11.只允许固定ip访问网站,并加上密码       root /opt/htdocs/www;   allow  208.97.167.194;    allow  222.33.1.2;    allow  231.152.49.4;   deny  all;   auth_basic “C1G_ADMIN”;   auth_basic_user_file htpasswd;       12将多级目录下的文件转成一个文件,增强seo效果   /job-123-456-789.html 指向/job/123/456/789.html       rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;       13.文件和目录不存在的时候重定向:       if (!-e $request_filename) {   proxy_pass http://127.0.0.1;   }       14.将根目录下某个文件夹指向2级目录   如/shanghaijob/ 指向 /area/shanghai/   如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/   rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;   上面例子有个问题是访问/shanghai时将不会匹配   rewrite ^/([0-9a-z]+)job$ /area/$1/ last;   rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;   这样/shanghai 也可以访问了,但页面中的相对链接无法使用,   如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。   那我加上自动跳转也是不行咯   (-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果   if (-d $request_filename){   rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent;   }   知道原因后就好办了,让我手动跳转吧   rewrite ^/([0-9a-z]+)job$ /$1job/permanent;   rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;       15.域名跳转   server   {   listen      80;   server_name  jump.zzm8.com;   index index.html index.htm index.php;   root  /opt/lampp/htdocs/www;   rewrite ^/ http://www.zzm8.com/;   access_log  off;   }       16.多域名转向   server_name  www.zzm8.comwww.zzm8.com;   index index.html index.htm index.php;   root  /opt/lampp/htdocs;   if ($host ~ “linuxidc\.net”) {   rewrite ^(.*) http://www.zzm8.com$1permanent;   }       六.nginx全局变量   arg_PARAMETER    #这个变量包含GET请求中,如果有变量PARAMETER时的值。   args                    #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;   binary_remote_addr #二进制的客户地址。   body_bytes_sent    #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。   content_length    #请求头中的Content-length字段。   content_type      #请求头中的Content-Type字段。   cookie_COOKIE    #cookie COOKIE变量的值   document_root    #当前请求在root指令中指定的值。   document_uri      #与uri相同。   host                #请求主机头字段,否则为服务器名称。   hostname          #Set to themachine’s hostname as returned by gethostname   http_HEADER   is_args              #如果有args参数,这个变量等于”?”,否则等于””,空值。   http_user_agent    #客户端agent信息   http_cookie          #客户端cookie信息   limit_rate            #这个变量可以限制连接速率。   query_string          #与args相同。   request_body_file  #客户端请求主体信息的临时文件名。   request_method    #客户端请求的动作,通常为GET或POST。   remote_addr          #客户端的IP地址。   remote_port          #客户端的端口。   remote_user          #已经经过Auth Basic Module验证的用户名。   request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。   request_method    #GET或POST   request_filename  #当前请求的文件路径,由root或alias指令与URI请求生成。   request_uri          #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。   scheme                #HTTP方法(如http,https)。   server_protocol      #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。   server_addr          #服务器地址,在完成一次系统调用后可以确定这个值。   server_name        #服务器名称。   server_port          #请求到达服务器的端口号。       七.Apache和Nginx规则的对应关系   Apache的RewriteCond对应Nginx的if   Apache的RewriteRule对应Nginx的rewrite   Apache的[R]对应Nginx的redirect   Apache的[P]对应Nginx的last   Apache的[R,L]对应Nginx的redirect   Apache的[P,L]对应Nginx的last   Apache的[PT,L]对应Nginx的last       例如:允许指定的域名访问本站,其他的域名一律转向www.zzm8.com     Apache:   RewriteCond %{HTTP_HOST} !^(.*?)\.aaa\.com$[NC]   RewriteCond %{HTTP_HOST} !^localhost$    RewriteCond %{HTTP_HOST}!^192\.168\.0\.(.*?)$   RewriteRule ^/(.*)$ http://www.zzm8.com[R,L]         Nginx:   if( $host ~* ^(.*)\.aaa\.com$ )   {   set $allowHost ‘1’;   }   if( $host ~* ^localhost )   {   set $allowHost ‘1’;   }   if( $host ~* ^192\.168\.1\.(.*?)$ )   {   set $allowHost ‘1’;   }   if( $allowHost !~ ‘1’ )   {   rewrite ^/(.*)$ http://www.zzm8.comredirect ;

nginx错误日志级别设置

 语法: error_log file [level];PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

默认:	error_log logs/error.log error;
场景:	main, http, mail, stream, server, location

 PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

error_log 第一个参数是错误日志文件路径,第二个参数是错误级别。PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

可选错误级别日下:PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

  • debug
  • info
  • notice
  • warn
  • error
  • crit
  • alert

以上日志级别按照严重性增加列出的。设置某个日志级别,会记录该级别以及更严重级别的所有消息。PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

例如,将级别设置成warn,则记录warn、error、crit和alertPdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

最新版本中,默认是error级别PdB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

nginx关闭/重启/启动的操作步骤

 关闭0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

service nginx stop0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

systemctl stop nginx0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

启动0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

service nginx start0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

systemctl start nginx0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

重启0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

service nginx reload0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

systemctl restart nginx0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

随系统启动自动运行0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

systemctl enable nginx0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

禁止随系统启动自动运行0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

systemctl disable nginx0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

知识点扩展:0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

首先利用配置文件启动nginx。0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

命令: nginx -c /usr/local/nginx/conf/nginx.conf0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

重启服务: service nginx restart 0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

2. 快速停止或关闭Nginx:nginx -s stop0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

3. 正常停止或关闭Nginx:nginx -s quit0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

4. 配置文件修改重装载命令:nginx -s reload0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

到此这篇关于nginx关闭/重启/启动的操作方法的文章就介绍到这了,更多相关nginx关闭/重启/启动方法0kB网页模板,帝国cms模板,网站模板免费下载,做网站首选站长魔吧

nginx配置文件详解

  程序猿对nginx 配置可以说是十分熟悉,但是对于普通用户而言,nginx 配置是一件极陌生的事情,Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。对于nginx配置,你需要了解nginx配置文件详解。和超人软件站小编一起来了解下吧。,,  Nginx配置文件nginx.conf中文详解,  配置文件主要由四部分组成:main(全区设置),server(主机配置),upstream(负载均衡服务器设置),和location(URL匹配特定位置设置)。,  1)全局变量,  #Nginx的worker进程运行用户以及用户组,  #user  nobody nobody;,  #Nginx开启的进程数,  worker_processes  1;,  #worker_processes auto;,  #以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.,  #这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:,  #worker_processes 4     #4核CPU,  #worker_cpu_affinity 0001 0010 0100 1000,  #定义全局错误日志定义类型,[debug|info|notice|warn|crit],  #error_log  logs/error.log  info;,  #指定进程ID存储文件位置,  #pid        logs/nginx.pid;,  #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。,  #vim /etc/security/limits.conf,  #  *                soft    nproc          65535,  #  *                hard    nproc          65535,  #  *                soft    nofile         65535,  #  *                hard    nofile         65535,  worker_rlimit_nofile 65535;,  2)事件配置,  events {,  #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。,  use epoll;,  #每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。理论值:worker_rlimit_nofile/worker_processes,  #注意:最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处,  worker_connections  65535;,  #worker工作方式:串行(一定程度降低负载,但服务器吞吐量大时,关闭使用并行方式),  #multi_accept on;,  },  3)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”‘;,  #定义日志的格式。后面定义要输出的内容。,  #1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;,  #2.$remote_user :用来记录客户端用户名称;,  #3.$time_local :用来记录访问时间与时区;,  #4.$request  :用来记录请求的url与http协议;,  #5.$status :用来记录请求状态;,  #6.$body_bytes_sent :记录发送给客户端文件主体内容大小;,  #7.$http_referer :用来记录从那个页面链接访问过来的;,  #8.$http_user_agent :记录客户端浏览器的相关信息,  #连接日志的路径,指定的日志格式放在最后。,  #access_log  logs/access.log  main;,  #只记录更为严重的错误日志,减少IO压力,  error_log logs/error.log crit;,  #关闭日志,  #access_log  off;,  #默认编码,  #charset utf-8;,  #服务器名字的hash表大小,  server_names_hash_bucket_size 128;,  #客户端请求单个文件的最大字节数,  client_max_body_size 8m;,  #指定来自客户端请求头的hearerbuffer大小,  client_header_buffer_size 32k;,  #指定客户端请求中较大的消息头的缓存最大数量和大小。,  large_client_header_buffers 4 64k;,  #开启高效传输模式。,  sendfile        on;,  #防止网络阻塞,  tcp_nopush on;,  tcp_nodelay on;,  #客户端连接超时时间,单位是秒,  keepalive_timeout 60;,  #客户端请求头读取超时时间,  client_header_timeout 10;,  #设置客户端请求主体读取超时时间,  client_body_timeout 10;,  #响应客户端超时时间,  send_timeout 10;,  #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。,  fastcgi_connect_timeout 300;,  fastcgi_send_timeout 300;,  fastcgi_read_timeout 300;,  fastcgi_buffer_size 64k;,  fastcgi_buffers 4 64k;,  fastcgi_busy_buffers_size 128k;,  fastcgi_temp_file_write_size 128k;,  #gzip模块设置,  #开启gzip压缩输出,  gzip on;,  #最小压缩文件大小,  gzip_min_length 1k;,  #压缩缓冲区,  gzip_buffers 4 16k;,  #压缩版本(默认1.1,前端如果是squid2.5请使用1.0),  gzip_http_version 1.0;,  #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大,  gzip_comp_level 2;,  #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。,  gzip_types text/plain application/x-javascript text/css application/xml;,  #前端缓存服务器缓存经过压缩的页面,  gzip_vary on;,  4)虚拟主机基本设置,  #虚拟主机定义,  server {,  #监听端口,  listen       80;,  #访问域名,  server_name  localhost;,  #编码格式,若网页格式与此不同,将被自动转码,  #charset koi8-r;,  #虚拟主机访问日志定义,  #access_log  logs/host.access.log  main;,  #对URL进行匹配,  location / {,  #访问路径,可相对也可绝对路径,  root   html;,  #首页文件。以下按顺序匹配,  index  index.html index.htm;,  },  #错误信息返回页面,  #error_page  404              /404.html;,  # redirect server error pages to the static page /50x.html,  #,  error_page   500 502 503 504  /50x.html;,  location = /50x.html {,  root   html;,  },  #访问URL以.php结尾则自动转交给127.0.0.1,  # proxy the PHP scripts to Apache listening on 127.0.0.1:80,  #,  #location ~ \.php$ {,  #    proxy_pass   http://127.0.0.1;,  #},  #php脚本请求全部转发给FastCGI处理,  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000,  #,  #location ~ \.php$ {,  #    root           html;,  #    fastcgi_pass   127.0.0.1:9000;,  #    fastcgi_index  index.php;,  #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;,  #    include        fastcgi_params;,  #},  #禁止访问.ht页面 (需ngx_http_access_module模块),  # deny access to .htaccess files, if Apache’s document root,  # concurs with nginx’s one,  #,  #location ~ /\.ht {,  #    deny  all;,  #},  },  #HTTPS虚拟主机定义,  # HTTPS server,  #,  #server {,  #    listen       443 ssl;,  #    server_name  localhost;,  #    ssl_certificate      cert.pem;,  #    ssl_certificate_key  cert.key;,  #    ssl_session_cache    shared:SSL:1m;,  #    ssl_session_timeout  5m;,  #    ssl_ciphers  HIGH:!aNULL:!MD5;,  #    ssl_prefer_server_ciphers  on;,  #    location / {,  #        root   html;,  #        index  index.html index.htm;,  #    },  #},  5)Nignx状态监控,  #Nginx运行状态,StubStatus模块获取Nginx自启动的工作状态(编译时要开启对应功能),  #location /NginxStatus {,  #    #启用StubStatus的工作访问状态,  #    stub_status    on;,  #    #指定StubStaus模块的访问日志文件,  #    access_log    logs/Nginxstatus.log;,  #    #Nginx认证机制(需Apache的htpasswd命令生成),  #    #auth_basic    “NginxStatus”;,  #    #用来认证的密码文件,  #    #auth_basic_user_file    ../htpasswd;,  #},  访问:http://IP/NginxStatus(测试就不加密码验证相关),  6)反向代理,  #以下配置追加在HTTP的全局变量中,  #nginx跟后端服务器连接超时时间(代理连接超时),  proxy_connect_timeout      5;,  #后端服务器数据回传时间(代理发送超时),  proxy_send_timeout         5;,  #连接成功后,后端服务器响应时间(代理接收超时),  proxy_read_timeout         60;,  #设置代理服务器(nginx)保存用户头信息的缓冲区大小,  proxy_buffer_size          16k;,  #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置,  proxy_buffers              4 32k;,  #高负荷下缓冲大小(proxy_buffers*2),  proxy_busy_buffers_size    64k;,  #设定缓存文件夹大小,大于这个值,将从upstream服务器传,  proxy_temp_file_write_size 64k;,  #反向代理缓存目录,  proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;,  #levels=1:2 设置目录深度,第一层目录是1个字符,第2层是2个字符,  #keys_zone:设置web缓存名称和内存缓存空间大小,  #inactive:自动清除缓存文件时间。,  #max_size:硬盘空间最大可使用值。,  #指定临时缓存文件的存储路径(路径需和上面路径在同一分区),  proxy_temp_path /data/proxy/temp,  #服务配置,  server {,  #侦听的80端口,  listen       80;,  server_name  localhost;,  location / {,  #反向代理缓存设置命令(proxy_cache zone|off,默认关闭所以要设置),  proxy_cache cache_one;,  #对不同的状态码缓存不同时间,  proxy_cache_valid 200 304 12h;,  #设置以什么样参数获取缓存文件名,  proxy_cache_key $host$uri$is_args$args;,  #后7端的Web服务器可以通过X-Forwarded-For获取用户真实IP,  proxy_set_header Host $host;,  proxy_set_header X-Real-IP $remote_addr;,  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,  #代理设置,  proxy_pass   http://IP;,  #文件过期时间控制,  expires    1d;,  },  #配置手动清楚缓存(实现此功能需第三方模块 ngx_cache_purge),  #http://www.123.com/2017/0316/17.html访问,  #http://www.123.com/purge/2017/0316/17.html清楚URL缓存,  location ~ /purge(/.*) {,  allow    127.0.0.1;,  deny    all;,  proxy_cache_purge    cache_one    $host$1$is_args$args;,  },  #设置扩展名以.jsp、.php、.jspx结尾的动态应用程序不做缓存,  location ~.*\.(jsp|php|jspx)?$ {,  proxy_set_header Host $host;,  proxy_set_header X-Real-IP $remote_addr;,  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,  proxy_pass http://http://IP;,  },  7)负载均衡,  #负载均衡服务器池,  upstream my_server_pool {,  #调度算法,  #1.轮循(默认)(weight轮循权值),  #2.ip_hash:根据每个请求访问IP的hash结果分配。(会话保持),  #3.fair:根据后端服务器响应时间最短请求。(upstream_fair模块),  #4.url_hash:根据访问的url的hash结果分配。(需hash软件包),  #参数:,  #down:表示不参与负载均衡,  #backup:备份服务器,  #max_fails:允许最大请求错误次数,  #fail_timeout:请求失败后暂停服务时间。,  server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;,  server 192.168.1.108:80 weight=2 max_fails=2 fail_timeout=30;,  },  #负载均衡调用,  server {,  …,  location / {,  proxy_pass http://my_server_pool;,  },  },  8)URL重写,  #根据不同的浏览器URL重写,  if($http_user_agent ~ Firefox){,  rewrite ^(.*)$  /firefox/$1 break;,  },  if($http_user_agent ~ MSIE){,  rewrite ^(.*)$  /msie/$1 break;,  },  #实现域名跳转,  location / {,  rewrite ^/(.*)$ https://web8.example.com$1 permanent;,  },  9)IP限制,  #限制IP访问,  location / {,  deny 192.168.0.2;,  allow 192.168.0.0/24;,  allow 192.168.1.1;,  deny all;,  },  10)Nginx相关命令,  #启动nginx,  nginx,  #关闭nginx,  nginx -s stop,  #平滑重启,  kill -HUP `cat /usr/local/nginx/logs/nginx.pid`,  11)Nginx启动脚本,  #!/bin/bash,  #chkconfig: 2345 80 90,  #description:auto_run,  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin,  export PATH,  # Check if user is root,  if [ $(id -u) != “0” ]; then,  echo “Error: You must be root to run this script!\n”,  exit 1,  fi,  NGINXDAEMON=/usr/local/nginx/sbin/nginx,  PIDFILE=/usr/local/nginx/logs/nginx.pid,  function_start(),  {,  echo -en “\033[32;49;1mStarting nginx……\n”,  echo -en “\033[39;49;0m”,  if [ -f $PIDFILE ]; then,  printf “Nginx is runing!\n”,  exit 1,  else,  $NGINXDAEMON,  printf “Nginx is the successful start!\n”,  fi,  },  function_stop(),  {,  echo -en “\033[32;49;1mStoping nginx……\n”,  echo -en “\033[39;49;0m”,  if  [ -f $PIDFILE ]; then,  kill `cat $PIDFILE`,  printf “Nginx program is stoped\n”,  else,  printf  “Nginx program is not runing!\n”,  fi,  },  function_reload(),  {,  echo -en “\033[32;49;1mReload nginx……\n”,  echo -en “\033[39;49;0m”,  function_stop,  function_start,  },  function_restart(),  {,  echo -en “\033[32;49;1mRestart nginx……\n”,  echo -en “\033[39;49;0m”,  printf “Reload Nginx configure…\n”,  $NGINXDAEMON -t,  kill -HUP `cat $PIDFILE`,  printf “Nginx program is reloding!\n”,  },  function_kill(),  {,  killall nginx,  },  function_status(),  {,  if ! ps -ef|grep -v grep|grep ‘nginx:’ > /dev/null 2>&1,  then,  printf “Nginx is down!!!\n”,  else,  printf “Nginx is running now!\n”,  fi,  },  if [ “$1” = “start” ]; then,  function_start,  elif [ “$1” = “stop” ]; then,  function_stop,  elif [ “$1” = “reload” ]; then,  function_reload,  elif [ “$1” = “restart” ]; then,  function_restart,  elif [ “$1” = “kill” ]; then,  function_kill,  elif [ “$1” = “status” ]; then,  function_status,  else,  echo -en “\033[32;49;1m Usage: nginx {start|stop|reload|restart|kill|status}\n”,  echo -en “\033[39;49;0m”,  fi,1, 1——nginx配置文件详解

weblogic和tomcat的区别(weblogic和nginx)

区别:1。Weblogic是EJB支持的全负载容器,而Tomcat是Servlet和JSP支持的容器;2.Weblogic购买许可证有点贵,而Tomcat是免费的。3.与Weblogic相比,Tomcat的性能很差。

本教程的操作环境:windows7系统,戴尔G3电脑。

Weblogic是由甲骨文公司开发的符合Java企业版规范的Weblogic服务器。它是根据专有许可证获得许可的。完全是用Java编程语言写的。最初由BEA系统开发维护,2008年被甲骨文公司收购。它处理系统级和配置级功能,开发人员可以集中应用级逻辑或业务逻辑,从而简化了Oracle的开发和部署。将应用程序放入Web容器中,即应用程序服务器或Web服务器。它是当今业界最好的服务器之一。Weblogic为不同的模块处理大量的服务或功能,并且无需任何编程或额外的努力就能立即提供许多应用程序细节。

Tomcat是一个Web应用服务器,俗称Apache Tomcat Server,是一个符合Java EE规范的开源应用服务器,也称为Java Servlet容器。这是一个开源软件,任何人都可以免费使用,甚至用于商业目的。它由Apache软件基金会开发和维护。纯粹是用Java编程语言写的。最初是詹姆斯邓肯戴维森开发的。Tomcat也可以作为HTTP服务器使用。

weblogic和tomcat的区别

1.Weblogic有不同的功能,比如事务管理、消息队列、数据库连接处理等很多功能,而tomcat有轻量级、开源、灵活、稳定、servlet、JSP、将应用嵌入Tomcat异步日志记录等等。

2.Weblogic是EJB支持的完全加载的容器,而Tomcat是Servlet和JSP支持的容器。

3.Weblogic是基于Java EE的授权商用Web服务器,具有高度的可扩展性、快速性、安全性和高性能,而Tomcat是开源的,基于Servlet和JSP规范的参考实现。

4.Weblogic是市面上最好的服务器,有数据库池的功能,购买许可证的价格有点贵,而Tomcat是免费的,在大规模应用的功能上有局限性。

5.Weblogic拥有顶级客户和使用该服务器的客户,并被业界顶级客户使用。Tomcat也有很多客户在使用,但是相对于Weblogic来说,它有限,用户较少。

6.Weblogic为部署业务逻辑和Web应用提供支持,而Tomcat只允许部署基于http或基于Web的应用。

7.与WebLogic相比,Weblogic性能好,Tomcat性能差。

8.Weblogic具有良好的服务管理功能和自动化的可能性,而Tomcat的IT服务管理可能性较小。

9.Weblogic对任何新功能或新JDK版本都有更快的更新,而Tomcat不会立即提供JDK版本更新或任何其他功能更新,但这需要很长时间。

10.Weblogic有应用版本控制功能,消息引擎,故障排除,数据库调优,数据源池,Apache Tomcat Server没有这个功能。

11.Weblogic有EJB集群、JMS集群、故障转移、迁移、升级、补丁、安全更新和恢复功能,Tomcat没有这些功能。

结论

Weblogic是一个授权的企业和商业软件,对于大型工业应用有很多功能,可以简化开发者的生活。Tomcat是一款轻量级的自由开源软件,适用于小型Web应用或者投资授权版本的公司性价比非常高的地方。软件的选择取决于项目的需求和规模,所需的功能和客户需求,在设计应用架构时,任何应用服务器或Web服务器都可以用同样的方法选择。

Nginx的作用详解

Nginx的产生

没有听过Nginx?那么一定听过它的”同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。

然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。

Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。

这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。

俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。

然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。

由于:

Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接

高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)

Nginx是一个跨平台服务器,可以运行在linux,windows,FreeBSD,Solaris, AIX,mac OS等操作系统上

这些优秀的设计带来的极大的稳定性

所以,Nginx火了!

Nginx的用武之地

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

关于代理

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;

此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。

正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。来看个示意图(我把客户端和正向代理框在一块,同属于一个环境,后面我有介绍):

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。如图。

总结来说:正向代理,”它代理的是客户端”,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

访问原来无法访问的资源,如google

可以做缓存,加速访问资源

对客户端访问授权,上网进行认证

代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;

也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine。

有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/。那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍):

通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,”它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:

保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网

负载均衡,通过反向代理服务器来优化网站的负载

项目场景

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。

具体的拓扑图如下:

二者区别

截了一张图来说明正向代理和反向代理二者之间的区别,如图。

图解:

在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;

在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

实际上,Proxy在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。

负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。

所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

Nginx支持的负载均衡调度算法方式如下:

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

几种常用web服务器对比

nginx配置支持php-fpm

创建一个不能登录的www-data用户,属于www-data组

groupadd www-data

useradd -s /sbin/nologin -g www-data www-data

修改Nginx.conf

vim /etc/nginx/nginx.conf

……

#使nginx以www-data用户运行

user www-data;

……

#重新加载配置

service nginx reload

修改php-fpm.conf

vim /etc/php-fpm.d/www.conf

……

#使php-fpm以www-data用户和用户组运行

user = www-data

group = www-data

……

#nginx和php-fpm在同一服务器的话,推荐使用unix socket进程间通讯

;listen = 127.0.0.1:9000

listen = /var/run/php71-fpm.sock

……

#设置.sock访问权限,需和nginx用户一致

listen.owner = www-data

listen.group = www-data

listen.mode = 0660

……

#重新加载配置

service php-fpm reload

配置nginx支持php-fpm

vim /etc/nginx/conf.d/default.conf

……

location ~ .php$ {

root /usr/share/nginx/html;

#fastcgi_pass 127.0.0.1:9000;

fastcgi_pass unix:/var/run/php71-fpm.sock;

fastcgi_index index.php;

#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

includefastcgi_params;

}

……

#重新加载配置

service nginx reload

以上就是nginx配置支持php-fpm的详细内容

高级开发必须掌握Nginx之一 反向代理、动静分离

Nginx简述

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP Web服务器,也可作为反向代理负载均衡服务器,邮件服务器等。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx 优势功能

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了epoll and kqueue作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 php,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。官网。

反向代理

要说反向代理,我们就先要理解正向代理。

正向代理

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会翻墙进行访问,翻墙的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;最终服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

正向代理总结就一句话:代理端代理的是客户端。

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

例如,当用户去某宝购买东西,我们根本不用关心某宝后台具体是怎么配置的,我只知道我访问某宝的代理服务器,代理服务器会代理所有的服务器提供数据给我们。

反向代理总结就一句话:代理端代理的是服务端。

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

动静分离简单的概括是:动态资源与静态资源的分离。

在我们的软件开发中,有些请求是后段的动态数据,有些请求是不需要经过后台处理的静态资源(如:css、html、image、js等等文件),这些不需要经过后台处理的资源称为静态资源,否则即是动态资源。

动静分离将网站静态资源(HTML,JAVAScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。例如我们将静态资源放到nginx中,动态资源转发到Tomcat服务器中。

负载均衡

互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面呢?

负载均衡的思想是将客户端的流量首先发送扫负载均衡服务器,由负载均衡服务器通过一定的调度算法将流量分发到不同的应用服务器上面来解决单台机器的并发压力。

举例来说,比如某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就需要越来越多的服务器来解决单台机器并发访问人数限制的问题;