开发者社区> 余二五> 正文

企业级Web Nginx 服务优化(3)

简介:
+关注继续查看

企业级Web Nginx 服务优化(3)

1.10设置连接的超时时间:

什么是超时?

php服务希望短链接,java服务是长连接。


  1. keepalive_timeout 60;

  2. <-设置客户端连接保持回话的超时时间,超过这个时间,服务器会关闭该链接。

  3. tcp_nodelay no;

  4. <-打开tcp_nodelay,在包含了keepalive参数才有效

  5. client_header_timeout 15;

  6. <-设置客户端请求头读取超时时间。如超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误。

  7. clinet_body_timeout 15;

  8. <-设置客户端请求头读取超时时间。如超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误,默认值是60秒。

  9. send_timeout 15;

  10. <-指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

官方说明:

wKiom1ihXajjkGnlAAB70ejYcpY735.jpg-wh_50

wKioL1ihXcTiVMUwAABCjTId7jQ544.jpg-wh_50

wKiom1ihXd6wUumqAABMu0wN4dw886.jpg-wh_50

1.11上传文件大小的限制(动态应用)

主配置文件加入如下参数,具体参数大小根据你自己的业务做调整。
client_max_body_size 10m;

官方说明:

wKioL1ihXgrj1IB2AABwDr9LcJg172.jpg-wh_50

  1. HTTP/1.1 403 Forbidden

  2. Server: nginx

  3. Date: Fri, 05 Jun 2015 12:47:45 GMT

  4. Content-Type: text/html

  5. Content-Length: 162

  6. Connection: keep-alive

1.12fastcgi(配合php引擎动态服务)


  1. fastcgi_connect_timeout 300;

  2. <-指定连接到后端FastCGI的超时时间

  1. fastcgi_send_timeout 300;

  2. <-向fastcgi传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。

  3. fastcgi_read_timeout 300;

  4. <-指定接收Fastcgi应答的超时时间,这个值是指定已经完成两次握手后接收的fastcgi应答的超时时间。

  1. fastcgi_buffer+size 64k;

  2. <-指定读取FastCGI应答的第一部分需要用多大的缓冲区,这个值白哦是将使用164kb的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。

  3. fastcg_buffers 4 64k;

  4. <-指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256kb,那么会为其分配464kb的缓冲区来缓存;如果页面大小大于256kb,那么大于256kb的部分会缓存到fastcgi_temp指定 的路径中,但是并不是好的办法,因为内存中的数据处理速度快于硬盘,一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面的大小为256kb那么可以把这个设置为“16k 4 64k

wKioL1ihXm-wmbiiAAB0kvAYo4M786.jpg-wh_50

wKioL1ihXoTT6y2SAABTtL6kFJU051.jpg-wh_50

1.13配置nginx zip压缩功能

 nginx gzip压缩模块提供了对文件内容压缩的功能,允许nginx服务器将输出内容在发送到客户端之前根据具体的策略进行压缩,以节约万占贷款,同时提升童虎体验。

此功能同apache的mod_deflate压缩功能,以来ngx_http_gzip_nodule模块,默认已安装,我们已经详细讲解过了压缩的功能。

所有程序(js,css,html) 不要压缩的内容(图片,视频 ,FLASH)

