编辑 /etc/ld.so.conf 加入
/usr/local/lib
再执行
ldconfig
一,介绍:
1,Nginx本身是一款静态(html , js , css , jpg等)www软件;特点是静态小文件高并发;同时占用资源少。网上说:3W并发,开10个线程 ,消耗150M内存
nginx使用平台:unix,linux,windows都可以
2,从大的方面的功能
a,www web服务
b,负载均衡(反向代理proxy)
c,web cache(web缓存)
d,虚拟主机(基于域名(外部网站)、端口(公司内部网站)、IP(不完善))
<VirtualHost> ====> server {}
3,优点:配置简单,更灵活
a)静态小文件高并发,静态1-2W
b)占用资源少,2W并发,开10个线程服务,内存消耗几百兆
c)功能种类比较多(web,cache,proxy),每一项功能都不是特别强
d)支持epoll模型,使得nginx可以支持高并发
e)nginx配合动态服务和apache区别
f)利用nginx可以对IP限速,可以限制连接数
二,LNMP实现原理,架构(与apache对比)和选择:
1,Nginx的应用场景:
1)静态服务器(图片、视频服务),并发:1-3W
html , js , css , .flv 等
2)动态服务:nginx + fastcgi 的方式运行php ,jsp;单个PHP实例的动态并发在300 - 1000个;单个mysql实例在300-1000个
类似:apache+php,lighttpd+php
3)反向代理、负载均衡。日PV2000万以下,都可以直接用NGINX做代理
类似:haroxy,F5,a10
4)缓存服务。
类似:squid,varnish
2,主流web服务器产品对比说明
1)apache
2.2版本非常稳定强大,据说2.4性能超强
prefork模式取消了进行创建开销,性能很高
处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在于apache本身
高并发时消耗系统资源相对多一些
基于传统的SELECT模型
扩展库:DSO方法,apxs
功能多,更稳定,更安全,插件多
2)Nginx
基于异步IO模型(epoll,kqueue),性能强,能够支持上万并发
对小文件支持很好,性能很高(静态小文件,1M以内)
代码优美,扩展库必须编译进主程序
消耗系统资源比较低
3)Lighttpd (百度贴吧,豆瓣网)
基于异步IO模型,性能和Nginx相近
扩展库是SO模式,比Nginx要灵活
全球使用率比较低,安全性没有上面两个好
通过插件(mod_secdownload)可实现文件URL地址加密
3,为什么Nginx比Apache效率高
4,如何选择web服务器(先满足当前需要,然后逐步完善)
静态业务:高并发,采用nginx,lighttpd,根据自己的掌握程度和要求;
动态业务:采用nginx和apache均可
既有静态又有动态业务:Nginx或Apache,不要多选,要单选
如果并发不大,又对apache熟悉,也可采用apache
最终建议:对外的业务nginx,对内的业务apache(yum httpd , mysql-server, php)
三,安装Nginx
更新yum源到阿里云:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
1, 安装pcre(perl兼容正则表达式),让Nginx支持http rewrite伪静态
yum install pcre pcre-devel -y
2,安装openssl,否则编译nginx会报错
yum install openssl openssl-devel -y
3,解压nginx安装包
useradd nginx -M -s /sbin/nologin
./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module
检查:echo $?
make && make install
ln -s /application/nginx1.6.2/ /application/nginx
4,检查nginx:/application/nginx/sbin/nginx -t
5,启动nginx:/application/nginx/sbin/nginx
6,服务器访问检查:curl 192.168.1.247 或 客户端浏览器访问 http://192.168.1.247
四,Nginx基本配置
1,Nginx模块
1)Nginx core modules(必须的)
Main,Events
2)Standard HTTP modules(虽然不是必须,但是缺省都会安装,不建议改动),典型包括:
Core
Access
FastCGI
Gzip(压缩模块,性能优化)
Log(日志模块)
Proxy
Rewrite (URL重写模块)
Upstream(负载均衡模块)
缺省这两组模块都会被安装,我们做配置也是按这两组来修改配置的;通过官方查看帮助
2,Nginx的目录结构
/application/nginx
|-- client_body_temp
|-- conf
| |-- fastcgi.conf #动态配置文件,一般情况下不需要修改
| |-- fastcgi.conf.default
| |-- fastcgi_params #fastCGI参数,优化的时候需要调整
| |-- fastcgi_params.default
| |-- koi-utf
| |-- koi-win
| |-- mime.types
| |-- mime.types.default
| |-- nginx.conf #主配置文件,静态配置文件
| |-- nginx.conf.default
| `-- win-utf
|-- fastcgi_temp
|-- html #默认站点目录
| |-- 50x.html
| `-- index.html
|-- logs
| |-- access.log #访问日志
| |-- error.log #错误日志
| `-- nginx.pid #进程号文件
|-- proxy_temp
|-- sbin
| `-- nginx #服务
1)主配置文件Nginx.conf
Nginx配置文件是分模块的,不同模块是用大括号{}来包含的
(去掉注释,空白行查看配置文件的命令:egrep -v "#|^$" -n nginx.conf)
2)配置三个站点
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.test.net;
root html/www;
index index.html index.htm;
}
server {
listen 80;
server_name bbs.test.net;
root html/bbs;
index index.html index.htm;
}
server {
listen 80;
server_name blog.test.net;
root html/blog;
index index.html index.htm;
}
}
3)配置虚拟主机流程:
a)复制一个完整的server标签段,到结尾;注意:要放在http的结束大括号前
b)更改server_name及对应网页的root根目录
c)检查配置文件语法,平滑重启服务
d)创建server_name对应网页的根目录,并且建立测试文件,如果没有index首页会出现403错误
e)在客户端对server_name的主机名做host解析或DNS配置,并检查(PING 域名看返回的IP对不对)
f)win32浏览器访问,或在linux客户端做host解析,用wget或curl访问;
4)配置状态信息虚拟主机
server {}
访问显示:
Active connections: 2872 server accepts handled requests 29420179 29420179 104353678 Reading: 80 Writing: 35 Waiting: 2757
5) 别名或301跳转
别名,实现访问test.net,也是和www.test.net一样的访问(地址栏还是 test.net):
server_name后添加别名的域名,用空格分开
301跳转,实现访问test.net 跳转到 www.test.net(地址栏是 www.test.net):
增加一个server标签,并作为第一个server标签(第一个识别后,后面的server标签就不会识别了)
server {
listen 80;
server_name test.net;
rewrite ^/(.*) http://www.test.net/$1 permanent;
}
6)防止别人域名绑定自己的IP
server {
listen 80;
server_name _;
rewrite ^/(.*) http://www.test.net/$1 permanent;
}
7)访问日志
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
8)日志切割脚本cut_ngnx_log.sh :cron + mv (定时任务 + mv命令配合)
/bin/mv /application/nginx/logs/www_access.log /application/nginx/logs/www_access_$(date +%F -d -1day).log #重命名当前日志文件名字
/application/nginx/sbin/nginx -s reload #平滑重启 nginx,会重新生成 www_access.log日志文件
加入到定时任务
0 0 * * * /bin/sh /server/scripts/cut_nginx_log.sh > /dev/null 2>&1
五,LNMP经典组合(用MYSQL解压二进制文件安装,找类似linux2.6-x86_64.tar.gz)
1,myql版本
商业版:很贵
开源版:commity版
cluster集群:生产环境不用
5.1 === lamp ===》 5.1.72 编译安装: configure, make , make install
5.5 === lnmp ===》 5.5.32 编译安装:cmake,make,make install
参考:http://oldboy.blog.51cto.com/2561410/1240412
5.6
5.7
mysql编译方法(补充):
1,编译 ,5.1 ,5.5不同
2,yum/rpm,缺点是不能定制
3,二进制包,直接解压,初始化数据库即可,无需编译。DBA喜欢,性能也可以
数据库与web服务器分 离,web服务器上如何安装mysql?
编译:到make install结束即可
二进制:解压即可
(因为安装PHP时,需要指定mysql安装路径,通过mysql的路径来生成PHP调用mysql的相关函数)
2,安装mysql:
下载二进制mysql软件包
tar zxvf mysql-5.5.32-linux2.6-x86_64.tar.gz
mv mysql-5.5.32-linux2.6-x86_64 /application/mysql
cd /application/mysql # web服务器到这一步就ok了,不用往下
rm -rf /application/mysql/data
mkdir /application/mysql/data -p
chown -R mysql.mysql /application/mysql/
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/application/mysql/data/
看见两个OK表示初始化成功(如果没有mysql用户,则useradd mysql -M -s /sbin/nologin;建立data目的,并且授权给mysql)
\cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
vim /etc/init.d/mysqld
basedir=/application/mysql
datadir=/application/mysql/data
cp /application/mysql/support-files/my-small.cnf /etc/
启动mysql服务:/etc/init.d/mysqld start
(默认mysql/bin/路径要加入到PAHT中,或 cp /application/mysql/bin/* /usr/local/sbin/ 拷贝到已经加入到PATH的目录中;/tmp 权限为chown -R 4777 /tmp)
mysql.user 表只留:
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
设置密码
mysqladmin -u root password '123456'
(mysql日志可以在my.cnf中配置,数据库错误请查看data/机器名.err)
3,安装PHP
apache ===》 libphp5.so
nginx php ===》 fastcgi php-fpm port 9000
1,安装前检查Nginx和mysql的安装路径和服务正常
netstat -lntup|egrep "nginx|mysql" #可以看见80和3306端口正常
2,检查安装PHP所需lib库
yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel -y
(必须的:freetype-devel , curl-devel , gd-devel , zlib-devel , libpng-devel ,libxml2-devel)
3,安装libiconv libiconv-devel
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make istall
4,安装libxcrypt :http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make && make install
sleep 2
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
5,安装mhash:http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9.tar.gz
cd tar zxvf mhash-0.9.9.9
./configure
make && make install
sleep 2
cd ../
rm -f /usr/lib64/libmcrypt.*
rm -f /usr/lib64/libmhash*
ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la
ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so
ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a
ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la
ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so
ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2
ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
ln -s /usr/local/bin/lib64/libmcrypt-config /usr/bin/libmcrypt-config
6,安装 mcrypt
tar zxvf mcrypt-2.6.8.tar.gz
cd tar zxvf mcrypt-2.6.8
/sbin/ldconfig
./configure LD_LIBRARY_PATH=/usr/local/lib
make && make install
7,安装PHP
1)tar xf php-5.3.27.tar.gz
2) cd php-5.3.27
3)提前安装:yum install libxslt* -y
4)编译参数:
ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ #解决make过程中的一个ERROR
./configure \
--prefix=/application/php5.3.27 \
--with-mysql=/application/mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp
问题解决:=====================
A, mkdir ext/phar/phar.phar -p
ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
编辑 /etc/ld.so.conf 加入
/usr/local/lib
再执行
ldconfig
C,编译安装时碰到 undefined reference to `libiconv_open' 问题解决方法
vim Makefile,添加红色部分:
EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lpng -lz -lcurl -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lcurl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -liconv
============================================
拷贝配置文件夹:cp php.ini-production /application/php/lib/php.ini
修改php-fpm.conf文件(在 php/etc/php-fpm.conf)
[global]
pid = /app/logs/php-fpm.pid
error_log = /app/logs/php-fpm.log
log_level = error
rlimit_files = 32768
events.mechanism = epoll
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = nginx
listen.group = nginx
pm = dynamic
pm.max_children = 1024
pm.start_servers = 16
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
slowlog = /app/logs/$pool.log.slow
request_slowlog_timeout = 10
配置nginx.conf :
server {
listen 80;
server_name bbs.test.net;
root html/bbs;
index index.php index.html index.htm;
access_log logs/www_access.log;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
8,安装wiki开源产品实战
1)创建wiki数据库
create database wiki;
2)创建wiki用户管理wiki数据库(不要用root,root权限太大了,危险)
grant all on wiki.* to wiki@localhost identified by 'wiki'; (会在mysql.user表中新增加wiki用户,并且在mysql.db授权表中新增wiki的权限数据)
3)刷新授权表
flush privileges;
4)下载wiki开源软件
wget http://kaiyuan.hudong.com/download.php?n=HDWiki-v5.1GBK-20121102.zip
5)unzip 解压到bbs根目录
chown -R nginx.nginx bbs/(工作中的生产环境一般:目录权限644,文件权限755,所有者为root,缩小范围保证安全,上传目录一般不在web服务器中)