标签为 Nginx 的文章

Nginx+PHP(FastCGI)+MySQL在小内存VPS(t1.micro)上的安装配置与优化

参考资料:
http://blog.s135.com/nginx_php_v6/
http://blog.s135.com/post/375/

背景介绍:
以前,因为AWS EC2的价格比较昂贵而租用了其它国外小厂商的VPS,在使用了3年多之后,发现AWS EC2的价格居然比现在正在使用的VPS还要便宜。
全球线路与速度最理想的日本节点的t1.micro型号,选择3年长期合约的价格在3000元人民币左右,一年下来也不到1000元,所以就打算将Blog迁移到AWS EC2上。
ec2_tokyo_t1_micro

之前在部署VPS环境的时候,基本上是完整的参考了张宴的两篇文档,包括操作系统的选择也是相同的。
但这一次我想采用目前较新的CentOS 6.4 minimal x86_64
同时选择版本最新的Nginx,PHP以及MySQL,引入EPEL仓库来简化安装与部署过程中对额外的依赖软件的安装,优化一些原来的工作方式,比如创建服务管理脚本来启动/停止Nginx与MySQL,使用logrotate来切割日志等;
经过了一番折腾,在填了不少的坑之后,终于成功的完成了新环境的部署,感觉非常不错。

下面,就是此次的整个安装配置过程:
1. 安装常用工具
yum install -y vim wget unzip screen tree mlocate

2. 安装编译工具
yum install -y gcc gcc-c++ autoconf patch cmake automake

3. 安装EPEL仓库
yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

4. 安装所有必需的软件包
yum install -y libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel
yum install -y libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gmp gmp-devel
yum install -y bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel unixODBC unixODBC-devel
yum install -y krb5-libs krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel
yum install -y libgcrypt libgcrypt-devel libtool
yum install -y libmcrypt libmcrypt-devel mhash mhash-devel mcrypt pcre pcre-devel
yum install -y ImageMagick ImageMagick-devel

5. 下载所有必需的软件源码包
mkdir /root/packages
cd /root/packages
wget http://nginx.org/download/nginx-1.4.7.tar.gz
wget http://museum.php.net/php5/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.36.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://pecl.php.net/get/imagick-3.2.0RC1.tgz
wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2

6. 编译安装iconv
cd /root/packages
tar xzvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make
make install
阅读全文 »

, , , , , ,

2 Comments

使用Tengine替代Nginx作为负载均衡服务器

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

而本文章中的配置参数,都已经在生产环境中得到应用,针对10万高并发的状态以及8核CPU做了相应的优化。

1. 增大Nginx用户的open files数值
[root@idc1-server1 ~]$ sudo -i
[root@idc1-server1 ~]# vim /etc/security/limits.conf

 
nginx hard nofile 102400
nginx soft nofile 102400

2. 优化内核参数
[root@idc1-server1 ~]# vim /etc/sysctl.conf

 
# For Nginx
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
fs.file-max = 102400

[root@idc1-server1 ~]# sysctl -p

3. 安装并配置Tengine
[root@idc1-server1 ~]# /etc/init.d/nginx stop
[root@idc1-server1 ~]# yum erase nginx
[root@idc1-server1 ~]# useradd -M -g nginx -d /opt/tengine -s /sbin/nologin -c "Nginx web server" nginx

[root@idc1-server1 ~]# mkdir -p /root/dong/downloads/
[root@idc1-server1 ~]# cd /root/dong/downloads/
[root@idc1-server1 downloads]# yum install gcc gcc-c+= pcre-devel openssl openssl-devel
[root@idc1-server1 downloads]# wget http://tengine.taobao.org/download/tengine-2.0.0.tar.gz
[root@idc1-server1 downloads]# tar xzvf tengine-2.0.0.tar.gz
[root@idc1-server1 downloads]# cd tengine-2.0.0
[root@idc1-server1 tengine-2.0.0]# ./configure --prefix=/opt/tengine
[root@idc1-server1 tengine-2.0.0]# make
[root@idc1-server1 tengine-2.0.0]# make install
阅读全文 »

,

2 Comments

Nginx源码编译安装与负载均衡配置实践

参考文档:
http://blog.s135.com/post/306/
http://wangyan.org/blog/install-nginx-from-source.html

安装与配置实践:
1. 安装pcre库,使Nginx支持正则表达式
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
# tar -xzvf pcre-8.30.tar.gz
注:不需要执行编译和安装过程(系统通常已经安装有较低版本的RPM包),因此仅作为编译Nginx时的引用。

2. 安装zlib库
wget http://sourceforge.net/projects/libpng/files/zlib/1.2.6/zlib-1.2.6.tar.gz/download
tar -xzvf zlib-1.2.6.tar.gz
注:不需要执行编译和安装过程(系统通常已经安装有较低版本的RPM包),因此仅作为编译Nginx时的引用。

3. 编译安装Nginx
# wget http://nginx.org/download/nginx-1.1.9.tar.gz
# tar -xzvf nginx-1.1.9.tar.gz

# mkdir -p /opt/nginx/tmp
# mkdir -p /opt/nginx/run
# mkdir -p /opt/nginx/lock

