1. 关于API访问频率限制的一个问题

    工作中涉及一些对外开放的无需特殊权限的API,用户会因为某些需求而通过程序来频繁访问这些API,导致系统的负载陡增,可能影响系统其它功能的正常使用。虽然做了一些优化让这种API尽可能地轻量,但仍然不够,因此需要进行访问频率的限制。

    由于这样的API并不多,所以我们并没有在Nginx这样的反向代理接入层中实现频率限制,而是API自己去实现,而且实现方案比较粗糙 - 基于Memcached的缓存自动过期特性。

    方案的PHP示例实现如下所示:

    // 每个IP一分钟10次
    $limit = 10;
    
    $cache = new Memcached();
    $cache->addServer('127.0.0.1', 11211);
    
    $key = __FUNCTION__.$_SERVER['REMOTE_ADDR'];
    $requestNum = $cache->get($key);
    
    if ($requestNum !== FALSE && $requestNum > 10) {
        echo json_encode(array(
            'code' => 403,
            'message' => '请求太频繁,请一分钟后再试',
        ));
        return;
    }
    
    $cache->add …
    Tagged as : Nginx 笔记 工作
  2. 高流量站点NGINX与PHP-fpm配置优化(译)

    原文:Optimizing NGINX and PHP-fpm for high traffic sites

    译者:youngsterxyf

    使用Nginx搭配PHP已有7年的这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置。

    以下正是这方面的一些提示和建议:

    1. 将TCP切换为UNIX域套接字

    UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。

    但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。

    upstream backend
    {
        # UNIX domain sockets
        server unix:/var/run/fastcgi.sock;
    
        # TCP sockets
        # server 127.0.0.1:8080;
    }
    

    2. 调整工作进程数

    现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。

    多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。

    运行以下命令可以获知你的机器有多少个处理器:

    Linux上 …

    Tagged as : Nginx PHP 服务器
  3. 搭建测试服务器(源码编译方式)

    目前工作中开发流程还比较初级,甚至连测试服务器都没有,代码的变更都是直接先在开发人员的本地机器上简单测试一下,然后直接部署到生产服务器上,这就相当于生产服务器同时充当了测试服务器的角色,虽然开发的是面向公司内部的系统,但作为一个有理想有追求的码农,是不允许这样粗糙混乱的开发流程的,所以申请了台服务器,自己搭建个测试服务器。

    由于公司的服务器统一使用SUSE Linux Server操作系统,并且版本较老。与Ubuntu、Centos等Linux发行版不同,SUSE Linux没有可用的软件源(不知是否与OpenSUSE的软件源兼容?),即没法使用系统的软件包管理工具。这样问题就很多了。

    我选择源码编译的方式来安装所有涉及的软件。也许有人会说,为什么不在网络上查找RPM包然后安装呢?那么先想一下RPM包本质上是个什么东西呢?RPM包(以及DEB包)其实就是将编译好的一些程序以一定的规则打包在一起,然后系统的包管理工具(yum、zypper)按照相同的规则(在依赖满足的情况下)将RPM包里文件复制到指定好的目录里。如果RPM包的依赖没有解决,是无法成功安装的。即使安装好了,若程序依赖的动态链接库等不存在或版本不匹配,也是无法正确运行的,比如libc库的版本过低,但明显你不能轻易替换libc库,因为系统中已安装的很多程序都依赖于libc库。那么相比源码编译方式,RPM包方式的问题更难解决。

    需要安装的软件有Nginx、PHP、MySQL、Memcached、Redis、Mongodb …

  4. ubuntu12.04+ngnix+php-fastcgi+mysql+memcached网站开发测试环境搭建

    1. 安装必要的软件

    sudo apt-get install nginx php5-cli php5-cgi spawn-fcgi psmisc mysql-server \
    mysql-client php5-mysql memcached php5-memcache php5-curl php5-gd
    

    2. 打开浏览器访问: 127.0.0.1。就能看到表示nginx安装成功的页面。但这时访问php文件页面还不行。 (注:ngnix的配置文件目录为/etc/ngnix/,默认网站根目录为/usr/share/ngnix/www/;php配置文件目录为/etc/php5/)

    3. 编辑文件/etc/ngnix/sites-available/default,内容如下(可以先把原文件备份一下):

    server {
        #listen   80; ## listen for …
    Tagged as : Linux Nginx PHP

Page 1 / 1