1,对应压缩参数的说明如下:

  1. 压缩配置

  2. gzip On

  3. <-开启gizp压缩功能

  4. gzip_min_length 1k;

  5. <-设置允许压缩的页面最小字节数,页面字节数从header头的Contet-length中获取。默认是0,不管页面多大进行压缩。建议配置大于1k。如果小于1k可能会月牙越大。

  6. gzip 4 16k

  7. <-压缩缓冲区大小。白哦是申请4各单位为16k的内存作为压缩结果流缓存,默认值是申请与原生数据大小相同的内存空间来存储gzip压缩的结果。

  8. gzip_http_version 1.0

  9. <-压缩版本(默认是1.1,前端为squid2.5使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分的浏览器都已经支持GZIP解压。默认即可

  10. gzip_comp_level 2;

  11. 压缩比率,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但处理最慢,也比较小号cpu资源

  12. gzip_types text/plain application/x-javascript text/css application/xml;

  13. <-用来指定压缩的类型,“text/html” 类型总司会被压缩。

  14. gzip_bary on;

  15. <-vary header 支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如使用SQUID缓存经过NGINX压缩数据

2.完整的配置如下:

wKioL1ihXtTh5Z9iAABCdRO4be8405.jpg-wh_50

修改的内容如下:


  1. [root@nginx-01 conf]# nginx -t

  2. nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok

  3. nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful

  4. [root@nginx-01 conf]# cat nginx.conf

  5. worker_processes  4;

  6. worker_cpu_affinity 0001 0010 0100 1000;

  7. events {

  8.     worker_connections  1024;

  9.     use epoll;

  10. }

  11. http {

  12.     server_tokens off;

  13. gzip on;

  14. gzip_min_length 1k;

  15. gzip_buffers     4 32k;

  16. gzip_http_version 1.1;

  17. gzip_comp_level 9;

  18. gzip_types text/html text/css text/xml application/javascripti;

  19. gzip_vary on;

  20. gzip的压缩的情况是根据不同版本可能会不同的,上述的nginx 1.6.2的版本类型的。

查看可以压缩的文件类型在哪里?都是什么?

上方加红的地方写法是按照这个来进行写的。

  1. [root@nginx-01 conf]# cat mime.types


  2. types {

  3.     text/html                             html htm shtml;

  4.     text/css                              css;

  5.     text/xml                              xml;

  6.     image/gif                             gif;

  7.     image/jpeg                            jpeg jpg;

  8.     application/javascript                js;

  9.     application/atom+xml                  atom;

  10.     application/rss+xml                   rss;


  11.     text/mathml                           mml;

  12.     text/plain                            txt;

  13.     text/vnd.sun.j2me.app-descriptor      jad;

  14.     text/vnd.wap.wml                      wml;

  15.     text/x-component                      htc;


  16.     image/png                             png;

  17.     image/tiff                            tif tiff;

  18.     image/vnd.wap.wbmp                    wbmp;

  19.     image/x-icon                          ico;

  20.     image/x-jng                           jng;

  21.     image/x-ms-bmp                        bmp;

  22.     image/svg+xml                         svg svgz;

  23.     image/webp                            webp;


  24.     application/font-woff                 woff;

  25.     application/java-archive              jar war ear;

  26.     application/json                      json;

  27.     application/mac-binhex40              hqx;

  28.     application/msword                    doc;

  29.     application/pdf                       pdf;

  30.     application/postscript                ps eps ai;

  31.     application/rtf                       rtf;

  32.     application/vnd.apple.mpegurl         m3u8;

  33.     application/vnd.ms-excel              xls;

  34.     application/vnd.ms-fontobject         eot;

  35.     application/vnd.ms-powerpoint         ppt;

  36.     application/vnd.wap.wmlc              wmlc;

  37.     application/vnd.google-earth.kml+xml  kml;

  38.     application/vnd.google-earth.kmz      kmz;

  39.     application/x-7z-compressed           7z;

  40.     application/x-cocoa                   cco;

  41.     application/x-java-archive-diff       jardiff;

  42.     application/x-java-jnlp-file          jnlp;

  43.     application/x-makeself                run;

  44.     application/x-perl                    pl pm;

  45.     application/x-pilot                   prc pdb;

  46.     application/x-rar-compressed          rar;

  47.     application/x-redhat-package-manager  rpm;

  48.     application/x-sea                     sea;

  49.     application/x-shockwave-flash         swf;

  50.     application/x-stuffit                 sit;

  51.     application/x-tcl                     tcl tk;

  52.     application/x-x509-ca-cert            der pem crt;

  53.     application/x-xpinstall               xpi;

  54.     application/xhtml+xml                 xhtml;

  55.     application/xspf+xml                  xspf;

  56.     application/zip                       zip;


  57.     application/octet-stream              bin exe dll;

  58.     application/octet-stream              deb;

  59.     application/octet-stream              dmg;

  60.     application/octet-stream              iso img;

  61.     application/octet-stream              msi msp msm;


  62.     application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;

  63.     application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;

  64.     application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;


  65.     audio/midi                            mid midi kar;

  66.     audio/mpeg                            mp3;

  67.     audio/ogg                             ogg;

  68.     audio/x-m4a                           m4a;

  69.     audio/x-realaudio                     ra;


  70.     video/3gpp                            3gpp 3gp;

  71.     video/mp2t                            ts;

  72.     video/mp4                             mp4;

  73.     video/mpeg                            mpeg mpg;

  74.     video/quicktime                       mov;

  75.     video/webm                            webm;

  76.     video/x-flv                           flv;

  77.     video/x-m4v                           m4v;

  78.     video/x-mng                           mng;

  79.     video/x-ms-asf                        asx asf;

  80.     video/x-ms-wmv                        wmv;

  81.     video/x-msvideo                       avi;

  82. }

进行重新启动

  1. [root@nginx-01 conf]# nginx -t

  2. nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok

  3. nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful

  4. [root@nginx-01 conf]# nginx

然后浏览器进行查看如下gzip的压缩以及expires的缓存结果:

wKiom1ihXz2iTNh9AACIJD3XhaE311.jpg-wh_50

这里面是火狐的浏览器需要安装Yslow 的这个扩展组件才是可以的。

需要和不需要的压缩的对象:

大于1K的纯文本文件html,,js ,css xml shtml

图片,视频等不要压缩。因为不但不会减少,在压缩时小号CPU和MEM资源。


nginx的翻向的一个优化 就是没必要的加载的模块是什么?

  1. [root@nginx-01 nginx-1.6.2]# ./configure --help

  2.   --without-http_charset_module      disable ngx_http_charset_module

  3.   --without-http_gzip_module         disable ngx_http_gzip_module

  4.   --without-http_ssi_module          disable ngx_http_ssi_module

  5.   --without-http_userid_module       disable ngx_http_userid_module

  6.   --without-http_access_module       disable ngx_http_access_module

  7.   --without-http_auth_basic_module   disable ngx_http_auth_basic_module

  8.   --without-http_autoindex_module    disable ngx_http_autoindex_module

  9.   --without-http_geo_module          disable ngx_http_geo_module

  10.   --without-http_map_module          disable ngx_http_map_module

  11.   --without-http_split_clients_module disable ngx_http_split_clients_module

  12.   --without-http_referer_module      disable ngx_http_referer_module

  13.   --without-http_rewrite_module      disable ngx_http_rewrite_module

  14.   --without-http_proxy_module        disable ngx_http_proxy_module

  15.   --without-http_fastcgi_module      disable ngx_http_fastcgi_module

  16.   --without-http_uwsgi_module        disable ngx_http_uwsgi_module

  17.   --without-http_scgi_module         disable ngx_http_scgi_module

  18.   --without-http_memcached_module    disable ngx_http_memcached_module

  19.   --without-http_limit_conn_module   disable ngx_http_limit_conn_module

  20.   --without-http_limit_req_module    disable ngx_http_limit_req_module

  21.   --without-http_empty_gif_module    disable ngx_http_empty_gif_module

  22.   --without-http_browser_module      disable ngx_http_browser_module

  23.   --without-http_upstream_ip_hash_module


1.14配置nginx expires 缓存功能

 在网站开发和运营中,对于图片,css,js等元素更改机会比较少,特别是图片,这时可以将图片设置在浏览器本地缓存365天或者更长,CSSJS,html等待吗缓存10天,这样用户第一次打开页面后,你,会在本地的浏览器缓存相应的上述内容,这样的缓存可以提高下次用户打开类似的页面的加载速度,并节省服务器端的大量资源的带宽,此功能同apache的expire是,我们已经详细讲解过了,这里通过location的,将需要缓存的扩展名列出来,然后指定缓存的时间。

好处:

1.第一次以后,访问网站会很快----->体验就好了

2.节省网站的带宽。。。。成本变低了。

3.服务器的压力降低了。----->成本降低了

坏处:

1.网站如果改版,对应的用户看到的还是旧的。(js,css,图片)

解决坏处的:

1.过期时间短一些

2.资源文件更新的时候,进行改名字就可以了。

图片和附件一般不会被用户修改,如果用户修改了,实际上也都是更改文件名字重新传了而已。

网站升级对于jss,css元素,一般可以改名。把css,jss,推送到CDN。

企业网站案例日期的案例:

1.51cto 1周

2.sina 15天

3.京东 25年

4.淘宝的 10年

一般不希望被缓存的内容:

1)广告图片、

2)网站流量统计文件

