Leo の Blog Where there is a will there is a way! Trust youself can do it!

28五/090

干净 Linux 环境里安装 Nginx

今天碰到一个很有意思的事情. 在一台刚装好的 command-line linux 系统里安装 Nginx 的时候总出错. 查看了一下. 原来装的是 Base System. 所以很多包都没有默认安装. 难怪编译不过去了. 看了一下 Nginx 的 configure 参数, 只需给它指定一下参数源码包的路径即可. 这里还是用的是 Ubuntu-8.04.2 系统. 安装的是 base system.

这里先装一下编译工具和常用包.

1
sudo apt-get install make gcc build-essential autoconf automake1.9 flex libtool zlib1g-dev

安装 Nginx-0.7.59 需要额外三个包, 分别是 pcre, openssl, zlib 分别下载好假定放入系统用户主目录 ~/downs 下. pcre 包需要手动安装. 其他的就不需要了.

1
2
3
4
5
6
7
8
9
10
11
12
13
cd ~/downs
tar -zxf pcre-7.9.tar.gz -C ~/sources
cd ~/sources/pcre-7.9
./configure
make
sudo make install
tar -zxf ~/downs/zlib-1.2.3.tar.gz -C ~/sources
tar -zxf ~/downs/openssl-0.9.8g.tar.gz -C ~/sources
tar -zxf ~/downs/nginx-0.7.59.tar.gz -C ~/sources
cd ~/sources
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-zlib=/home/mm/sources/zlib-1.2.3 --with-openssl=/home/mm/sources/openssl-0.9.8g --with-md5=/usr/lib --with-sha1=/usr/lib
make
sudo make install

这样安装就没有问题了. Nginx 自己去编译 zlib 和 openssl 的源码.  汗!

27五/090

快速搭建Linux开发测试WEB服务器系列13-Nginx部署实例1-准备服务器

现在我们准备服务器. 使用 VMware 虚拟机软件创建个Linux虚拟机. 分配给256M 内存即可. 载入 ubuntu-8.04.2-altername.iso 映像文件. 启动虚拟机. 安装 base-system (command-line system). 安装方法参考前面的文章. 安装完成后修改源地址, 使用 cn99 的源, 不装任何window包. 也不用中文支持, 我们只需要命令行界面即可, 这样可以节省资源. 安装完成后的系统大概 在 700M 左右的样子. 内存占用在 100 M 以下. 我们只要安装一台基本的虚拟机即可. 后面的各个不同的系统都是基于这个基本系统然后再加上相关的软件包.

现在我们给这个基本系统安装一下编译经常用到的工具.

1
2
3
sudo apt-get install make gcc build-essential autoconf automake1.9 flex libtool
sudo apt-get autoclean
sudo apt-get  clean

基本系统已经准备OK, 这里还有点可以选择修改的. 那就是我们装的是E文系统. 默认是外国时区. 选择修改成中国上海时间. 执行 tzselect 后依次选择即可 , 大概选择的数字为: 5,9,1,1

1
2
3
tzselect
sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime
sudo ntpdate cn.pool.ntp.org

另外个人觉得字符界面默认显示的分辨率太小了. 好像是 640 X 480 的. 可以改的大一点. 看起来舒服点. 看个人的屏幕了. 我这里是改成 800 X 600 的. 修改 /boot/grub/men.lst 文件. 需要管理员权限. 找到

kernel      /boot/vmlinux-xxxxxx 这一行, 最后面加上空格然后加: vga=788 这样就是 16位的 800 X 600 的分辨率了. 这里再给出几个其他分辨率值. 都是基于 16 位显示模式的. 785(640 * 480), 791(1024 * 768), 794(1280 * 1024), 834(1400 * 1050), 884(1600 * 1200). 其他的请参考: http://spblinux.de/2.0/grub.htm 不会改的这里建议不要修改, 否则小心系统启动出错. :)

现在可以关闭虚拟机了. 我们对这个虚拟机进行 克隆. 一下生成我们所需要的任意服务器. 这里说一下 克隆完虚拟机后必要的操作. 每个克隆完的虚拟机都要进行该操作. 因为克隆完后的虚拟机, VMware 已经对克隆的虚拟机的MAC地址进行了修改. 但是我们的系统还是认为是以前的MAC地址. 所以会出现无法联网的情况. 而且主机名也还没被该. 这里以数据库服务器虚拟机为例. 修改方法如下:

启动克隆后的虚拟机. 输入帐号和密码进入系统. 修改主机名,修改 /etc/hosts 文件. 把 127.0.0.1  BaseUbuntu 换成 127.0.0.1  MysqlHost 保存退出. 修改 /etc/hostname 文件, 删除所有内容, 然后输入 MysqlHost 保存退出.删除 /etc/udev/rules.d/70-persistent-net.rules 文件, 重启虚拟机系统会自动识别新网卡.

1
2
3
4
sudo vim /etc/hosts
sudo vim /etc/hostname
sudo rm /etc/udev/rules.d/70-persistent-net.rules
sudo reboot

再这之前虚拟机要重启! 接下来 IP 地址也修改成手动指定的. MYSQL 服务器设定为IP: 192.168.1. 25 备份 /etc/network/interface 文件, 然后修改内容成下面的内容:

1
2
sudo mv /etc/network/interface /etc/network/interface.backup
sudo vim /etc/network/interface

auto eth0
iface eth0 inet static
address 192.168.1.25
netmask 255.255.255.0
gateway 192.168.1.1

auto lo
iface lo inet loopback

再修改DNS服务器地址: 这里以上海的电信DNS为准了.

1
sudo vim /etc/resolv.conf

nameserver 124.74.213.68
nameserver 202.96.209.133

重启网络服务.

1
2
sudo /etc/init.d/networking stop
sudo /etc/init.d/networking start

到这里, 从克隆一个虚拟机到改装成一个全新的虚拟机就OK了.  剩下的就给不同的服务器分别装上不同的软件即可.

我们再给各个服务器设定一下IP:和安装的相关的软件包.

Nginx服务器: 192.168.1.188, 软件包: nginx, pcre

PhpApp1服务器: 192.168.1.51 软件包: php-5.2.9, php-fpm, php相关扩展

PhpApp2服务器: 192.168.1.52 软件包和PhpApp1 一样

MySQL服务器: 192.168.1.25 软件包: mysql-5.1.3

Varnish 服务器: 测试时不用.

Memcache服务器: 测试时不用.

准备好上面的虚拟机后. 下篇我们根据这个系统介绍一下 Nginx 的配置.

27五/090

快速搭建Linux开发测试WEB服务器系列12-Nginx部署实例

这篇我们利用虚拟机搭建一套测试服务器系统. 其实主要是测试 Linux + Nginx + PHP(FasgCGI) + MySQL 这套系统.前篇简单的说了下 Nginx 的配置. 这里我们根据实际的情况详细的介绍 Nginx 配置文件的设置.

我们打算用虚拟机搭建一套下面的图示系统. 见图:

services

大概意思图上应该已经表示的非常的清楚了.  其实稍加修改, 可以作为中小型的WEB服务器参考方案. 而且效果也会非常的不错.

接下来用虚拟机就可以实现上面的环境, 后续文章我们相继再介绍. 不过这个需要个比较好的电脑, 像我这个 赛扬1.4, 945的板子 另加 1.5G 的内存的古董本本可能模拟起来有点难度. 不过先试试看了.  下篇我们就开始创建这些虚拟服务器了.

26五/090

快速搭建Linux开发测试WEB服务器系列11-配置Nginx

再上一篇我们已经安装好了Nginx软件, 这篇我们简单到介绍一下如何让他能工作起来. 这里我们只做最简单的配置. 如果想详细的了解这个服务器软件, 请参考它到官方文档.
Nginx 安装成功后程序文件会方在我们指定的 /usr/local/nginx 目录下. 和 apache 一样. 我们要先修改它到配置文件才能让它工作. 它到配置文件再 /usr/local/nginx/conf 目录下. 这里还有其他的一些配置文件, 比如 fastCGI 等. 我们只是做最简单到介绍. 其他到配置文件都使用默认即可. 主要修改一下 /usr/local/nginx/conf/nginx.conf 文件, 修改前备份一下. 养成好习惯.

1
2
sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.backup
sudo gedit /usr/local/nginx/conf/nginx.conf

里面已经有一些说明了. 这里我们先把它到内容改成下面到这样.

#用户和用户组
user mm mm;

#指令指定处理进程的数量。一般推荐为处理器的个数. 可以适当增加,以避免进程在堵塞在IO等待中。
worker_processes 1;

#错误日志
error_log logs/error.log;

#pid文件位置
pid logs/nginx.pid;

events {
#指定 nginx 处理进程的个数,其与总处理量的关系用公式表达如下:
#MaxClient = worker_processes * worker_connections
#因此这两个数的乘积若大于系统最大可用tcp/ip栈数是没有意义的.
worker_connections 1024;
}

