nginx设置后端保持长连接

nginx 做反向代理分发时,为了提高效率,最好使用长连接,以下是nginx 支持的几种后端长连接配置方案:

Nginx从 1.1.4 开始,实现了对后端机器的长连接支持,这是一个激动人心的改进,这意味着 Nginx 与后端机器的通信效率更高,后端机器的负担更低。

例如,对一个没有长连接支持的后端机器,会出现大量TIME_WAIT 状态的连接,使用以下命令验证之:

netstat -n | grep TIME_WAIT

经过查阅官方文档,其目前已经实现了http, fastcgi, memcache 协议的长连接支持。而之前的版本中仅支持memcache 协议。

memcache

启用到 memcache 服务器的长连接 在upstream 配置段中增加 keepalive N 指令即可:

upstream memcached_backend {
     server 127.0.0.1:11211;
     server 10.0.0.2:11211;
     keepalive 32;
}

server {
    ...
     location /memcached/ {
         set $memcached_key $uri;
         memcached_pass memcached_backend;
     }
}

fastcgi

启用fastcgi 长连接支持 除了需要在upstream 中配置 keepalive N 外,还需要在 location 中增加

fastcgi_keep_conn on;

upstream fastcgi_backend {
    server 127.0.0.1:9000;
    keepalive 8;
}

server {
     ...
     location /fastcgi/ {
         fastcgi_pass fastcgi_backend;
         fastcgi_keep_conn on;
         ...
     }
}

HTTP

启用对后端机器HTTP 长连接支持

upstream http_backend {
    server 127.0.0.1:8080; 
    keepalive 16;
}

server {
     ...
     location /http/ {
         proxy_pass http://http_backend;
         proxy_http_version 1.1;
         proxy_set_header Connection \;
         ...
     }
}

注意:需要设置nginx 代理请求的 http 协议版本号为 1.1, 以及清除掉 Connection 请求header, 官方文档描述:

For HTTP, the proxy_http_version directive should be set to “ 1.1 ” and the “ Connection ” header field should be cleared .

The connections parameter should be set low enough to allow upstream servers to process additional new incoming connections as well.

即是说:keepalive N 指令中 , N 的值应该尽可能设置小一些,以便后端机器可以同时接受新的连接。

centos系统lnmp(nginx,mysql,php)环境搭建

新拿到vps,基本是裸机环境,如果要搞wordpress或者php后台,就需要php环境。

本来想手动安装,结果发现lnmp的一键脚本有更新。作者已经更新了1.2版本,基本都可以选择最新的版本了。http://lnmp.org/install.html

安装成功!

如果你担心以上脚本的安全性,也可以自己亲手安装官方的版本

  • 安装mysql
yum install -y mysql-server mysql mysql-deve

开机启动

chkconfig mysqld on

设置密码

mysqladmin -uroot password 'newpassword'
  • 安装nginx

设置 yum源

vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=

安装

yum install nginx

如果需要添加www 用户和组

groupadd -f www
useradd -g www www
  • 安装apache

安装apache 主要是因为wordpress的静态url路由需要相应的组件。

yum install httpd
chkconfig httpd on