nginx网站架构优化思路(原)
本人接触的优化主要分为三大类 黑体的为本模块下的重点
---------------安全优化
安全在生产场景中是第一位的
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 reload
重新访问以下站点目录 带有图片的网页 然后可以看到/tmp目录下生成了缓存文件 ,通过配置 日志参数 添加 $upstream_cache_status 再次访问 可以检测是否去使用了缓存 如果状态为hit说明命中 配置成功
好了 总结了一个多小时 关于nginx优化如果大家有更好的方法 欢迎一起探讨
nginx网站架构优化思路(原)的更多相关文章
- 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710
1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...
- 【nginx网站性能优化篇(3)】反向代理实现负载均衡
注意,本篇文章为负载均衡的理论篇,后续找个机会推出实战篇.理论篇主要讲述如何配置负载均衡,配置负载均衡不难.难的是真正的实战,比如如何做到多服务器之间的数据共享(session,file等),多cac ...
- 【nginx网站性能优化篇(2)】反向代理实现Apache与Nginx的动静分离(LNMPA)
为什么要使用反向代理 具体请参考这篇博文:[Linux常识篇(1)]所谓的正向代理与反向代理 在虚拟机上配置反向代理的步骤 首先假设你已经假设好了LNMP架构了,这时我们还要安装Apache和php, ...
- 【nginx网站性能优化篇(1)】gzip压缩与expire浏览器缓存
gzip压缩 概述 网页在服务器端经过了gzip或者其他格式的压缩后的输出明显减少了content-length字节,当访问过百万时,这些减少的字节就会变为客观的流量给节约下来;从而减轻服务器的压力以 ...
- nginx ssl通讯优化思路
TLS通讯过程中主要做的两件事情: 1.交换密钥 2.加密数据 如果优化的话,主要也是从这两个点来考虑优化: 1.nginx 打开session cache 如一天内不需要再次协商密钥. 2.小文件较 ...
- Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率
Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- 企业级Nginx服务基础到架构优化详解
1.隐藏nginx header版本号 2.更改源码隐藏软件名称 3.更改nginx默认用户及用户组 4.配置nginx worker进程个数 5.根据CPU核数进行nginx进程优化 6.nginx ...
- Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)
四,Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog,sns产品,这几个产品都有一个共同特点,就 ...
- 企业级Nginx Web服务优化实战
web优化一览总结表 优化类型 优化说明 优化方法 安全优化 隐藏nginx版本信息优化 修改nginx配置文件实现优化 server_tokens off: 修改nginx版本信息优化 修改ngin ...
随机推荐
- Express4+Mongodb极简入门实例
一.准备工作: 1.启动mongodb:bin目录下运行 2.在test数据库里插入一条数据: 二.正式开始: 1.通过应用生成器工具 express 快速创建一个应用的骨架,参考Express中文网 ...
- FJ省队集训最终测试 T2
思路:发现如果一个人一共选了x个点,那么选中某一个点对的概率都是一样的,一个人选x个点的总方案是C(n,x),一个人选中某个点对的总方案是C(n-2,x-2),这样,那么选中某个点对的概率就是 x*( ...
- Qt编程之对QGraphicsItem点击右键弹出菜单
就是对这个contextMenuEvent 事件重新实现,在这个事件函数中创建菜单,大概就是这样. void MyItem::contextMenuEvent(QGraphicsSceneContex ...
- CH Round #53-数据备份
描述 已知有N座办公楼位于同一条街上.你决定给这些办公楼配对(两个一组).每一对办公楼可以通过在这两个建筑物之间铺设网络电缆使得它们可以互相备 份.然而,网络电缆的费用很高.当地电信公司仅能为你提供K ...
- 【转】Android开源项目发现---ListView篇(持续更新)
原文网址:http://blog.csdn.net/krislight/article/details/20211045 资料转载地址:https://github.com/Trinea/androi ...
- .net中除去IList中的多余项
IList<ActionInfo> tempList = new List<ActionInfo>(); IList<ActionInfo> tempActionL ...
- javascript笔记3之数据类型
/* var box = 250; //十进制整型 alert(box); var box = 070; //八进制,按照十进制输出是56 alert(box); var box = 0x1f; // ...
- Struts分页的一个实现
在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理.要是稍不留神,时不时出点问题就更郁闷了.我现在做的一个 ...
- banner背景通栏
background: #76CEF6 url("../images/bg.jpg") repeat-x 0 0; -webkit-background-size: 100%; ...
- java 版本SQLHelper
package com.jack.SQLHelper; import java.sql.*;import java.util.logging.*;import javax.swing.table.*; ...