CentOS7搭建LNMP環境


以前寫的過時了,重新發一篇新的。

安裝PHP

 

下載官網:https://www.php.net/downloads.php

為了方便,我存了現成的

百度網盤:https://pan.baidu.com/s/1LlLDsoL6d9Yej0lA5Osqzg  提取碼:sxif

還有更省事的:file.fengyumeng.com/php-7.2.20.tar.gz

 

直接下載

wget file.fengyumeng.com/php-7.2.20.tar.gz

 

解壓

tar -zxvf php-7.2.20.tar.gz

 

移走

mv php-7.2.20 /usr/local/

 

安裝一些必要依賴

yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel

 

別急,還有一批

yum -y install gcc
yum -y install gcc-c++
yum -y install libxslt-devel*
yum -y install mod_ssl
yum -y install libtool-ltdl*
yum -y install perl* 
yum -y install autoconf

 

切目錄

cd /usr/local/php-7.2.20/

 

配置

./configure --prefix=/usr/local/php7 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-jpeg-dir --with-freetype-dir --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-pcntl --with-curl --with-fpm-user=nginx --enable-ftp --enable-session --enable-xml --without-pear --disable-phar

 

編譯

make

 

編譯出錯請查看這篇博客,一般都找得到答案

http://www.cnblogs.com/sweetXiaoma/p/5855732.html

 

安裝

make install

 

添加環境變量

vim /etc/profile

 

在最后一行下面加入

PATH=$PATH:/usr/local/php7/bin
export PATH

 

立即生效

source /etc/profile

 

查看PHP版本

php -v 

 

生成必要文件

cp php.ini-production /usr/local/php7/etc/php.ini
cp sapi/fpm/php-fpm /usr/local/php7/etc/php-fpm
cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

 

編輯php.ini

vim /usr/local/php7/etc/php.ini 

 

以下參數僅供參考

date.timezone = PRC    //設置時區
file_uploads = On    //是否允許上傳
upload_tmp_dir = /tmp    //上傳臨時目錄
max_file_uploads = 20    //單個請求最多上傳數量
upload_max_filesize = 10M    //允許上傳文件大小
post_max_size = 20M    //允許post傳輸最大值(這個必須比upload_max_filezise大)
memory_limit = 128M    //設置腳本最大使用內存
error_reporting=E_ALL    //輸出錯誤信息
error_log = /var/log/php.log    //錯誤日志路徑

 

創建日志文件

touch /var/log/php.log
chmod 755 /var/log/php.log

 

接下來是nginx。

 

安裝Nginx

下載地址

http://nginx.org/en/download.html

Mainline version 開發版
Stable version 穩定版
Legacy versions 歷史版

 

鼠標移動到你要選擇的版本超鏈接上點右鍵 復制鏈接地址

 

切目錄

cd /usr/local/

 

下載

wget https://nginx.org/download/nginx-1.16.0.tar.gz

 

解壓

tar -zxvf nginx-1.16.0.tar.gz

 

進去

cd nginx-1.16.0

 

配置

./configure --with-http_stub_status_module --with-http_ssl_module

 

安裝

make && make install

 

打開配置文件

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

 

這一段都是包在server{}之中  如要配置多個域名 則復制粘貼多個server{}代碼塊

#重寫url隱藏index.php
#把下面這一段打開注釋 並將其中的/scripts 修改為 $document_root

