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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

企业级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,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
28天前
|
XML JSON 数据安全/隐私保护
Web服务
【10月更文挑战第18天】Web服务
44 9
|
28天前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
149 69
|
9天前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。
|
10天前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
27 3
|
11天前
|
JSON Go UED
Go Web服务中如何优雅关机?
在构建 Web 服务时,优雅关机是一个关键的技术点,它确保服务关闭时所有正在处理的请求都能顺利完成。本文通过一个简单的 Go 语言示例,展示了如何使用 Gin 框架实现优雅关机。通过捕获系统信号和使用 `http.Server` 的 `Shutdown` 方法,我们可以在服务关闭前等待所有请求处理完毕,从而提升用户体验,避免数据丢失或不一致。
15 1
|
17天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
28天前
|
XML JSON 安全
定义Web服务
【10月更文挑战第18天】定义Web服务
60 12
|
27天前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
29天前
|
机器学习/深度学习 缓存 监控
利用机器学习优化Web性能和用户体验
【10月更文挑战第16天】本文探讨了如何利用机器学习技术优化Web性能和用户体验。通过分析用户行为和性能数据,机器学习可以实现动态资源优化、预测性缓存、性能瓶颈检测和自适应用户体验。文章还介绍了实施步骤和实战技巧,帮助开发者更有效地提升Web应用的速度和用户满意度。
|
1月前
|
XML 关系型数据库 MySQL
Web Services 服务 是不是过时了?创建 Web Services 服务实例
本文讨论了WebServices(基于SOAP协议)与WebAPI(基于RESTful)在开发中的应用,回顾了WebServices的历史特点,比较了两者在技术栈、轻量化和适用场景的差异,并分享了使用VB.net开发WebServices的具体配置步骤和疑问。
22 0