#HTTP 请求设置
http {
#载入mime类型
include mime.types;
#默认类型
default_type application/octet-stream;

#日志的格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#访问日志
access_log logs/access.log main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on。
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络IO处理速度,降低系统 uptime。
sendfile on;

tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

#服务器设置
server {
#监听端口
listen 80;

#WEB服务主机名
server_name localhost;

#charset utf-8;

#反问日志
access_log logs/localhost.access.log main;

#请求规则 默认请求
location / {
#WEB根目录
root /home/mm/www;
#默认索引文件名
index index.html index.htm index.php;
}

#页面不存在处理
error_page 404 /404.html;

#服务器错误定向
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/mm/www;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ \.php$ {
root /home/mm/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/mm/www$fastcgi_script_name;
include fastcgi_params;
}

#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
}
}

上面到一个地方说明一下就是 /home/mm/www 这个目录是我到用户主目录下到 www 文件夹. 这里是作为 WEB 根目录到.这个目录建立好后, 建议 把 /usr/loca/nginx/html 目录下到文件COPY 到该目录下. 方便我们后面测试看到效果页面. 另外再建建立一个 html 文件 : 403.html 内容假设设置为
<h1>403</h1>
.
现在测试一下配置文件是否正确. 用 Nginx 测试一下.

1
sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

这里显示应该是:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

这样我们可以开启 Nginx 服务了. 如果上面命令出现 error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory 这样到错误到话, 就执行一下下面到命令,

1
2
cd /lib
sudo ln -s /usr/local/lib/libpcre.so.0.0.1 libpcre.so.0

关于 PHP 到 CGI 调度控制器 PHP-FPM , 我们要先启动它, 它到相关修改我们在上一篇已经介绍过. 这里直接启动它.

1
2
sudo /usr/local/php-cgi/sbin/php-fpm start
sudo /usr/local/nginx/sbin/nginx

现在打开浏览器, 在地址栏里输入 http://localhost , 很好. 我们看到了 Nginx 到欢迎页面了.
我们再测试一个不存在到页面请求到情况. 比如请求一个 http://localhost/xxx.html 看看. 是的. 我们看到了 404 页面了.
现在我们测试一下PHP支持到情况. 建立 /home/mm/www/phpinfo.php 文件, 输入 保存退出. 测试一下看看结果. http://localhost/phpinfo.php
另外如果想重启 nginx 服务请使用下面到命令即可:

1
sudo kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

这里, Nginx 简单到配置就到这里了. 下篇我们模拟一个中小型的WEB服务器构架来玩玩. 做饭时间了. :)

26五/090

快速搭建Linux开发测试WEB服务器系列10-Nginx+PHP

前面我们介绍到是 Apache + PHP 模式到解决方案. 现在介绍一个目前很流行也是很高效到一套Web服务器构架模式: Nginx + FastCgi + PHP 这样到服务器方案. 由于我们前面再介绍 Apache + PHP 的时候已经把 安装 PHP 环境到相关软件包都已经安装好了. 这篇我们注意介绍安装 Nginx 和 PHP 方面到内容. 若有问题, 请参考前面到系列文章.

我们重新编译安装一个 PHP 环境, 先前我们编译安装到是 PHP 环境是和 Apache 集成在一起到. 不能用于 FastCgi 模式. 安装路径再 /usr/local/php , 这里我们重新编译PHP并且安装到 /usr/local/php-cgi 这样不至于混在一起. php-5.2.9.tar.gz 我们已经下载好了. 这里要下载一个补丁包 php-5.2.9-fpm-0.5.10.diff.gz , 网站地址为: http://php-fpm.anight.org/ PHP-FPM 是一个很不错到 fastCgi 进程管理器. 效果很不错, 现在应用也很广泛. 不过目前还不是官方认可到扩展. 所以得给PHP打补丁, 编译时 PHP 才能认识这个东西.

先给工作站安装一下邮件发送程序:

1
sudo apt-get install sendmail