server {
    listen       80;
    server_name  www.abc.com abc.com;
    root /var/www/abc;
    location / {
            if (!-e $request_filename) {
                 rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                 rewrite ^(.*)$ /index.php?s=$1 last;
             }
        index  index.html index.htm index.php;
    }
    location ~ \.php$ {
        root           /var/www/abc;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

保存退出

 

配置php-fpm

vim /usr/local/php7/etc/php-fpm.d/www.conf

 

把里面的user group 兩行 改為nobody 或者是系統中存在的用戶

user = nobody
group = nobody

 

啟動php-fpm,載入php.ini

/usr/local/php7/sbin/php-fpm -c /usr/local/php7/etc/php.ini

 

注意  如果修改了php.ini則每次需要殺掉php-fpm進程再重新啟動php-fpm,PHP的解析執行靠的是這家伙,不靠nginx。

ps -ef | grep php-fpm
kill -9 上一條命令查到的PID

 

編寫服務腳本

vim /etc/init.d/nginx

 

粘貼以下代碼

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /usr/local/nginx/logs/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
# reload nginx service functions.
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL

 

設置權限

chmod 755 /etc/init.d/nginx  

 

加入開啟自啟

vi /etc/rc.local

 

在末尾新增一行

/usr/local/nginx/sbin/nginx

 

服務命令啟動

/etc/init.d/nginx start

 

加入開機啟動

chkconfig nginx on

 

然后你就可以使用以下服務命令了

systemctl status nginx
systemctl start nginx
systemctl stop nginx
systemctl reload nginx
systemctl restart nginx

 

安裝MySQL

安裝mysql源

yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

 

安裝mysql

yum install mysql-community-server

 

啟動mysql

systemctl start mysqld

 

獲取初始密碼

grep 'temporary password' /var/log/mysqld.log

得到這行A temporary password is generated for root@localhost: Jqqskhz1Wr (root@localhost:后面就是默認密碼 只需復制 下一步輸入密碼的時候粘貼即可)

 

進入mysql

mysql -uroot -p

 

第一時間修改密碼

SET PASSWORD = PASSWORD('123456//ZZZjjj');

密碼必須復雜 需包含大小寫特殊符號,否則無法修改成功

 

開放遠程連接

use mysql;
update user set host = '%' where user = 'root';

百分號相當於*號,意思是全部放行,也可改為IP地址則只允許此IP連接,也可以設置為192.168.%.%或者192.168.0.1/9代表允許一個ip段進行連接,也可以多加幾條數據設置不同ip允許連接。

 

MySQL權限分配

create user 'myqiutian'@'%' IDENTIFIED BY '*********';

創建一個用戶為myqiutian,因為用的%所以任何IP都可以登錄,但登錄后卻無法看到數據庫,新增用戶所有權限默認關閉。

 

懶人專用語句

grant all on *.* to myqiutian;

設置該用戶所有數據庫所有表擁有所有權限

 

如果你真的是懶人,下面的就不用看了,直接跳到最后一個命令 刷新權限 ,執行完就可以下班了。

 

grant select on A數據庫.* to myqiutian;

授權myqiutian這個用戶可以查看A數據庫里的所有表,但是僅限於A數據庫,也僅限於查看。

 

grant insert on A數據庫.user to myqiutian;

授權myqiutian這個用戶可以對A數據庫里的user表進行insert操作,但僅限於user表,也僅限於select和insert操作。

 

撤銷權限

revoke insert on A數據庫.user from myqiutian;

注意:撤銷權限之前最好用show grants for myqiutian;這條sql查一下該用戶有哪些權限,增加的什么權限就撤什么權限,你增加的insert就不能撤銷all。

 

MySQL權限工作流程:
--------->用戶連接MySQL
--------->查詢user表 核對賬號密碼 檢查host字段 是否允許你的ip進行連接
--------->查詢user表 其他權限字段 值若為Y 代表用戶對所有數據庫所有表所有字段都擁有該權限 若有值為N 則往下走
--------->查詢db表 庫權限控制表 獲取該用戶對哪些庫擁有哪些權限 這張表里一條記錄代表一個庫
--------->查詢tables_priv表 獲取該用戶的表控制權限 同樣 如果db表中該用戶對A數據庫擁有insert權限 那么不管tables_priv表中如何設置 都不會影響該用戶的isnert權限,如果tables_priv表中的單表權限不為all,則繼續往下走
--------->查詢columns_priv表 字段控制 可以設置對表字段的控制權限

 

四張表依次為 user db tables_priv columns_priv

 

注意:
如果user表中全為Y,那么不會查詢下面的表。
user表中的select為N時,可以在db表中指定哪些庫可以被用戶看到。
但是無論是表控制還是字段控制,上級權限表(user表除外)的select字段必須為Y。
而其他權限如果上級表給出了設置,那么不會采用下級表的設置。

 

刷新權限,使權限立即生效

flush privileges;

 

別忘了這里有一個配置文件cat /etc/my.cnf 可以查看存儲的數據與log的位置。

 

好了,我們一起下班吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM