study-18:LN(ginx)MP组合

来源:互联网 发布:剑三毒哥妖孽捏脸数据 编辑:程序博客网 时间:2024/06/07 03:09

一,介绍:

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 {
        listen       80;
        server_name  status.test.net;
            stub_status on;
            access_log off;

    }

访问显示:

Active connections: 2872server accepts handled requests 29420179  29420179  104353678Reading: 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 


问题解决:

mkdir ext/phar/phar.phar -p

ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/


拷贝配置文件夹: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服务器中)



0 0
原创粉丝点击