• LNMP搭建


    一、预备环境

    关闭防火墙,关闭安全机制

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# iptables -F
    [root@localhost ~]# setenforce 0

    二、搭建Nginx服务

    1、支持的软件包pcre-devel、zlib-devel、openssl-devel(支持加密)、gcc、gcc-c++、make

    devel包主要是供开发用,包含普通包,devel包中包含头文件和链接库,如果是需要动态链接库的话,两种包都需要有。

    [root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel

    2、创建nginx用户和组

    [root@localhost ~]# useradd -M -s /sbin/nologin nginx

    3、解压安装包并指定位置

    [root@localhost ~]# tar -xf nginx-1.16.0.tar.gz -C /usr/src/

    4、编译安装

    [root@localhost ~]# cd /usr/src/nginx-1.16.0/ 
    [root@localhost nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install
    --prefix //设定nginx的安装目录
    --user和--group //指定nginx运行用户和组
    --with-http_stub_status_module //启用模块支持状态统计
    --with-http_ssl_module //启用ssl模块
    --with-http_flv_module //提供寻求内存使用基于时间的偏移量文件

    5、为主程序nginx创建链接文件

    [root@localhost ~]# ls /usr/local/nginx/
      logs        sbin       conf              html          
    [root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    [root@localhost ~]# ll /usr/local/sbin/nginx

    6、nginx的运行控制

    nginx -t    检测配置文件的语法

    [root@localhost ~]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@localhost ~]# nginx
    [root@localhost ~]# netstat -anpt | grep :80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13134/nginx: master

    重启服务

    [root@localhost ~]# killall -HUP nginx

    三、nginx配置文件(nginx.conf)分析

    在nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O时间配置、HTTP配置三大内容

    配置格式:关键字 值;    //末尾以分号表示结束,以#开始的部分表示注释

    1、全局配置

    常用配置项:

    user nginx [nginx];    //nginx的程序用户及程序组,若编译时未指定则默认为nobody

    worker_processes 2;     //指定nginx要指定的进程数量,每个进程要耗费10M-20M内存,一般与CPU核心数相等

    worker_cpu_affinity 01 10;   //双核CPU(0001 0010 0100 1000;四核) CPU的分配问题

    worker_rlimit_nofile 102400;    //一个进程可以打开的最多文件数目,数值与ulimit -n(系统最多打开的文件数量)保持一致就好

    error_log logs/error.log;    //错误日志的记录级别

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

    2、I/O事件配置

    使用"events{ }"界定标记,指定nginx进程的I/O响应模式,每个进程的连接数等

    events {
    
          use  epoll;      //用来设定nginx的工作模式
          worker_connections 4096//用于定义nginx的最大连接数,默认1024
    
    }

    3、HTTP配置

    用"http{ }"界定,设置访问日志、HTTP端口、网页目录、默认字符集、连接保持、虚拟web主机、PHP解析,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;                    //支持文件发送(上传下载)
    keepalive_timeout  65;                 //连接保持的时间
    
        server {                                //web服务的监听配置
            listen       80;                    //定义虚拟主机的服务器接口(192.168.200.111:80)
    server_name  www.crushlinux.com;            //网站名称(FQDN)
            charset utf-8;                       //网页的默认字符集
    
            location / {                        //跟目录配置
                root   html;                    //网站根目录的位置安装位置的html中
                index  index.html index.htm;    //默认首页(索引页)
            }
    
    error_page   500 502 503 504  /50x.html;    //内部错误的反馈页面
            location = /50x.html {               //错误页面配置
                root   html;
            }
        }
    }

    4、状态统计模块

    [root@nginx~]# vim /usr/local/nginx/conf/nginx.conf
    //在http中写
    location ~ /status {
    stub_status on;        //打开状态统计功能
    access_log off;        //关闭此位置的日志记录
    }
    [root@nginxconf]#killall -HUP nginx     //重启nginx服务

    四、创建mysql数据库

    1、查看所需的软件

     rpm -q mysql mysql-server mariadb mairadb-server \如果有 rpm -e 卸载 无法卸载 --nodeps(不验证依赖关系)
    [root@localhost ~]# rpm -q ncurses-devel   //检测安装包

    2、若没有安装

    [root@localhost ~]# yum -y install ncurses-devel  //用yum安装软件包

    3、新建一个mysql用户和组

    [root@localhost ~]# useradd -M -s /sbin/nologin mysql    //创建一个用户组

    4、安装cmake

    [root@localhost ~]# yum -y install cmake    //安装编译命令

    5、编译安装mysql数据库

    [root@localhost ~]# tar -xf mysql-5.7.24.tar.gz -C /usr/src/    //解压Msyql软件包并指定解压位置
    [root@localhost ~]# cd /usr/src/mysql-5.7.24/      //进入解压后路径内
    //编译安装
    [root@localhost mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc && make && make install

      -DCMAKE_INSTALL_PREFIX=/usr/local/mysql //数据库程序安装目录

      -DDEFAULT_CHARSET=utf8 //指定字符集编码

      -DDEFAULT_COLLATION=utf8_general_ci //默认的字符集校对规则,utf8_general_ci适用于utf-8字符集的通用规则

      -DWITH_EXTRA_CHARSETS=all //指定额外支持的字符集编码

      -DSYSCONFDIR=/etc //指定配置文件存放目录

    报错处理:

    ------------------------------------------------------------------------------

    CMake Error at cmake/boost.cmake:81 (MESSAGE):

    You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

    This CMake script will look for boost in <directory>. If it is not there,

    it will download and unpack it (in that directory) for you.

     If you are inside a firewall, you may need to use an http proxy:

     export http_proxy=http://example.com:80

     Call Stack (most recent call first):

    cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)

    CMakeLists.txt:507 (INCLUDE)

     -- Configuring incomplete, errors occurred!

    See also "/usr/src/mysql-5.7.24/CMakeFiles/CMakeOutput.log".

    See also "/usr/src/mysql-5.7.24/CMakeFiles/CMakeError.log".

    ------------------------------------------------------------------------------

    在执行时如果报一个boost软件的错误,进行如下操作

    [root@localhost ~]# mkdir /usr/local/boost/       //创建一个文件夹boost
    [root@localhost ~]# cd /usr/local/boost/            //进入文件夹
    [root@localhost boost]# tar -xf boost_1_59_0.tar.gz         //在当前位置解压boost软件包
    [root@localhost boost]# cd /usr/src/mysql-5.7.24/          //回到Mysql安装路径
    [root@localhost mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DWITH_BOOST=/usr/local/boost/ && make && make install

    6、修改用户和组

    [root@localhost mysql-5.7.24]# chown -R mysql:mysql /usr/local/mysql/  

    7、建立配置文件

    [root@localhost ~]# vim /etc/my.cnf           //修改Mysql主配置文件
    [mysqld]
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    
    [mysqld_safe]
    log-error=/usr/local/mysql/data/mysql.log
    pid-file=/usr/local/mysql/data/mysql.pid

    8、初始化数据库

    [root@localhost ~]# /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --initialize   //初始化并留下密码(后面会用密码要记住)     
    
    2019-09-10T16:36:34.384265Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2019-09-10T16:36:34.631107Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2019-09-10T16:36:34.673027Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2019-09-10T16:36:34.733541Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 270a4236-d3e9-11e9-96bf-000c299b5cf0.
    2019-09-10T16:36:34.734738Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2019-09-10T16:36:34.735658Z 1 [Note] A temporary password is generated for root@localhost: yR1jAfi)xCd%

     --basedir=/usr/local/mysql/ //指定安装目录(产品目录)

      --datadir=/usr/local/mysql/data //指定数据目录

      --user=mysql //指定用户身份

    9、修改文件、添加变量

    [root@localhost ~]# vim /etc/profile      //开机启动加载文件
    PATH=$PATH:/usr/local/mysql/bin         //设置变量
    
    [root@localhost ~]# source /etc/profile    //重新加载文件

    10、复制服务脚本

    [root@localhost ~]# cp /usr/src/mysql-5.7.24/support-files/mysql.server /etc/init.d/mysqld 

    11、加权限,开启数据库

    [root@localhost ~]# chmod +x /etc/init.d/mysqld      //给脚本执行权限
    [root@localhost ~]# /etc/init.d/mysqld start          //开启数据库
    
    [root@localhost ~]# /etc/init.d/mysqld restart        //重新启动服务

    12、为数据库修改密码

    [root@localhost ~]# mysql -u root -p'yR1jAfi)xCd%'     //使用原始密码进入数据库
    [root@localhost ~]# mysqladmin -u root -p'yR1jAfi)xCd%' password '123123'   //更改数据库密码
    [root@localhost ~]# mysql -uroot -p123123            //用新密码进入数据库

    五、PHP安装

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

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

    1、安装支持软件

    [root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel 

    2、编译安装PHP

    [root@localhost ~]# tar -xf php-5.6.39.tar.gz -C /usr/src/      //解压软件包
    [root@localhost ~]# cd /usr/src/php-5.6.39/      //进入解压后路径
    [root@localhost php-5.6.39]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install  //编译安装

    3、安装后优化

    [root@localhost php-5.6.39]# cp /usr/src/php-5.6.39/php.ini-production /usr/local/php5/php.ini   //复制配置文件
    [root@localhost php-5.6.39]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/          //链接命令文件
    [root@localhost php-5.6.39]# ln -s /usr/local/php5/bin/* /usr/local/sbin/           //链接命令文件

    4、安装ZendGuardLoader(注意:若是64位系统,该软件得到其官网下载64位的相应软件包,若用32位的就会报错。下载地址:http://www.zend.com/en/products/guard/downloads)

    [root@localhost ~]# tar -xf zend-loader-php5.6-linux-x86_64_update1.tar.gz -C /usr/src/      //安装优化软件包
    [root@localhost ~]# cd /usr/src/zend-loader-php5.6-linux-x86_64/          //进入优化软件包路径
    [root@localhost zend-loader-php5.6-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/      //复制文件
    [root@localhost ~]# echo -e "zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
    zend_loader.enable=1" >> /usr/local/php5/php.ini   //在文件最后添加内容
    [root@localhost ~]# tail -2 /usr/local/php5/php.ini   //查看添加内容详情
    zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
    zend_loader.enable=1

    5、启用php-fpm进程

    [root@localhost ~]# useradd -M -s /sbin/nologin php     //创建一个所属用户组
    [root@localhost ~]# cd /usr/local/php5/etc/                     
    [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf   //修改文件名
    [root@localhost etc]# vim php-fpm.conf      //修改主配置文件
    25 pid = run/php-fpm.pid
    149 user = php
    150 group = php
    241 pm.max_children = 50
    246 pm.start_servers = 20
    251 pm.min_spare_servers = 5
    256 pm.max_spare_servers = 35
    [root@localhost etc]# /usr/local/sbin/php-fpm        //启动优化服务
    [root@localhost etc]# netstat -anpt | grep php-fpm   //查看服务是否开启

    [root@nginxetc]# vim /etc/init.d/nginx 
    #!/bin/bash
    # chkconfig: 2345 99 20
    # description: Nginx Server Control Script
    PROG="/usr/local/nginx/sbin/nginx"
    PIDF="/usr/local/nginx/logs/nginx.pid"
    PROG_FPM="/usr/local/sbin/php-fpm"
    PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
    case "$1" in
    start)
        $PROG 
        $PROG_FPM
    ;;
    stop)
        kill -s QUIT $(cat $PIDF)
        kill -s QUIT $(cat $PIDF_FPM)
    ;;
    restart)
        $0 stop
        $0 start
    ;;
    reload)
        kill -s HUP $(cat $PIDF)
    ;;
    *)
        echo "Usage: $0 (start|stop|restart|reload)"
        exit 1
    esac
    exit 0

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

    6、配置nginx支持PHP解析

    [root@ns1 ~]# cat /usr/local/nginx/conf/nginx.conf      //修改nginx主配置文件
    
    user  nginx nginx;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;
    
    
    events {
     use epoll;   
     worker_connections  1024;
    }
    
    
    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  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
           server_name  localhost;
    
            charset utf-8;
    
    
            location / {
                root   html;
                index  index.html index.htm    index.php;
            }
    
            location ~ .php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                include        fastcgi.conf;
            }
    }
    }

    7、检测配置的语法,重启

    [root@localhost ~]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@nginxetc]#killall -HUP nginx   //重启

    8、PHP页面访问测试

    [root@localhost ~]# vim /usr/local/nginx/html/mysql.php
    <?php
    $link=mysql_connect('localhost','root','123123');
    if($link)echo"<h1>succeccful!</h1>";
    mysql_close();
    ?>
    [root@localhost ~]# vim /usr/local/nginx/html/php.php 
    <?php
    phpinfo();
    ?>

     

     1、代理

      在Java设计模式中,代理模式是这样定义的:给某个对象提供一个代理对象,并由代理对象控制原对象的引用。

      可能大家不太明白这句话,在举一个现实生活中的例子:比如我们要买一间二手房,虽然我们可以自己去找房源,但是这太花费时间精力了,而且房屋质量检测以及房屋过户等一系列手续也都得我们去办,再说现在这个社会,等我们找到房源,说不定房子都已经涨价了,那么怎么办呢?最简单快捷的方法就是找二手房中介公司(为什么?别人那里房源多啊),于是我们就委托中介公司来给我找合适的房子,以及后续的质量检测过户等操作,我们只需要选好自己想要的房子,然后交钱就行了。

      代理简单来说,就是如果我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做。那么这个例子里面的中介公司就是给我们做代理服务的,我们委托中介公司帮我们找房子。

      Nginx 主要能够代理如下几种协议,其中用到的最多的就是做Http代理服务器。

     

    2、正向代理

      弄清楚什么是代理了,那么什么又是正向代理呢?

      这里我再举一个例子:大家都知道,现在国内是访问不了 Google的,那么怎么才能访问 Google呢?我们又想,美国人不是能访问 Google吗(这不废话,Google就是美国的),如果我们电脑的对外公网 IP 地址能变成美国的 IP 地址,那不就可以访问 Google了。你很聪明,VPN 就是这样产生的。我们在访问 Google 时,先连上 VPN 服务器将我们的 IP 地址变成美国的 IP 地址,然后就可以顺利的访问了。

      这里的 VPN 就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端是要进行一些正向代理的设置的。

      PS:这里介绍一下什么是 VPN,VPN 通俗的讲就是一种中转服务,当我们电脑接入 VPN 后,我们对外 IP 地址就会变成 VPN 服务器的公网 IP,我们请求或接受任何数据都会通过这个VPN 服务器然后传入到我们本机。这样做有什么好处呢?比如 VPN 游戏加速方面的原理,我们要玩网通区的 LOL,但是本机接入的是电信的宽带,玩网通区的会比较卡,这时候就利用 VPN 将电信网络变为网通网络,然后在玩网通区的LOL就不会卡了(注意:VPN 是不能增加带宽的,不要以为不卡了是因为网速提升了)。

      可能听到这里大家还是很抽象,没关系,和下面的反向代理对比理解就简单了。

    3、反向代理

      反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

      下面我们通过两张图来对比正向代理和方向代理:  

     

      理解这两种代理的关键在于代理服务器所代理的对象是什么,正向代理代理的是客户端,我们需要在客户端进行一些代理的设置。而反向代理代理的是服务器,作为客户端的我们是无法感知到服务器的真实存在的。

      总结起来还是一句话:正向代理代理客户端,反向代理代理服务器。

  • 相关阅读:
    python ddt 传多个参数值示例
    Appium 输入 & 符号,实际输入&-
    curl 调用jenkins的api
    Android WebView的Js对象注入漏洞解决方案
    Could not find com.android.tools.build:gradle:1.3.0.
    react-native疑难
    win上搭建react-native android环境
    gradle大体内容
    android studio This client is too old to work with the working copy at
    sharedPreference
  • 原文地址:https://www.cnblogs.com/canflyfish/p/11537382.html
Copyright © 2020-2023  润新知