zoukankan      html  css  js  c++  java
  • LNMP环境搭建网站

    系统:Centos7.4

    一台服务器安装nginx、php、mysql

    原理不是很懂,但实测如下两种环境下都能成功,这里做下记录:

    1、一个干净的系统,从0开始完成所有步骤,完成LNMP搭建

    2、已经装了mysql,之后再装nginx、php,完成LNMP搭建(安装php编译时要注意指定mysql的安装路径等信息)

    注意:安装前一定检查是否装有mariadb数据库(系统安装时选择某项安装会集成安装上的),若有请卸载,不然后面初始化mysql时会报错,百度了很久都没找原因,都说是权限问题,后来在重复搞整时看到有关于mariabd的打印,猜测是这个原因,卸载mariadb问题解决。

    Can't create/write to file '/data/mysql/xx.pid' (Errcode: 13)

    步骤如下:

    一、源码ginx安装

    1、安装nginx需要的环境依赖库、工具等

    yum -y install pcre pcre-devel openssl-devel openssh  wget 

    2、下载nginx安装包至/usr/local/src下

    wget -c -P /usr/local/src http://mirrors.yangxingzhen.com/nginx/nginx-1.13.4.tar.gz

    3、安装编译器

    yum -y install gcc gcc-c++

    4、编译安装nginx

    cd /usr/local/src

    tar zxf nginx-1.13.4.tar.gz

    cd /src/nginx-1.13.4

    #编译前可以根据企业实际需要选择是否隐藏nginx版本等信息

    sed -i -e 's/1.13.4/123/g' -e 's/nginx//abc/g' -e 's/"NGINX"/"abc"/g'  ./src/core/nginx.h

    #预编译(根据实际需求添加相应模块)

    ./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module

    #编译、安装(-j8表示同时用8核CPU进行编译)

    make -j8 && make install

    5、创建nginx启动用户,默认用户为www,不授予登陆权限

    useradd -s /sbin/nologin www

    6、启动nginx并测试是否能正常访问

    #检测配置文件是否正确

    /usr/local/nginx/sbin/nginx -t

    #启动nginx

    /usr/local/nginx/sbin/nginx

    7、根据具体需求对nginx.conf配置文件进行修改调整

    cp /usr/local/nginx/conf/nginx.conf   /usr/local/nginx/conf/nginx.conf.bak

    #为方便查看配置文件,可将多余的注释和空行清空

    grep -vE "^$|#"  nginx.conf.default >nginx.conf

    #修改配置

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

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        include conf.d/*.conf;    # 开启虚拟主机,将会去此目录下找配置文件,在找不到时才会往下进行
        server {
            listen       80;
            server_name  abc.c.com;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

     #创建虚拟主机配置文件目录并创建一个配置,如nginx.conf配置所示,conf.d文件夹与nginx.conf配置文件处于同级。

    mkdir -p /usr/local/nginx/conf/conf.d

    vim /usr/local/nginx/conf/conf.d/abc1.conf    #应该根据具体需求进行配置

    server{
        listen 80;
        server_name  www.abc.com;
        root /usr/local/nginx/html/abc/public; # 该项要修改为你准备存放相关网页的路径
    
        location / {
            index  index.php index.html index.htm;
             #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
             if (!-e $request_filename)
             {
                #地址作为将参数rewrite到index.php上。
                rewrite ^/(.*)$ /index.php?s=$1;
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                #rewrite ^/subdir/(.*)$ /subdir/index.php?s=$1;
             }
        }
    
            location /api/ {
            index  index.php index.html index.htm;
             #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
             if (!-e $request_filename)
             {
                #地址作为将参数rewrite到index.php上。
                #rewrite ^/(.*)$ /index.php?s=$1;
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                rewrite ^/api/(.*)$ /api/index.php?s=$1;
             }
        }
    
            location ~* ^/upload/.+.(html|php)$ {
                    return 404;
            }
    
            location ~* ^/plugins/.+.(html|php)$ {
                    return 404;
            }
    ▽
            location ~* ^/themes/.+.(html|php)$ {
                    return 404;
            }
    
        #proxy the php scripts to php-fpm
        location ~ .php {
                include fastcgi_params;
                ##pathinfo支持start
                #定义变量 $path_info ,用于存放pathinfo信息
                set $path_info "";
                #定义变量 $real_script_name,用于存放真实地址
                set $real_script_name $fastcgi_script_name;
                #如果地址与引号内的正则表达式匹配
                if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
                        #将文件地址赋值给变量 $real_script_name
                        set $real_script_name $1;
                        #将文件地址后的参数赋值给变量 $path_info
                        set $path_info $2;
                }
                #配置fastcgi的一些参数
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
                ###pathinfo支持end
            fastcgi_intercept_errors on;
    
            fastcgi_pass   127.0.0.1:9000;
            # fastcgi_pass 如果是 sock形式,可能是下面的配置
            # fastcgi_pass unix:/tmp/php-cgi.sock
        }
    
    }
    

    #平滑重启nginx,访问域名查看是否有结果(如果是静态网站,现在能正常访问了,但这里是动态网站,需要php解释器,还需要连接数据库,访问肯定是报错一堆)

    /usr/local/nginx/sbin/nginx -s reload

    二、mysql数据库安装

    1、安装依赖环境

    yum -y install cmake ncurses-devel perl  autoconf  

    2、下载安装包

    cd /usr/loca/src

    wget  http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39.tar.gz

    3、 编译安装

    tar zxf mysql-5.6.39.tar.gz

    cd mysql-5.6.39

    #预编译(根据经验,感觉是将以下配置写入my.cnf默认配置中,所以只要你不修改my.cnf配置文件,以下配置就属于默认配置,若修改了my.cnf配置文件就以修改后为准)

    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
    -DMYSQL_DATADIR=/data/mysql 
    -DSYSCONFDIR=/etc 
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
    -DMYSQL_USER=mysql 
    -DMYSQL_TCP_PORT=3306 
    -DWGE_ENGINE=1 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 
    -DWITH_PARTITION_STORAGE_ENGINE=1 
    -DWITH_BLACGINE=1 
    -DWITH_MYISAM_STORAGE_ENGINE=1 
    -DWITH_READLINE=1 
    -DENABLED_LOCAL_INFILE=1 
    -DWITH_EXDDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DEXTRA_CHARSETS=all 
    -DWITH_BIG_DEBUG=0

    将知道的进行解释(其它的以后查到了再进行更新):

    -DCMAKE_INSTALL_PREFIX=  #指定安装目录
    -DMYSQL_DATADIR=  #指定数据库的存放目录即数据目录
    -DSYSCONFDIR=  #指定默认my.cnf配置文件路径,如果遇到一个服务器装多个mysql时,可以对其进行修改,实测有效。
    -DMYSQL_UNIX_ADDR=  #sock命令以及存放路径指定,一台服务器多个mysql时,不要重名
    -DMYSQL_USER=  #指定mysql启动使用的用户
    -DMYSQL_TCP_PORT=  #指定数据库端口
    -DWITH_EXDDEFAULT_CHARSET=  #设置默认数据库字符集
    ----------------------------------------------------------------------------
    #编译、安装
    make -j8 && make install

    4、创建mysql启动用户
    useradd -s /sbin/nologin mysql

     5、mysql安装目录授权(编译安装时会自动创建目录)、数据目录创建(数据库初始化时要用,所以必须提前创建)和授权等

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

    mkdir -p /data/mysql

    chown -R mysql:mysql /data/mysql

    6、修改my.cnf配置文件(很初始的配置,根据实际需求进行调整)

    vim /etc/my.cnf

    [client]
    default-character-set = utf8
    [mysql]
    default-character-set = utf8
    [mysqld]
    datadir = /data/mysql
    socket = /tmp/mysql.sock
    user = mysql
    log-error = /var/log/mysqld.log
    character_set_server = utf8
    

    7、初始化数据库(会在/data/mysql下根据my.cnf配置初始创建一些数据文件和库文件,如果是新装数据库,可重复初始化,每次初始化前将原来生成的文件删除干净。已投入生产的不要此操作.)

    /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
    

    8、启动数据库

    #软链接让mysql的命令全局直接使用

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

    #数据库系统启动制作

    cp /usr/local/mysql/support-files/mysql.server   /etc/init.d/mysqld  #若一台服务器多个mysql可以重新命名如根据数据库版本来区分,mysqld55或mysqld56

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

    /etc/init.d/mysqld start或service mysqld start

    #设置开机启动

    chkconfig --add mysqld

    hkconfig mysqld on

    chkconfig --list mysqld

     三、PHP(FastCGI)安装

    1、安装php函数依赖库等

    yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

    2、安装libmcrypt库、mhash加密扩展库、mcrypt加密扩展库(根据实际需要进行安装)

    #提前安装epel.repo扩展源,不然无法进行安装(根据实际系统版本指定epel-6或epel-7)

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    yum -y install libmcrypt-devel mhash mcrypt

    3、源码安装libiconv(系统环境不同编译时可能会出现部分系统报错,实测有些系统报错,有些没有报错)

    cd /usr/local/src

    wget -c http://mirrors.yangxingzhen.com/libiconv/libiconv-1.14.tar.gz

    tar zxf libiconv-1.14.tar.gz

    cd libiconv-1.14

    ./configure --prefix=/usr/local/libiconv

    #编译时若出现报错,可按此操作解除。

    make -j8 && make install

    解决办法:

    find . -name "stdio.in.h"

    ./srclib/stdio.in.h

    vim ./srclib/stdio.in.h

    大概在698行位置,删除stdio.in.h文件中_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");行即可

     #重新进行编译安装就过了

    make -j8 && make install

    4、源码安装php

    cd /usr/local/src

    wget -c http://mirrors.sohu.com/php/php-5.6.29.tar.gz

    tar zxf php-5.6.29.tar.gz

    cd php-5.6.29

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

    #预编译(参数中有关于mysql的信息,比如指定mysql的安装路径,一定要正确配置

    ./configure --prefix=/usr/local/php 
    --with-config-file-path=/usr/local/php/etc 
    --with-mysql=/usr/local/mysql 
    --with-mysqli=/usr/local/mysql/bin/mysql_config 
    --with-pdo-mysql=/usr/local/mysql 
    --enable-opcache 
    --with-gettext 
    --with-iconv-dir=/usr/local/libiconv 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-zlib 
    --with-libxml-dir 
    --enable-xml 
    --disable-rpath 
    --enable-bcmath 
    --enable-shmop 
    --enable-sysvsem 
    --enable-inline-optimization 
    --with-curl 
    --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-soap 
    --enable-short-tags 
    --enable-static 
    --with-fpm-user=www 
    --with-fpm-group=www 
    --enable-ftp 
    --enable-zip
    

    #编译安装

    make -j8&&make install

    5、配置并启动php

    先从源码包拷贝php.ini文件到etc下

    cp /usr/local/src/php-5.6.29/php.ini-development  /usr/local/php/etc/php.ini

    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

    #启动php

    /usr/local/php/sbin/php-fpm

    四、web站点配置

    1、将web代码放置nginx配置文件指定目录下,并修改权限

    通常情况下需要将代码文件所属用户指定为nginx启动用户(www),不然会出现无访问访问权限导致报错

    chown -R www:www  /usr/local/nginx/html/abc

    2、创建库、数据库访问用户,并导入后端数据库

    mysql -uroot -p

    create database abc character set=utf8;

    grant all on abc.* to userabc@'localhost' identified by '123456';

    source  abc.sql

    flush privileges;

    3、将nginx、php-fpm重启,并访问站点。

    未至精疲力尽,不要怨天尤人。昨日因,今日果。今日为,明日果也!
  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/ccit/p/10078288.html
Copyright © 2011-2022 走看看