zoukankan      html  css  js  c++  java
  • LNMP搭建

    1. 安装NGINX
      1. 编译前准备
        1. Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保nginx安装顺利完成

        # yum -y install zlib-devel pcre-devel

        1. 创建运行用户、组:

        Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。

        # useradd -M -s /sbin/nologin nginx

      2. 编译安装nginx
        1. # tar -zxvf nginx-1.0.8.tar.gz
        2. #cd nginx-1.0.8/
        3. # ./configure --prefix=/usr/local/nginx --user=nginx--group=nginx --with-http_stub_status_module

          注:配置前可以参考:./configure --help给出说明

          --us--prefix:设定Nginx的安装目录

          er和—group:指定Nginx运行用户和组

          --with-http_stub_status_module:启用http_stub_status_module模块以支持状态统计

        4. # make && make install
        5. #vim nginx #编写nginx的启动脚本

          #!/bin/bash

          #chkconfig: 2345 67 23

          #description:this script for nginx stop or start or restart or reload

          CMDPATH="/usr/local/nginx/sbin/nginx"

          PIDDIR="/usr/local/nginx/logs/nginx.pid"

          [ -f /etc/init.d/functions ] && . /etc/init.d/functions

          Usage(){

          echo "Usage: $0 start|stop|reload|restart"

          exit

          }

          Start(){

          if [ ! -e ${PIDDIR} ];then

          ${CMDPATH}

          action "Nginx starting..." /bin/true

          else

          echo "Nginx is running..."

          exit

          fi

          }

          Stop(){

          if [ -e ${PIDDIR} ];then

          kill -s QUIT $(cat ${PIDDIR})

          action "Nginx is stopping..." /bin/true

          else

          echo "Nginx stopped..."

          exit

          fi

          }

          Restart(){

          Stop &>/dev/null

          Start &>/dev/null

          action "Nginx restarted..." /bin/true

          }

          Reload(){

          kill -s HUP $(cat ${PIDDIR})

          action "Nginx reload" /bin/true

          }

          if [ $# -ne 1 ];then

          Usage

          exit

          fi

          case "$1" in

          start)

          Start

          ;;

          stop)

          Stop

          ;;

          restart)

          Restart

          ;;

          reload)

          Reload

          ;;

          *)

          Usage

          exit

          esac

        6. # chmod +x nginx

          # cp nginx /etc/init.d/nginx

          # cd /etc/init.d/

          # chkconfig --add nginx

        7. # service nginx start #启动nginx
        8. # ss -tunlp | grep 80
      3. 编译MySQL
        1. # tar xf mysql-5.1.55.tar.gz
        2. # cd mysql-5.1.55
        3. # yum -y install ncurses-devel
        4. # ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312

          注:--with-charset:指定默认使用的字符集编码;--with-collation:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则;--with-extra-charsets:指定额外支持的其他字符集编码。

        5. 优化调整

          # cp support-files/my-medium.cnf /etc/my.cnf

          # cp support-files/mysql.server /etc/init.d/mysqld

          # chmod +x /etc/init.d/mysqld

          # chkconfig --add mysqld

          # ln -s /usr/local/mysql/bin/* /usr/local/bin/

          # ln -s /usr/local/mysql/lib/mysql/* /usr/lib/

          # ln -s /usr/local/mysql/include/mysql/* /usr/include/

        6. 初始化数据库

          # useradd -M -s /sbin/nologin mysql

          # cd /usr/local/mysql/bin/

          # ./mysql_install_db --user=mysql

          # chown -R root:mysql /usr/local/mysql/

          # chown -R mysql:mysql /usr/local/mysql/var/

          # service mysqld start

          # mysqladmin -uroot –p password '123456' #给root加密码

      4. 安装php

        1、简介:较新版本(如5.3)的PHP已经自带FPM(fastCGI process manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率,因此在配置PHP编译选项时应添加"--enable-fpm"以启用此模块。

    为了提高PHP解析效率,建议将相应版本的ZendGuardLander也装上

    1. # yum -y install libxml2-devel libpng-devel libjpeg-devel
    2. # tar xf php-5.3.6.tar.gz
    3. # cd php-5.3.6
    4. # ./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

      注:在RHEL664系统中按上面的配置项配置可能会报以下错误,如果要是报错的话请按如下方法解决:

    解决方法:

    根据报错发现是因为libpng.so和libpng.a找不到,但libpng的相关软件包我已经安装了,如下图查询结果,发现libpng的包都安装了。

    # rpm -qa | grep libpng

    执行下列命令,可以查找libpng.so在哪里

    # yum –y install mlocate

    # updatedb

    # locate libpng

    # cp -rfp /usr/lib64/libpng.* /usr/lib/

    # cp -frp /usr/lib64/libpng12.so* /usr/lib/

    解决完后重新执行./configure进行编译前的配置

    如果报configure: error: libjpeg.(a|so) not found错误解决方法和上面的解决方法类似。具体操作如下:

    # rpm -qa | grep libjpeg #查询是否安装

    # locate libjpeg.so

    # cp -rfp /usr/lib64/libjpeg.so* /usr/lib/

    1. 重新进行configure
    2. #make && make install
    3. # cp php.ini-production /usr/local/php5/php.ini
    4. # ln -s /usr/local/php5/bin/* /usr/local/bin/
    5. # ln -s /usr/local/php5/sbin/* /usr/local/sbin/
    1. 安装ZendGuardLander
      1. #tar xf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
      2. #cd ZendGuardLoader-php-5.3-linux-glibc23-x86_64
      3. # cp php-5.3.x/ZendGuardLoader.so /usr/local/php5/lib/php/
      4. # vim /usr/local/php5/php.ini

        zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so

    2. 配置Nginx支持PHP环境:

    若要让Nginx能够解析PHP网页,有两种方法可以选择;其一,充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境

    如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)

    # cd /usr/local/php5/etc/

    # cp php-fpm.conf.default php-fpm.conf

    # vim php-fpm.conf

    # /usr/local/sbin/php-fpm #启动php-fpm

    # netstat -tunlp | grep php-fpm

    在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid,根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。

    # vim /etc/init.d/nginx

    #!/bin/bash

    #!/bin/bash

    #chkconfig: 2345 67 23

    #description:this script for nginx stop or start or restart or reload

    CMDPATH="/usr/local/nginx/sbin/nginx"

    PIDDIR="/usr/local/nginx/logs/nginx.pid"

    FPMPATH="/usr/local/php5/sbin/php-fpm"

    FPMPID="/usr/local/php5/var/run/php-fpm.pid"

    [ -f /etc/init.d/functions ] && . /etc/init.d/functions

    Usage(){

    echo "Usage: $0 start|stop|reload|restart|configtest"

    exit

    }

    Start(){

    if [ ! -e ${PIDDIR} ];then

    ${CMDPATH}

    ${FPMPATH}

    action "Nginx starting..." /bin/true

    else

    echo "Nginx is running..."

    exit

    fi

    }

    Stop(){

    if [ -e ${PIDDIR} ];then

    kill -s QUIT $(cat ${PIDDIR})

    kill -s QUIT $(cat ${FPMPID})

    action "Nginx is stopping..." /bin/true

    else

    echo "Nginx stopped..."

    exit

    fi

    }

     

    Restart(){

    Stop &>/dev/null

    Start &>/dev/null

    action "Nginx restarted..." /bin/true

    }

    Reload(){

    kill -s HUP $(cat ${PIDDIR})

    kill -s HUP $(cat ${FPMPID})

    action "Nginx reload" /bin/true

    }

    Configtest(){

    ${CMDPATH} -t

    }

    if [ $# -ne 1 ];then

    Usage

    exit

    fi

    case "$1" in

    start)

    Start

    ;;

    stop)

    Stop

    ;;

    restart)

    Restart

    ;;

    reload)

    Reload

    ;;

    configtest)

    Configtest

    ;;

    *)

    Usage

    exit

    esac

    这样一来,一旦启动或关闭nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm

    1. 配置Nginx支持PHP解析:

      ①无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在"server{}"配置段中添加location设置,以便指定当访问.php面页时采取何种操作。

    # vim /usr/local/nginx/conf/nginx.conf

    location ~ .php$ { #访问php的页面段

    root html; #php网页文档根目录

    fastcgi_pass 127.0.0.1:9000; #php-fpm的监听地址

    fastcgi_index index.php; #php的首页文件

    include /usr/local/nginx/conf/fastcgi.conf;

    #包括fastcgi.conf样本配置

    }

    1. php页面访问测试

      # vim /usr/local/nginx/html/index.php

      <?php

      phpinfo();

      ?>

    # service nginx restart #记得重启nginx,使修改配置文件生效

    1. 访问mysql数据库测试

      # vim mysqlconn.php

      <?php

      $link=mysql_connect('localhost','root','123456');

      if ($link) echo "connect to mysql success";

      mysql_close();

    ?>

    # curl http://192.168.131.135/mysqlconn.php

    1. LNMP平台搭建web应用

      # vim /usr/local/nginx/conf/nginx.conf

      这样不用每次访问都输入全路径

      # mysql -uroot -p123456

      mysql> create database movie;

      mysql> grant all on movie.* to wdd@'localhost' identified by '123456';

      # tar xf SKYUC_3.2.2_Free_For_PHP5.3.tar.bz2

      # cd SKYUC_3.2.2_Free_For_PHP5.3

      # cp -r wwwroot/ /usr/local/nginx/html/movie

      #cd /usr/local/nginx/html/movie

      # chown -R nginx:nginx admincp/ data/ templates/ upload/

      在浏览器输入http://192.168.131.135/movie/install/index.php进入安装界面,点击"",在点击进入下一个页面,如下图所示

      点击"下一步:配置系统",填写好相关信息

      最后点击"立即安装",安装成功。

      为了安全,删除install目录

      # rm -rf install/

    1. 1Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置

      编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项

      1. location /statictical { #匹配任何包含/statictical的任何查询

        stub_status on; #打开状态统计功能

        access_log off; #关闭此目录的日志记录

        auth_basic "nginx status" ; #登录提示

        auth_basic_user_file /usr/local/nginx/.htpasswd ;

        #存用户密码的的文件

      }

      1. # yum -y install httpd
      2. # chkconfig httpd off
      3. #输入密码即可

      4. # mkdir /usr/local/nginx/statictical
      5. #service nginx restart #重启服务
      6. 输入用户名和密码,进入页面

        Active connections: 1

        server accepts handled requests

        7 7 12

        Reading: 0 Writing: 1 Waiting: 0

        其中"Active connections"表示当前的活动连接数;而"server accepts handled,requests"表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数.

    2、客户端访问控制

    # vim /usr/local/nginx/conf/nginx.conf

    在客户机192.168.216.233上输入http://192.168.131.135/statictical/,发现无法访问了

    注:allow 允许规则,deny拒绝规则;规则的执行是按从上向下执行,匹配某条规则后将不再检查其他规则。

    1. 使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的"server {}"配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

      1. #mkdir /usr/local/nginx/taobao
      2. #mkdir /usr/local/nginx/sina
      3. # echo "www.taobao.com" >> /usr/local/nginx/taobao/index.html
      4. # echo "www.sina.com" >> /usr/local/nginx/sina/index.html
      5. # vim /etc/hosts

    1. # curl www.taobao.com
    2. # curl www.sina.com

    1. 案例3nginx+openssl实现https传输加密

    1、查看是否已经安装 ssl,没有的话,重新编译安装

    # /usr/local/nginx/sbin/nginx –V

    # yum -y install pcre-devel zlib-devel openssl-devel

    # tar xf nginx-1.7.7.tar.gz

    # cd nginx-1.7.7

    # useradd -M -s /sbin/nologin nginx

    # ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6

    # make

    # make install

    # /usr/local/nginx/sbin/nginx

    ]# netstat -tunlp | grep 80

    2、生成 key

    # cd /usr/local/nginx/conf/

    # openssl genrsa -des3 -out server.key 1024 #输入密码即可

    genrsa 生成rsa类型的秘钥

    -des3 指定算法

    -out 输出秘钥

    1024 指定输出文件的大小

    3、生成证书

    # openssl req -new -key server.key -out server.csr

    req -new产生一个新的证书 -key 之前生成的秘钥 –out输入的证书

    填写好相关信息

    # cp server.key server.key.bak #将秘钥备份一下,防止丢失

    # openssl rsa -in server.key.bak -out server.key #重新输出一下新密钥

    # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自签证书

    # vim /usr/local/nginx/conf/nginx.conf

    server {

    listen 443; https的监听端口为443

    server_name localhost;

    ssl on;

    ssl_certificate /usr/local/nginx/conf/server.crt;

    ssl_certificate_key /usr/local/nginx/conf/server.key;

    # killall -9 nginx

    # /usr/local/nginx/sbin/nginx

    在浏览器输入https://192.168.131.130/,弹出如下对话框:

    点击"我已充分了解可能的风险"->"添加例外—获取证书—确认安全例外"即可以访问页面

    小结:当配置文件修改这个值worker_connections 1024超过1024时,实际上如果系统没有用#ulimit 50000进行设置的话是不生效的,两边都得改,要想开机每次生效,可以将其写入/etc/rc.d/rc.local

    Nginx的location

    基本语法:
    location [=|~|~*|^~] /uri/ { … }

    =    表示做精确匹配
    ~ :为区分大小写匹配
    ~*: 为不区分大小写匹配
    !~ :和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

    正则表达式匹配,其中:
    文件及目录匹配,其中:
    -f 和 !-f 用来判断是否存在文件
    -d 和 !-d 用来判断是否存在目录
    -e 和 !-e 用来判断是否存在文件或目录
    -x 和 !-x 用来判断文件是否可执行

    示例1:

    location = / {
    # 只匹配 / 查询。
    }

    location / {

    #匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先查询匹配

    }

    示例2:

    location ^~ /images/ {
    # 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
    }

    示例3:

    location ~* .(gif|jpg|jpeg)$ {
    # 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
    }

    配置文件讲解:

    在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为"关键字值;"(末尾以分号表示结束),以"#"开始的部分表示注释。

    1)全局配置

    由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。

    常用配置项:

    #user nobody;

    //运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody

    worker_processes 2;

    //指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数

    worker_cpu_affinity 00000001 00000010;

    //为每个进程分配cpu,上例中将2个进程分配到两个cpu,当然可以写多个,或者将一个

    进程分配到多个cpu

    worker_rlimit_nofile 102400;

    //这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit

    -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值

    保持一致。(通过"ulimit –n 数值"可以修改打开的最多文件数目)

    error_log logs/error.log; //全局错误日志文件的位置

    pid logs/nginx.pid; //PID文件的位置

    2) I/O事件配置:

    使用"events {}"界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置

    events {

    use epool; //使用epool模型,对于2.6以上的内核,建议使用epool模型以提高性能

    worker_connections 4096; //每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。

    }

    3)HTTP配置

    使用"http{}"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以

    及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记"servier {}"内。

    http {
    #设定mime类型,即conf/目录下的mime.types文件中的设定。
    include mime.types;
    default_type application/octet-stream;
    #设定日志格式
    log_format main '$remote_addr - $remote_user [$time_local]'
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';
    log_format download '$remote_addr - $remote_user [$time_local] '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$http_range" "$sent_http_content_range"';
    #设定access log
    access_log logs/access.log main;
    sendfile on; //支持文件发送(下载)
    keepalive_timeout 65; //连接保持超时
    #设定虚拟主机
    server { //用来配置虚拟主机
    listen 80; //WEB服务的监听设置,可以采用"IP地址:端口"形式
    server_name www.lnmp.com;//网站名称可以写多个名称,用空格分隔

    location / { //表示如何匹配后面的路径的

    index index.html; //默认首页

    root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。

    }
    charset gb2312; //网页的默认字符集
    #设定本虚拟主机的访问日志
    access_log logs/www.lnmp.com.access.log main;

    error_page 500 502 503 504 /50x.html; //内部错误的反馈页面

    location = /50x.html {

    root html;

    }
    }
    }

     

     

     

  • 相关阅读:
    C++拷贝构造函数(深拷贝,浅拷贝)
    C++标准库和标准模板库
    MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法
    MFC 对象与Win32 SDK 句柄的映射关系
    关于函数返回值的几种情况
    CreateWaitableTimer和SetWaitableTimer函数
    关于C++/C中防止头文件的重复包含的解决办法
    MFC 分割窗体(Splitter Windows)
    MFC中对话框的数据交换(DDX)和数据校验(DDV)
    MFC 消息映射表 及 相关宏定义
  • 原文地址:https://www.cnblogs.com/fengyutech/p/4937384.html
Copyright © 2011-2022 走看看