zoukankan      html  css  js  c++  java
  • day13-LNMP、FASTCGI

    LNMP、FASTCGI
    LNMP(Linux,nginx,mysql,php)
    yum -y groupinstall "Development libraries" "Development tools" "X Software Development"
    yum –y install gcc openssl-devel pcre-devel zlib-devel
     
    - 安装nginx
    - 安装mysql
        - yum –y install cmake
        - useradd –s /sbin/nologin mysql
        - 读软件包中的安装文档INSTALL-SOURCE
    - 安装PHP
        - mhash(哈希函数)、libiconv(编码转换)、libmcrypt(加密库)
     
    tar xf mhash-0.9.9.9.tar.gz
     cd mhash-0.9.9.9
     ./configure
    make && make install
     
    tar xf libiconv-1.14.tar.gz
     cd libiconv-1.14
     ./configure
     
    make && make install
     
    tar xf libmcrypt-2.5.7.tar.gz
     cd libmcrypt-2.5.7
    ./configure
    make && make install
     ldconfig -v
     cd libltdl/
     
    ./configure --with-gmetad --enable-gexec --enable-ltdl-install
     
     make && make install
     
    ln -sv /usr/local/lib/libmcrypt* /usr/lib
    ln -sv /usr/local/lib/libmhash* /usr/lib
    ln -sv /usr/local/lib/libicon* /usr/lib
     
    ldconfig
     
    WINDOWS中所有的动态链接库DLL文件 c:windowssystem32*.dll
     
    linux的库文件(so文件),一般会存放在/lib/,/usr/lib/
     
    ln –sv /usr/local/lib/libmcrypt* /usr/lib/        软链接
     
    ln –sv /usr/local/lib/libmhash.* /usr/lib/
     
    方法一
    默认我们安装的mhash,libmcrypt,libiconv,生成的库文件存放在/usr/local/lib,因此为了让系统识别这些库,可以将/usr/local/lib/相关的库文件,做链接放到系统库目录下。
    方法二
    vim /etc/ld.so.conf
    将安装库的文件路径写入该配置文件里
    输入完后使用ldconfig    刷新
    提示:安装mysql时如果提示not find curses则需要yum list |grep curses
    #yum –y install ncurses-devel
    当第二次再cmake时,需要删除之前的缓:rm CMakeCache.txt
    安装PHP
    yum install -y libxml2-devel
    /etc/init.d/mysqld start
    tar xf php-5.6.26.tar.bz2
    cd php-5.6.26
    ./configure
    > --prefix=/usr/local/php5
    > --with-config-file-path=/usr/local/php5/etc
    > --with-mysql=mysqlnd  
    > --with-mysqli=mysqlnd
    >--with-pdo-mysql=mysqlnd
    > --enable-fpm --enable-mbstring
    make ZEND_EXTRA_LIBS='-liconv'
    make install
    cp php.ini-production /usr/local/php5/etc/php.ini
    cp php-fpm.conf.default php-fpm.conf
    useradd -s /sbin/nologin www
    1 [root@localhost etc]# cat php-fpm.conf
    2 [global]
    3 pid = run/php-fpm.pid
    4 error_log = log/php-fpm.log
    5 log_level = error
    6 daemonize = yes
    7 [www]
    8 user=www
    9 group=www
    10 listen = 127.0.0.1:9000
    11 pm = dynamic
    12 pm.max_children = 2
    13 pm.start_servers = 1
    14 pm.min_spare_servers = 1
    15 pm.max_spare_servers = 2
    cd php-5.6.26/sapi/fpm/
    cp init.d.php-fpm /etc/rc.d/init.d/php-fpm
     chmod +x /etc/rc.d/init.d/php-fpm
    /etc/init.d/php-fpm start
    nginx 配置文件
    location ~ .php$ {
    root html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
     
    nginx+fastcgi
     
    CGI——公共网关接口Common Gateway Interface
    1、HTTP服务器与客户端上的程序进行"交谈"的一种工具
    2、CGI可以用任何一种编写,只要这种语言具有标准输入、输出和环境变量,如php,perl等
    3、程序须运行在网络服务器上
    工作流程
    - Web Sever启动时载入FastCGI进程管理器
    - FastCGI进程管理器初始化,启动多个CGI解释器进程
    - 当客户端请求到达WEB Server时
     
    FastCGI进程管理器选择并连接到一个CGI解释器
    - FasstCGI子进程完成处理后返回结果
    将标准输出和错误信息从同一连接返回WEB SERVER
    FastCGI缺点
    内存消耗大
     
    因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字以50或100就是很大的内存数。
     
        nginx+PHP(FastCGI)服务器在3万并发连接下
        开启的10个nginx进程消耗150M内存(10*15M)
        开启的64个php-cgi进程消耗1280内存(20M*64=1280M)
     
    vim /usr/local/php5/etc/php-fpm.conf
     
    listen=127.0.0.1:9000
     
    pm=dynamic
     
    pm.max_children=32     进程上限
    pm.start_servers=15    初始化开几个进程
    pm.min_spare_servers=5    最小空闲进程
    pm.max_spare_servers=32    最好大空闲进程
     
    cp /php安装包/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    server php-fpm start
     
    修改nginx(调用FastCGI、php-fpm)
    可以用php页面测试下
    <?php
    phpinfo();
    ?>
     
    测试数据库
    <?php
    $links=mysql_connect("localhost","root","");
    if($link){
    echo "link datebase ok!!!";
    }
    else{
    echo "link database no!!!";
    }
    ?>
     
    基础知识
    • 什么是地址重写
    1. 获得一个进入的URL请求然后把它重新写成服务器可以处理的另一个URL的过程
    • 地址重写的好处
    1. 缩短URL,隐藏实际路径提高安全性.
    2. 易于用户记忆和键入.
    3. 易于被搜索引擎收录.
    • 常见网站应用场景
    1. 当网站文件移动或文件目录名称发现改变,出于SEO需要,你需要保持旧的URL;
    2. 网站改版了,网站导航和链接发生变化,为了继续持有原链接带来的流量,你需要保持旧的URL
     
    rewrite模块
    • rewrite语句
    rewrite regex replacement flag
    flag:break、last、redirect、permanent
    last: 停止执行其他重写规则,根据URI继续搜索其他location
    break:停止执行其他的重写规则,完成本次请求
    redirect:302临时重定向,地址栏改变,爬早不更新URI
    permanent:301永久重定向,地址栏改变,爬是更新URI
    • if(条件){……}
    条件判断
    • rewwrite_log:error log 中记录重写日志
    rewrite_log on |off
    正则表达式
    • nginx的重写模块是一个简单的正则表达式匹配
    因此,依赖PCRE库
    • 语法格式
    rewrite regex replacement flag
    • 正则表达匹配模式如下:
    1. 区分大小写匹配:~
    2. 不区分大小写匹配:~*
    3. 区分大小写匹配:!~
    4. 不区分大小写不匹配:!~*
    • 正则表达式匹配模式如下:
    1. 判断文件是否存在:-f
    2. 判断目录是否存在:-d
    3. 判断文件是否可执行:-x
    4. 判断文件、目录、连接是否存在:-e
     
    要求:a.html>>>b.html
    cat /usr/local/nginx/conf/nginx.conf
    location/ {
         root html;
         index index.html;
         rewrite "/a*.html$" /b.html;
    }
    例1:无条件重定向
    配置文件rewrite /a.html /b.html;
    127.0.01/a.html 显示的是b.html  uri不变     //页面跳转    内容变以,链接不变
    配置文件rewrite /a.html /b.html permanent;
    127.0.01/a.html 显示的是b.html  uri会变
     
    例2:域名跳转
    当访问服务器根的时候,自动跳转到bbs.test.com
     
    例3:根据浏览器返回不同的页面
    if ($http_user_agent ~ Chrome){
                    rewrite ^(.*)$ /curl/$1 break;}      //根据浏览器返回不同的页面
    例:http://www.test.com/a.html>>>>http://www.test.com/curl/a.html
     
    例4:改变音乐文件存储路径
    rewrite ^/(download/.*)/media/(.*)..*$/$1/mp3/$2.mp3 break;    //改变音乐文件存储路径
     
    例5:将gif或jpg转成logo.png
    rewrite .(gif|jpg)$ /logo.png;
     
    例6:当访问资源不存在时,重写向到指定页面
    if(!-e $request_filename){    //当访问资源不存在时,重写向到指定页面
    rewrite ^/ http://www.test.com/none.html;    }    //指定一个页面  在根目录下建立一个none.html文件
     
    例7:防盗链语句
    location ~* .(gif|jpg|png|swf|flv)$ {
        valid_referers none blocked www.test.com;    //不是从www.test.com里访问都会指向到403.html
        if ($invalid_referer){
        rewrite ^/ http://www.test.com/403.html; }
     
    none表示没有Referer,也就是直接访问
        直接在浏览器打开
    blocked表示Referer,但内容被防火墙或代理删除
    server_names就是最后的域名
        可以使用*.test.com来表示二级域名
    http请求头部信息
    HTTP Referer是header的一部分,当浏览器向WEB服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理.
  • 相关阅读:
    大型应用程序中的资源destory办法
    PNG格式说明
    北山白云里,隐者自怡悦。
    常量和变量:public static const 和public static var
    60个最佳新年2012年日历壁纸
    想象渲染:3优秀的D室内设计模型的设计案例
    强大的JavaScript表单验证插件
    带给你灵感的3D街画艺术设计
    铁道部购票网站存泄密危险 CDN服务商技术短板是主因
    GNU make manual 翻译( 一百二十五)
  • 原文地址:https://www.cnblogs.com/fina/p/5890614.html
Copyright © 2011-2022 走看看