我们解压下载的PHP包, 并且打上补丁. 然后移动到我们编译源码存放到目录里. 之后编译安装 PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
tar -zxf php-5.2.9.tar.gz
gzip -cd php-5.2.9-fpm-0.5.10.diff.gz | patch -d php-5.2.9 -p1
mv php-5.2.9 ~/sources/php-5.2.9-fpm-patch
cd ~/sources/php-5.2.9-fpm-patch
./configure \
--prefix=/usr/local/php-cgi \
--enable-fpm \
--enable-fastcgi \
--enable-force-cgi-redirect \
--with-config-file-path=/usr/local/php-cgi \
--with-openssl \
--with-zlib \
--with-zlib-dir=/usr/local/zlib \
--enable-bcmath \
--enable-calendar \
--with-curl=/usr/local/curl \
--with-curlwrappers \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr/local/jpeg \
--with-png-dir=/usr/local \
--with-freetype-dir=/usr/local/freetype2 \
--enable-gd-native-ttf \
--with-gettext \
--with-mcrypt=/usr/local/libmcrypt \
--with-mhash=/usr/local/libmhash \
--enable-mbstring \
--enable-exif \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-xmlrpc \
--enable-soap \
--enable-sockets \
--enable-zip
make
sudo make install

同样, 如果想直接 COPY 上面到 configure 代码到话, 请COPY下面到这行. 上面到由于回车符 WIN 和 LINUX 到不能. configure 参数不一定能是上面指定到效果. 后面到 make , sudo make install 一样.

1
./configure --prefix=/usr/local/php-cgi --enable-fpm --enable-fastcgi --enable-force-cgi-redirect --with-config-file-path=/usr/local/php-cgi --with-openssl --with-zlib --with-zlib-dir=/usr/local/zlib --enable-bcmath --enable-calendar --with-curl=/usr/local/curl --with-curlwrappers --enable-ftp --with-gd --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local --with-freetype-dir=/usr/local/freetype2 --enable-gd-native-ttf --with-gettext --with-mcrypt=/usr/local/libmcrypt --with-mhash=/usr/local/libmhash --enable-mbstring --enable-exif --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-xmlrpc --enable-soap --enable-sockets --enable-zip

这里 PHP 就算安装完毕了. 我们再把配置文件COPY到指定到位置, 按照自己到需求修改即可.

1
2
sudo cp php.ini-recommended /usr/local/php-cgi/php.ini
sudo gedit /usr/local/php-cgi/php.ini

同样的, 我们给它也装上 memcache 和 imagick 扩展.使用我们前面已经下载好到包.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd ~/downs
tar -zxf memcache-2.2.5.tgz
rm package.xml
tar -zxf imagick-2.2.2.tgz
rm package.xml
mv memcache-2.2.5 ~/sources/memcache-2.2.5-cgi
mv imagick-2.2.2 ~/sources/imagick-2.2.2-cgi
cd ~/sources/memcache-2.2.5-cgi
/usr/local/php-cgi/bin/phpize
./configure --with-php-config=/usr/local/php-cgi/bin/php-config
make
sudo make install
cd ~/sources/imagick-2.2.2-cgi
/usr/local/php-cgi/bin/phpize
./configure --with-php-config=/usr/local/php-cgi/bin/php-config
make
sudo make install

/usr/local/php-cgi/php.ini 到文件修改设置和前面到文章里介绍到的一样. 这里不再说明.

由于我们是测试工作站. 有些服务专用账号我们就默认使用自己的登录账号了. 现在我们在自己到主目录下建立一个文件夹专门存放日志使用. 另外再建立一个文件夹作为网站项目到根目录.

1
2
3
4
cd ~
mkdir www
mkdir logs
mkdir logs/nginx

这里我们修改一下 php-fpm.conf 配置文件信息.

1
sudo gedit /usr/local/php-cgi/etc/php-fpm.conf

去掉所有被注释掉到代码. 其实就三行被注释掉了 :)

修改: <value name="display_errors">1</value>

修改: <value name="user">你到登录名</value>

修改: <value name="group">你所属到用户组, 不知道就写成你到登录名</value>

保存推出. 现在启动 php-fpm

1
sudo /usr/local/php-cgi/sbin/php-fpm start

再安装 Nginx 前, 先安装一个 Nginx 依赖到库 PCRE 可以到 http://www.pcre.org/ 上下载. 然后解压安装.

1
2
3
4
5
6
7
8
9
10
11
tar -zxf pcre-7.9.tar.gz -C ~/sources
cd ~/sources/pcre-7.9
./configure
make
sudo make install
cd ~/downs
tar -zxf nginx-0.7.59.tar.gz -C ~/sources
cd ~/sources/nginx-0.7.59
./configure --user=mm --group=mm --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
sudo make install

OK, Nginx 安装完成了. 接下来我们来配置这个服务器, 让它能正常到运行. 配置我们到下一篇讲. 比较麻烦. 这篇先到这里吧. 太累了. 睡觉先!