Linux&&nginx网站服务
- nginx服务基础
- 安装与运行控制
- 配置文件nginx.conf
- 基于域名的虚拟web主机
- LNMP架构及应用部署
- 构建LNMP网站平台
- php连接数据库测试页
- 在LNMP平台中部署web应用
nginx服务基础
**优势:**稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力
单台物理服务器可支持30000~50000个并发请求
Apache与nginx的区别:
apache是多进程的web服务;适合CPU密集型业务(CPU计算、sql查询等);
nginx是单进程的web服务;适合IO密集型业务(视频、音频站点等);高并发能力强;
多进程与单进程:
多个客户端请求由多个进程处理
多个客户端请求由单个进程处理
由于非CPU密集型业务占用CPU时间非常短,因此可以交由nginx的单进程快速处理而不会耽误处理其他业务。
如果nginx遇到了CPU密集型业务占据CPU时间比较多,cpu等待会影响其他业务的执行
服务器几核cpu就可以设置nginx启动几个单进程。
安装与运行控制
#预安装软件包
yum -y install pcre-devel zlib-devel
#创建运行用户、组
useradd -M -s /sbin/nologin nginx
#编译、安装nginx
tar zxf nginx-1.6.0.tar.gz
cd nginx-1.6.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
#创建链接文件
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
ls -l /usr/local/sbin/nginx
#配置文件测试
nginx -t
#启动nginx.使用默认配置文件;“-c 配置文件路径”选项可指定其他配置文件来启动。
nginx
#安装elinks浏览器。使用命令lynx也可以查看目标网页效果
yum -y install elinks
#查看nginx测试页
elinks http://localhost
#重新配置。选项“-s HUP”等同于“-1”。等同于reload
killall -s HUP nginx
#退出进程。选项“-s QUIT”等同于“-3”。等同于stop
killall -s QUIT nginx
#编写nginx服务脚本
vim /etc/init.d/nginx
#!/bin/bash
#- : 代表在所有运行级别当中都可以交由chkconfig管理控制
#chkconfig: - 99 20
#description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx" //主程序路径
PIDF="/usr/local/nginx/log/nginx.pid" //PID存放路径
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF) //根据PID终止nginx级才能拿
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF) //根据PID重载配置
*)
echo "Usage : $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#添加可执行权限
chmod +x /etc/init.d/nginx
#添加开机运行
chkconfig --add nginx
–with-http_stub_status_module : 模块。支持状态统计,便于查看服务器的连接信息。
./configure --help : 查看nginx可用的全部选项。
配置文件nginx.conf
vim /usr/lcoal/nginx/conf/nginx.conf
#第一大块:全局配置
#user nobody; //运行用户
worker_processes 1; //工作进程数量
#error_log logs/error.log; //错误日志文件位置
#pid logs/nginx.pid; //PID文件的位置
#第二大块:IO事件配置
#使用“events {}”界定标记,用来指定nginx进程的IO相应模型、每个进程处理的连接数。
events {
use epoll; //使用epoll模型
worker_connections 4096; //每个进程处理4096个连接
}
#第三大块:HTTP配置
#使用“http {}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持以及虚拟web主机、PHP解析。
#子界定标记为“server {}”。多站点对应多子界定标记“server {}”或多配置文件。
http {
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 on; //支持文件发送(下载)
#tcp_nopush on;
keepalive_timeout 65; //连接保持超时
#gzip on;
#子#子界定标记为-站点1
server { //站点1的监听配置
listen 80; //监听地址及端口
server_name www.test.com; //网站名称(FQDN)
charset utf-8; //网页的默认字符集
location / { //站点根目录配置。 http://location:80/
root html; //网站根目录的位置
index index.html index.php; //默认首页(索引页)。默认打开的网页文件
}
error_page 500 502 503 504 /50x.html //内部错误的反馈页面。如果报50*类型错误,给用户看哪个网页(50x.html)
location = /50x.html { //错误页面配置.http://location:80/50x.html
root html;
}
location /status { //访问位置为status.http://location:80/status
stub_status on; //打开状态统计功能。需配合启动 --with-http_stub_status_module模块使用
access_log off; //关闭此位置的日志记录
}
}
}
service nginx restart
配置语句的格式 : “关键字 值;”
建议设置工作进程数量worker_processes值等于CPU核数量
总处理连接数 = worker_connections * worker_processes
worker_connections : 一般在10000以下。
location / : 代表根目录
Active connections : 表示当前的活动连接数;server accepts handled requests : 表示已处理的连接信息;三个数字分别代表已处理的连接数、成功的TCP握手次数、已处理的请求数。
基于域名的虚拟web主机
#为不同域名创建不同的web站点
mkdir -p /var/www/xingfafa
echo "<h1>www.xingfafa.com</h1>" > /var/www/xingfafa/index.html
mkdir -p /var/www/airetalk
echo "<h1>www.airetalk.com</h1>" > /var/www/airetalk/index.html
#针对不同域名站点配置nginx.conf
vim /usr/lcoal/nginx/conf/nginx.conf
--snip--
#第三大块:HTTP配置
#使用“http {}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持以及虚拟web主机、PHP解析。
#子界定标记为“server {}”。多站点对应多子界定标记“server {}”或多配置文件。
http {
--snip--
#子界定标记为-站点xingfafa
server { //站点1的监听配置
listen 80; //监听地址及端口
server_name www.xingfafa.com; //网站名称(FQDN)
access_log logs/xingfafa.access.log main;
charset utf-8; //网页的默认字符集
location / { //站点根目录配置。 http://www.xingfafa.com:80/
root /var/www/xingfafa; //网站根目录的位置
index index.html index.php; //默认首页(索引页)。默认打开的网页文件
}
error_page 500 502 503 504 /50x.html //内部错误的反馈页面。如果报50*类型错误,给用户看哪个网页(50x.html)
location = /50x.html { //错误页面配置.http://location:80/50x.html
root html;
}
}
#子界定标记为-站点airetalk
server { //站点2的监听配置
listen 80; //监听地址及端口
server_name www.airetalk.com; //网站名称(FQDN)
access_log logs/airetalk.access.log main;
charset utf-8; //网页的默认字符集
location / { //站点根目录配置。 http://www.xingfafa.com:80/
root /var/www/airetalk; //网站根目录的位置
index index.html index.php; //默认首页(索引页)。默认打开的网页文件
}
error_page 500 502 503 504 /50x.html //内部错误的反馈页面。如果报50*类型错误,给用户看哪个网页(50x.html)
location = /50x.html { //错误页面配置.http://location:80/50x.html
root html;
}
--snip--
}
}
service nginx reload
LNMP架构及应用部署
构建LNMP网站平台
安装mysql
#预安装软件包
yum -y install ncurses-devel
tar zxvf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./configure && gmake && gmake install
#编译安装mysql数据库
tar zxvf mysql-5.5.22.tar.gz
cd mysql-5.5.22
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
make && make install
#创建(复制)mysql配置文件
cp support-files/my-medium.conf /etc/my.cnf
#创建(复制)mysql启动脚本
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
#为mysql脚本添加执行权限
chmod +x /etc/rc.d/init.d/mysqld
#开机自启
chkconfig --add mysqld
#添加mysql可执行文件到环境变量
echo "export PATH=$PATH;/usr/local/mysql/bin" >> /etc/profile
. /etc/profile
#创建mysql程序用户、组
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql:mysql /usr/local/mysql
#初始化数据库
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
#重启测试
service mysqld start
#为mysql服务添加root用户
mysqladmin -u root password 'pwd123'
安装PHP
#预安装软件包
yum -y install gd libxml2-devel libjpeg-devel libpng-devel
#编译安装php
tar zxvf php-5.3.28.tar.gz
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
make && make install
#创建(复制)配置文件php.ini
cp php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/
ln -s /usr/local/php5/sbin/* /usr/local/sbin/
#安装加速程序ZendGuardLoader
tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
cd ZendGuardLoader-php5-5.3-linux-glibc23-x86_64/php-5.3.x/
cp ZendGuardLoader.so /usr/local/php5/lib/php/
vim /usr/local/php5/php.ini
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
#配置nginx支持php环境
#方法一:充当中介,将访问PHP页面的web请求转发给其他LAMP服务处理
#方法二:通过PHP服务的FPM模块来调用本机的PHP环境
#启动php-fpm进程
cd /usr/local/php5/etc/
cp php-fpm.conf.default php-fpm.conf
useradd -M -s /sbin/nologin php
vim php-fpm.conf
--snip--
pid = run/php-fpm.pid //确认pid文件位置
user = php //运行用户
group = php //运行组
pm.start_servers = 20 //启动时开启的进程数
pm.min_spare_servers = 5 //最少空闲进程数
pm.max_spare_servers = 35 //最多空闲进程数
pm.max_children = 50 //最大客户端数
#运行php-fpm
/usr/local/sbin/php-fpm
#确认是否已经运行
netstat -antp | grep php-fpm
#更新nginx服务脚本
vim /etc/init.d/nginx
#!/bin/bash
#- : 代表在所有运行级别当中都可以交由chkconfig管理控制
#chkconfig: - 99 20
#description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx" //主程序路径
PIDF="/usr/local/nginx/log/nginx.pid" //PID存放路径
PROG_FPM="/usr/local/sbin/php-fpm"
PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
case "$1" in
start)
$PROG -c $CONF
$PROG_FPM
;;
stop)
kill -s QUIT $(cat $PIDF) //根据PID终止nginx级才能拿
kill -s QUIT $(cat $PIDF_FPM) //根据pid终止php-fpm进程
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF) //根据PID重载配置
*)
echo "Usage : $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#配置nginx支持php解析
vim /usr/local/nginx/conf/nginx.conf
--snip--
server {
--snip--
#方法一:
location ~ \.php$ { //访问.php页面的配置端。http://localhost/index.php
proxy_pass http://192.168.1.112:80; //Apache服务器的监听地址
}
#方法二:
location ~ \.php$ { //访问.php页面的配置端。http://localhost/index.php
root /var/www/html; //PHP网页文档根目录
fastcgi_pass 127.0.0.1:9000; //php-fpm的监听地址
fastcgi_index index.php; //PHP首页文件
include fastcgi.conf //包括fastcgi.conf样本配置
}
}
php连接数据库测试页
<?php
$link=mysql_connect('localhost','root','pwd123'); //连接mysql数据库
if($link) echo "<h1>恭喜你,数据库连接成功了</h1>"; //连接成功时的反馈信息
mysql_close();
?>
在LNMP平台中部署web应用
以天空网络电影系统为例:
官方网站:http://www/skyuc.com/
yum -y install unzip
unzip SKYUC.v3.4.2.SOURCE.zip
cd SKYUC.v3.4.2.SOURCE
mv wwwroot /var/www/xingfafa/skyuc
cd /var/www/xingfafa/skyuc/
#赋予php服务解析整个网站的权限
chown -R php:php admincp/ data/ templates/ upload/
#创建数据库
> create database skyucdb;
> grant all on shyucdb.* to runskyuc@localhost identified by 'sky@uc123';
#访问网页http://www.xingfafa.com/skyuc/install/index.php完成安装。