3)更新频繁的文件

1.根据文件扩展名进行判断,添加expires功能范例:

[root@nginx-01 conf]# vim nginx.conf

    server {

    location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$

{

        expires 3650d;

    root html/bbs

}

        location ~.*\.(js|css)?$

{

        expires 30d;

        root html/bbs

}

在server里面的标签。

这个时间是跟服务器的时间对应的

wKiom1ihX4yB8-k5AAB-6-mltUk533.jpg-wh_50

单个文件添加expires功能范例:

给robots.txt设置过期时间;这里为robots.txt 为7天并不记录404错误日志

wKiom1ihX6vBUzOJAAAasK0sI2g381.jpg-wh_50

wKioL1ihX8bxg1AvAABPqZ1ZkDA411.png-wh_50

wKioL1ihX9vizn9wAAAlQzK58yA945.png-wh_50

wKiom1ihYAPglplMAAAzKaSeGF0094.png-wh_50

nginx防止爬虫的配置的是什么?

wKioL1ihYB7RKHmZAAA4XLrrwO8180.jpg-wh_50

结果如下:

wKioL1ihYDnQ6hqTAABAv5yJ6ms241.jpg-wh_50

wKiom1ihYE_xFF07AABFp_YF_MI093.jpg-wh_50

1.2更改源码文件来更改源码名称


更改编译的源码文件:


  1. vim src/http/ngx_http_header_filter_module.+49

  2. static char ngx_http_server_string[] = "Server: BWS" CRLF;

  3. static char ngx_http_server_full_string[] = "Server: BWS"  CRLF;



  4. static ngx_str_t ngx_http_status_lines[] = {

进行查看编译的参数是什么:

[root@nginx-01 nginx-1.6.2]# nginx -Vnginx version: nginx/1.6.2built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) TLS SNI support enabledconfigure arguments: --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module

修改错误信息的返回页面:

  1. [root@nginx-01 nginx-1.6.2]# vim src/http/ngx_http_special_response.

  2. static u_char ngx_http_error_tail[] =

  3. "<hr><center>BWS(http://www.baidu.com</center>)" CRLF

  4. "</body>" CRLF

  5. "</html>" CRLF

  6. ;

重新编译安装:

安装完成后测试的结果如下:

本机测试:

  1. [root@nginx-01 nginx-1.6.2]# curl -I 127.0.0.1

  2. HTTP/1.1 403 Forbidden

  3. Server: BWS

  4. Date: Fri, 05 Jun 2015 13:55:03 GMT

  5. Content-Type: text/html

  6. Content-Length: 223

  7. Connection: keep-alive

错误页面的显示:

wKiom1ihYMeT7YAiAAAtA0LsDSU278.png-wh_50

1.3 Nginx 日志相关优化与安全

1.3.1编写脚本实现Nginx access 日志轮训

Nginx没有类似Apache的cronolog日志分割处理的功能,但是,可以通过nginx的信号控制功能或者reload新家在,然后利用脚本来实现日志的自动切割。

详细操作过程如下:

1.配置日志切割脚本

  1. [root@nginx-01 scripts]# cat nginxlog.sh 

  2. #!/bin/sh

  3. cd /application/nginx/logs &&\

  4. /bin/mv www_access.log www_access_$(date +%F -d -1day).log

  5. /application/nginx/sbin/nginx -s reload

1.3.2 不记录不需要的访问日志

对于健康检查或某些图片,jss,css的日志,一般不需要记录,因为在同级PV时是按照页面计算。而且日志写入频繁消耗磁盘IO,降低服务性能。

wKiom1ihYQjCb_m5AAAax81nEu4875.jpg-wh_50

1.3.3访问日志的权限设置

假如日志目录/app/logs,则授权方法、

chown -R root.root /app/logs
chmod -R 700 /app/logs


不需要在日志目录上给nginx用户读或者写许可,这个问题很多网友都没在意,直接给了nginx或apache用户。

 

最小化apache和nginx目录及文件权限设置

安全的权限:

为了保证apache的网站不遭受木马入侵上传及修改文件。

1.所有站点目录的用户和组都应该为root,

2.所有目录权限755;

3.所有文件的权限644;

注意网站的服务用户不能用root;

wKiom1ihYTLzM2PWAAA9fXqEg78146.jpg-wh_50

以上的权限设置可以做到防止黑客上传木马,以及修改站点文件,但是,合理的用户上传的内容也被据之门外了。那么如何解决可以让合法的用户传文件又不至于被黑客利用攻击呐?

这就是对业务进行分离,在比较好的网站业务架构中,应该把资源文件,包括用户上传的图片,附件等的服务和程序服务分离,最好把上传程序服务也分离,这样就可以从容按照前面安全的标准来进行授权了。

                       缺一个把资源文件,包括用户上传图片,包括上传程序液分离的图

wKioL1ihYVGRDQ6SAABPToGVt8U574.jpg-wh_50

大多数公司的不是很安全的授权如下:

1)chown -R 777 /sitedir(最不安全的)

2)chown -R apache.apache /sitedir(最不安全的)