# useradd nginx

# cd nginx-1.1.9
# ./configure --prefix=/opt/nginx \
--user=nginx \
--group=nginx \
--pid-path=/opt/nginx/run/nginx.pid \
--lock-path=/opt/nginx/lock/nginx.lock \
--with-http_ssl_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-pcre=../pcre-8.30 \
--with-zlib=../zlib-1.2.6 \
--with-debug \
--http-client-body-temp-path=/opt/nginx/tmp/client \
--http-proxy-temp-path=/opt/nginx/tmp/proxy \
--http-fastcgi-temp-path=/opt/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/opt/nginx/tmp/uwsgi \
--http-scgi-temp-path=/opt/nginx/tmp/scgi

参数详解:
--prefix #nginx安装目录,默认在/usr/local/nginx
--user=nginx #运行nginx的用户
--group=nginx #运行nginx的用户组
--pid-path #pid问件位置,默认在logs目录
--lock-path #lock问件位置,默认在logs目录
--with-http_ssl_module #开启HTTP SSL模块,以支持HTTPS请求。
--with-http_dav_module #开启WebDAV扩展动作模块,可为文件和目录指定权限
--with-http_flv_module #支持对FLV文件的拖动播放
--with-http_realip_module #支持显示真实来源IP地址
--with-http_gzip_static_module #预压缩文件传前检查,防止文件被重复压缩
--with-http_stub_status_module #取得一些nginx的运行状态
--with-mail #允许POP3/IMAP4/SMTP代理模块
--with-mail_ssl_module #允许POP3/IMAP/SMTP可以使用SSL/TLS
--with-pcre=../pcre-8.11 #指定未安装的pcre路径
--with-zlib=../zlib-1.2.5 #注意是未安装的zlib路径
--with-debug #允许调试日志
--http-client-body-temp-path #客户端请求临时文件路径
--http-proxy-temp-path #设置http proxy临时文件路径
--http-fastcgi-temp-path #设置http fastcgi临时文件路径
--http-uwsgi-temp-path #设置uwsgi 临时文件路径
--http-scgi-temp-path #设置scgi 临时文件路径

# make && make install

安装完成后会看到以下信息:
阅读全文 »

1 Comment

Nginx平滑升级到稳定版1.0.0

经过9年的开发,Nginx 终于迎来了1.0版本,可通过svn://svn.nginx.org 获取源码。Nginx 的第一个公开发布的版本 0.1.0 是在 2004年10月4日发布的,在这几年时间里,Nginx可谓是已经誉满天下了。
根据Netcraft 2011年4月份的Web服务器调查报告显示,Nginx的全球份额已达6.52%,未来它一定还会有更好的表现。

好了,现在我们开始将Nginx平滑升级到稳定版1.0.0。
1、下载最新的Nginx源码安装包
wget http://nginx.org/download/nginx-1.0.0.tar.gz

2、配置并编译Nginx(不要执行make install步骤)
# tar zxvf nginx-1.0.0.tar.gz

# cd nginx-1.0.0
#./configure --user=www --group=www --prefix=/web/nginx --with-http_stub_status_module --with-http_ssl_module

# make
(make编译下就OK,不要执行make install。)

3、替换旧版本的Nginx
#mv /web/nginx/sbin/nginx /web/nginx/sbin/nginx.old
备份旧版本的nginx的二进制文件。

# cd objs/
在objs目录下可以看到刚刚编译好的新版本的nginx的二进制文件。

# cp nginx /web/nginx/sbin/
复制新版本的nginx文件到你的nginx目录。

# /web/nginx/sbin/nginx -t
测试新版本的nginx是否配置正常。如果提示:
the configuration file /web/nginx/conf/nginx.conf syntax is ok
configuration file /web/nginx/conf/nginx.conf test is successful
则表示配置正确。

# kill -USR2 `cat /web/nginx/nginx.pid`
让nginx把nginx.pid改成nginx.pid.oldbin并接着启动新的nginx。

# kill -QUIT `cat /web/nginx/nginx.pid.oldbin`
退出旧版本的nignx。

4、确认升级是否完成
整个升级过程就完成了,最后确认一下升级是否成功。
#/web/nginx/sbin/nginx -s reload
重新加载配置。

# /web/nginx/sbin/nginx -v
获取Nginx版本信息,如果提示:
nginx version: nginx/1.0.0
则表示升级成功。

No Comments

Nginx0.8.x+PHP5.2.14+Mysql5.5.3在小内存VPS服务器上的安装配置与优化

注:该文档大量参考了 张宴 的两篇原创文章,在此表示由衷的感谢。

两篇文章链接如下:
http://blog.s135.com/post/375/
http://blog.s135.com/nginx_php_v6/

但是,由于我所采用的Nginx,Php,Mysql的版本都要比张宴在第一篇文章中的版本高一些,所以在实际的安装过程中,并非一帆风顺,主要是在编译的参数和配置文件方面出现了一些问题,好在最后都得以解决。因此,我将整个过程记录了下来,以供大家参考。

阅读全文 »

, , , ,

4 Comments