跳过导航.
首页

nginx

nginx图片服务器的架构方案

图片服务通常数据容量较大,而且访问也频繁,鉴于此,图片服务就会有两种问题,一是存储问题,二是访问量问题。
存储问题就是硬盘容量问题,花钱买硬盘就可以了,看似简单,但着实也是最苦的问题。按目前探索来看,最好的方式是:在任何时刻遇到硬盘空间不够时,买颗硬盘插上,最多改改配置,就能立刻利用;另外,硬盘要能充分利用,不然图片存储量大再加上备份,很恐怖,最好是每颗硬盘都用上100%的空间。
访问量也是个大问题,如果服务不允许防盗链,那么访问量会引起带宽、服务器压力等问题,有钱的话直接扔CDN,没钱或者有更多的钱,就自己做吧。根据垣古不变的真理“越老的图,访问量也相对较少”这一点,分成两大部分,一边处理最新的图片,一边处理老旧的图片。最新的图片访问量大,但存储量较少;老图片访问量低,但存储量大。
大概分析完了,开始制定方案。

一、拟定一个存储目录规则:
在现有的/a/b/abcde.jpg这样的hash方式下多加一个日期的目录变成:/200810/16/a/b/abcde.jpg或者/2008 /10/16/a/b/abcde.jpg。按日期制定这个目录规则后,就可以按年月来拆机器了。

二、分机器,分硬盘

新型的大型bbs架构(squid+nginx)

这个架构基于squid、nginx和lvs等技术,从架构上对bbs进行全面优化和保护,有如下特点:

1、高性能:所有的点击基本上全部由前端缓存负责,提供最快速的处理。

2、高保障度:不需考虑应用程序稳定与否、程序语言是何种、数据库是何种,都能从架构上保证稳定。

3、高可用性:对应用程序的修改达到最简化:在程序的某些地方加入清缓存的语句即可,当然还需要做页面静态化的工作和统计工作。



这个架构的特点和一些流程的说明:

1、主域名和图片域名分离

域名分离可以使流量分离,缓存策略分离等等,好处诸多。bbs初期一定要做好规划,将图片用另外的域名独立服务,即使没有足够机器,域名也要先分开。另外,图片服务器可以使用有别于主域名的另一个域名,一个好处是可以减少读取cookie对图片服务器的压力,另一个是提高安全性,避免cookie泄露。

2、使用LVS作为前端、二级代理和数据库的访问入口

给nginx加rewrite跳转

nginx中如果一个server节点有多个域名,并且在不是访问主域名的情况下如果进行rewrite跳转,会自动把域名转换成主域名。比如:

Nginx实现301跳转

以下示例实现非xxx.com域名访问一律301跳转到xxx.com


              if ($host != 'xxx.com') {
                    rewrite ^/(.*)$ http://xxx.com/$1 permanent;
              }



使用permanent,发送301永久定向,对搜索引擎更加友好

nginx下的rewrite设置

nginx 的 rewrite 设置比 apache 要简单灵活而且更加强大。类似于 c 的语法  

利用Nginx反向代理功能架设Ubuntu升级源


北师大的网络情况以前说过了,学校里必须过验证网关才能上外网。为了方便校内同学方便地(不费流量地)升级Ubuntu,也可以充分利用服务器的资源,做了个Ubutu校内的升级源。机器比较老,没有很大的硬盘,做个源的话至少需要上百G的空间,不太现实。于是Kangzj想了出这个方法,在校内一台能上外网的服务器上反向代理一个速度快的Ubuntu源。我选择的是中科大的Ubuntu源(谢谢),速度可以到10M。非常简单,建了一个虚拟主机,然后就解决问题了,下面附上nginx配置文件:

 
server {

       listen 80;

       server_name gnu.xinqing100.net;

       access_log /var/log/nginx/gnu.xinqing100.net.access.log;

nginx做为反向代理实现负载均衡的例子

上一篇文章中,

nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置

转载请注明原文链接:http://blog.csdn.net/omohe/archive/2009/07/10/4336731.aspx

版本:v1.0  作者:OMO 最后修改时间:2009.07.10

0 之前知识回顾:

1) 目前各种服务器HTTP Server对PHP的支持一共有三种:

a.通过HTTPServer内置的模块来实现,

Cannot modify header information – headers already sent by错误解决办法

如何在apache环境下调整设置,在这一篇里面已经有答案了。但如果是在nginx环境下呢?

.htaccess文件已经失效,那么就直接采用修改php.ini的方法。

打开php.ini文件(你应试比我清楚你的php.ini在哪里),找到

output_buffering =改为on或者任何数字

Nginx 0.6.35 的 server_names_hash_bucket_size 问题

在 Nginx 0.6.35 的版本中,配置多个 server  虚拟主机,必须要在配置文档中  http {  里头加上 server_names_hash_bucket_size   64; 这么一句

http {

    server_names_hash_bucket_size   64;

    include       mime.types;
    default_type  application/octet-stream;
    .............省略

}

 

不然不但 nginx 启动不了,而且 nginx -t 测试配置文档的时候会提示

同步内容