如果按照大多数公司授权一般公司的授权,会给网站带来非常大的安全隐患。

wKiom1ihYXOg9-ccAACqptcQo5o915.jpg-wh_50










本文转自 妙曼  51CTO博客,原文链接:http://blog.51cto.com/yanruohan/1897329,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Tkinter 入门之旅
Tkinter 作为 Python 的标准库,是非常流行的 Python GUI 工具,同时也是非常容易学习的,今天我们就来开启 Tkinter 的入门之旅
4 0
Redis 简介
Redis 简介 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 开发的 key-value 存储系统。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 Redis 官网:https://redis.io/ Redi
6 0
Python MySQL数据库4:MySQL与Python交互(下)
Python MySQL数据库4:MySQL与Python交互(下)
5 0
Python MySQL数据库5:MySQL高级知识&账户管理&主从同步配置(上)
Python MySQL数据库5:MySQL高级知识&账户管理&主从同步配置(上)
4 0
电脑弹窗广告怎么彻底关闭
电脑在开机或者使用过程中让人最反感的就是弹窗广告,删了一个又一个,关键是明天还是接着出,一方面影响视觉体验,另一方面会使电脑运行速度变慢。今天就带你搞定它
4 0
阿里云轻量应用服务器和ECS突发性能t6有什么区别?
阿里云服务器ECS突发性能型t6和轻量应用服务器如何选择?一个限制CPU基准性能,一个100% CPU性能
12 0
Python mini-web框架1:WSGI-mini-web框架
Python mini-web框架1:WSGI-mini-web框架
7 0
Dubbo整合zookeeper/redis/Multicast作为注册中心
Dubbo官方推荐使用Zookeeper作为注册中心
3 0
在这个大数据时代,如何保护好自己的隐私?
前言 你们被没有任何交集的陌生人加过微信吗?有被广告电话骚扰过吗?有被陌生人打过电话吗?有收到过诈骗、贷款电话或短信吗?等等 我发这篇文章只是为了提醒在座的各位要在这个信息时代注意保护好自己的个人隐私,可不是让你们去犯事啊!虽然我也会一些搜索,但这个东西真不能细讲,毕竟是涉及隐私的事,可是犯法啊!
6 0
iOS Mac本地搭建Apache服务器
iOS Mac本地搭建Apache服务器
4 0
+关注
20381
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载