设为首页 收藏本站
查看: 907|回复: 0

[经验分享] nginx网站架构优化思路(原)

[复制链接]

尚未签到

发表于 2017-12-22 18:58:10 | 显示全部楼层 |阅读模式
  本人接触的优化主要分为三大类 黑体的为本模块下的重点
  ---------------安全优化
  安全在生产场景中是第一位的
  1.1 站点目录权限的优化 (修改权限755 644 所属用户root,需要上传的目录给予nginx权限
  1.2 防盗连接的优化(通过$http_referer实现判断用户来源,对非法的referer 返回错误代码)这一点如果没做 站点流量会上升(帮别人做广告),可能会给公司造成而外的经济损失
  1.3 日志权限的优化,日志权限不要给nginx用户,日志是分析问题和数据的重要文件,安全必须考虑
  1.4 重要目录迁移或者用目录访问控制用(allow,deny实现)例如配置文件或者程序安装目录
  1.5 上传目录下禁止动态程序的解析(例如static目录下禁止运行扩展名为php py pl sh的文件)防止木马程序上传之后运行
  1.6 防止域名恶意解析(建立默认ip访问规则),即当用户直接用ip访问的时候 我们返回501错误  类似jd taobao(实现方法建立一个default.conf 配置默认返回501
  1.7 为nginx降权 实现普通用户启动管理nginx服务
  1.8 隐藏nginx版本 通过server_tokens off实现 很基本
  1.9 站点防止爬虫优化 可以在站点 根目录下建立robots.txt 告知相应的防止爬虫优化,然后通过nginx的http_user_agent 参数实现访问控制
  -----------------性能优化
  性能和安全是互为负相关的方面 最好取其平衡
  2.1    日志优化 在真是rs服务器上关闭静态资源日志记录的功能(l例如jpg css js等)如果并发很大的情况下 要关闭真实服务器的日志记录功能 ,因为日志记录消耗资源io很明显 在负载均衡上开启日志记录即可。
  2.2    配置主要标签的worker_processes数量 根据cpu核数 确定一般是1:1 对多不超过二倍
  2.3    配置cpu亲和力worker_cpu_affinity 平均分配cpu资源
  2.4    配置worker打开的文件数量 worker_rlimit_nofile
  2.5    配置event 标签 调整连接数worker_connections 生产场景一般为4096
  2.6    开启高效传输模式 sendfile on
  2.7    开启资源压缩 gzip on (gzip_comp_level 6 gzip_min_length gzip_types gzip_http_version gzip_buffers )可以通过yslow 浏览器插件检查站点是否启用压缩
  2.8    开启缓存 expires 一般在静态资源下开启缓存功能 例如图片 css (expires 365d,经常变换的图片或者资源要尽量改的时间短一点,因为有些东西不希望到的是未更新的 例如广告
  2.9    fastcgi相关参数的优化,以及基于内核的参数优化 sysctl.conf
  -------------------架构优化
  架构优化的目的是综合提升性能和安全
  实现原理是把不同的资源(通过扩展名实现)进行拆分,不同的访问进行拆分(通过url实现)也可以叫做解耦,通过这样操作可以提升静态资源的访问效率
  3.1通过nginx的代理功能对有固定域名的资源 进行不同服务器的指向 把动态静态资源分不同的upstream访问 这样静态资源服务器上不用安装相应的动态资源解析程序 例如tomcat 和php  一般大公司会选择这样的方案 例如淘宝图片服务器 static.taobao.com等等
  配置案例
  server {
  listen       80;
  server_name  dynamic.wanda.cn;
  location / {
  proxy_pass http://dynamic_pool;
  }
  }
  server {
  listen       80;
  server_name  static.wanda.cn;
  location / {
  proxy_pass http://static_pool;
  }
  }
  3.2如果站点没有实现动静资源域名独立 那么可以通过nginx的基于目录和扩展名的的proxy_pass 进行动态静态 资源的不同服务器rs节点的指向 。这一点是中小企业方案
  server {
  listen 80;
  server_name www.wanda.cn;
  location /static {
  proxy_pass http://image_pool;
  }
  location / {  #默认包含了动态和静态
  proxy_pass http://dynamic_pool;
  }
  }
  3.3 如果条件准许,最好在nginx代理上面加上proxy_cache的功能 缓存rs节点的静态资源,减少对rs后端的请求,相同的资源 减少请求 就提升了性能
  简单介绍一下nginx_cache的实现思路:
  首先在nginx代理服务器上 建立一个目录 (挂载到内存下面的 tmpfs格式文件系统)
  mount -t tmpfs tmpfs /tmp
  然后,在nginx的http标签内 添加以下参数 告知nginx代理 缓存的路径在哪 缓存的zone名称是什么 我们的名字就叫cache 大小为64m缓存
  proxy_cache_path /tmp levels=1:2 keys_zone=cache:64m;
  在server标签下  加入以下红色内容
  server {
  listen       80;
  server_name  www.wanda.cn;
  location / {
  proxy_pass http://dynamic_pool;
  proxy_cache cache;
  }
  }

  重启nginx -s>  重新访问以下站点目录 带有图片的网页 然后可以看到/tmp目录下生成了缓存文件  ,通过配置 日志参数 添加 $upstream_cache_status 再次访问 可以检测是否去使用了缓存 如果状态为hit说明命中 配置成功
  好了 总结了一个多小时 关于nginx优化如果大家有更好的方法 欢迎一起探讨

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-426940-1-1.html 上篇帖子: 使用NGINX+Openresty实现WAF功能 下篇帖子: 思而不学则殆
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表