nginx

nginx学习笔记

一、几个专业名称的概念

1、pv值(page views)

在一天内,站点所有的页面被浏览的总次数
大型的标准:最少上百万级别吧

2、uv值(unique visitor)

在一天内,有多少个用户访问过我们的网站
大型的标准:10万以上吧,意思是一天有10万人光临你的站点

2、独立ip

在一天内,有多少个独立的ip地址来访问我们的网站

二、如何解决高并发有什么思路?

如果一个网站的uv,pv,独立ip变大,则会导致高的并发连接,这时要对网站分层布局架构,采用负载均衡

1、大并发服务架构图(脑海里存一份)

在这里插入图片描述

2、什么是并发连接?

网站服务器在单位时间内能够处理的最大连接数。

3、如何负载均衡?

(1)、硬件方式

立竿见影,效果非常好,价格非常昂贵,比如F5-BIGIP

(2)、软件方式

nginx就能实现负载均衡,它也是web服务器。

4、负载均衡实现策略?

主要有如下三种

(1)、轮询

负载均衡器把请求轮流转发给后面的web服务器。

(2)、ip哈希

同一个地址的客户端,始终请求同一台主机。

(3)、最少连接

负载均衡器把请求给负载最小的哪台服务器。

三、nginx

1、nginx简单介绍

Nginx 是一个高性能的HTTP服务器,也是一个IMAP/POP3/SMTP邮件服务器,特点是占有内存少,并发能力强

2、和apache的比较

apache:功能完善,历史悠久,模块支持非常丰富,属于重量级产品,比较耗费内存,在并发能力方面没有nginx强。

nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量,能做负载均衡

3、nginx的优点

(1)、它可以高并发连接,官方测试支撑5万并发连接

(2)、内存消耗少

(3)、成本低廉

购买F5 BIG-IP ,NetScaler等硬件负载均衡交换机需要10多万甚至几十万人民币。而Nginx为开源软件,可以免费试用,并且可用于商业用途。

(4)、配置文件非常简单

(5)、支持 rewrite重写规则

(6)、节省带宽,支持gzip压缩

(7)、稳定性高:用于反向代理,宕机的概率微乎其微。

(8)、支持热部署。在不间断服务的情况下,对软件版本升级

三、nginx编译安装

1、下载nginx

在这里插入图片描述
切换到cd/local/src/执行

wget http://nginx.org/download/nginx-1.18.0.tar.gz

tar zxf nginx-1.18.0.tar.gz

2、安装依赖

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

pcre:包括 perl 兼容的正则表达式库
zlib:优化、压缩支持
openssl:支持安全传输协议https(和财务有关系的请求会走的协议)
如果已经安装会提示已经安装过
在这里插入图片描述

3、开始安装

cd nginx-1.12.2

./configure --prefix=/usr/local/nginx1.18.0 --with-http_ssl_module

make && make install

安装后/usr/local/nginx/在四个文件夹
在这里插入图片描述
conf 配置文件
html 网页文件,网站的根目录,就类似与apache里面的htdocs目录。
logs 日志文件
sbin 主要二进制程序,启动程序命令

4、nginx的管理

查看所有的帮助信息

/usr/local/nginx/sbin/nginx -h

在这里插入图片描述

(1)、nginx的启动

/usr/local/nginx/sbin/nginx
#-c 指定配置文件 如果不加默认加载conf/nginx.conf文件。
/usr/local/nginx/sbin/nginx

测试是否启动成功

lsof -i :80
#或
netstat –tunpl |grep 80
#或
ps aux | grep nginx

在这里插入图片描述

(2)、nginx的重启/停止

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

(3)、nginx的检查配置文件/查看编译参数

apache检测配置文件的指令也是httpd.exe -t

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

在这里插入图片描述
当时安装所指定的参数
在这里插入图片描述

(4)、nginx加入环境变量

vim /etc/profile

加入

export PATH=/usr/local/nginx1.18.0/sbin:$PATH

在这里插入图片描述
让环境变量立即生效

source /etc/profile

在这里插入图片描述

5、nginx信号控制(了解)

不要看到别人这样用,你一脸蒙蔽就行了开拓知识点
官网文档

https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/

在这里插入图片描述

(1)、关闭进程

kill –INT  nginx的主进程号

主进程号查看(实际上nginx专门有个文件用来保存主进程id)的方式

#方式一
ps aux|grep nginx
#方式二
cat /usr/local/nginx/logs/nginx.pid

在这里插入图片描述
在这里插入图片描述
得到主进程id后执行关闭进程,再次查看主进程已经没了

kill -INT 14952

在这里插入图片描述

(2)、优雅关闭进程(即等请求结束后,再关闭)

kill -QUIT  nginx的主进程号
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )

(3)、重读配置文件

nginx –s reload一样

kill –HUP  nginx的主进程号
kill –HUP $( cat /usr/local/nginx/logs/nginx.pid )

(4)、重读日志文件(定时备份需要改知识点)

nginx –s reopen一样

kill –USR1  nginx的主进程号
#不建议使用,一用就自动把nginx.pid文件给删除了
kill –USR1 $( cat /usr/local/nginx/logs/nginx.pid )

注意:重新读日志文件,日志文件改名备份后,使用,否则仍然写入原来的日志文件

当我访问站点的时候日志文件越来越大
在这里插入图片描述

在这里插入图片描述
如果我把该配置文件改名后然后重新新建一个和原来一样的名称的文件它会把数据写到新的文件中去吗?
在这里插入图片描述
此时需要执行:

/usr/local/nginx/sbin/nginx -s reopen

然后多刷新几次页面
在这里插入图片描述
在这里插入图片描述

四、配置文件的详细解释

1、配置文件的整体结构

nginx.conf配置文件非常简洁去掉注释和空格大概只有22行左右

egrep -v '#|^$' /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
整体收缩后的结构
在这里插入图片描述
观察可知,该配置文件有两段

events {
}
http {
	server {
}
}

1.1为了保持清爽就把所有的注释都删了

egrep -v '#|^$' nginx.conf.default > nginx.conf

在这里插入图片描述

2、全局配置

worker_processes  1;

配置工作进程的个数,推荐设置为cpu的个数*核心数。


#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

不同错误信息存储的位置


#pid        logs/nginx.pid;

存储nginx进程号的文件

3、事件配置

events {
    worker_connections  1024;
}

worker_connections 1024:一个进程的最大并发数
根据硬件调整这个值,不要让cup跑100%就行了
并发总数是 worker_processes 和 worker_connections 的乘积

4、虚拟主机配置

在http段里面的server段就是配置虚拟主机的,http中每一个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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

(1)、基于域名的虚拟主机

打开配置文件

vim /usr/local/nginx/conf/nginx.conf
    #gzip  on;
    server {
        listen 80;
        server_name www.abc.com;
        location / {
                root abc;
                index index.html;
        }
    }

创建一个和html同等级的目录abc,在abc下创建一个index.html文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后重启nginx

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

本地windows系统上解析ip
在这里插入图片描述
访问www.abc.com,配置成功
在这里插入图片描述

(2)、基于端口的虚拟主机

步骤其实和上面那个一样,配置文件不一样而已

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(3)、基于IP的虚拟主机

把上面基于的域名的换成ip地址就行了


#添加一个地址
ip addr add 172.16.0.17/24 dev eth0

#删除一个地址
ip addr del 172.16.0.17 dev eth0

#清空添加的ip地址
ip addr flush dev eth0



解释:上面的24其实就是
255.255.255.0
二进制:11111111.11111111.11111111.00000000 24个1由此而来
注意:ip addr flush dev eth0这个指令执行后,腾讯云服务器就会失去连接。这个时候不要慌。去腾讯云后台重启一下就又可以了

问题衍生:很多东西是越学越多,知识树就越开枝散叶。
查看ip在windows上是ipconfig linux上是 ip addr
关于ip addr 和 ifconfig

查看原有的ip地址
在这里插入图片描述
新增一个ip地址,不要和上面那个重复
在这里插入图片描述
然后配置一个虚拟主机

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

在这里插入图片描述
创建站点目录
在这里插入图片描述
在这里插入图片描述

重新加载配置后并访问测试
在这里插入图片描述

注意:基于IP的虚拟主机配置在生产环境中不经常使用,一般配置在负载均衡后面的服务器上面,知道即可。

5、nginx虚拟主机规范化

也借鉴了apache的这种包含方法,可以把多个虚拟主机配置成一个个单独的配置文件,仅仅和nginx的主配置文件nginx.conf分离开即可。

(1)、在config目录下新建一个目录

mkdir /usr/local/nginx/conf/extra/

(2)、进入新创建的目录创建一个虚拟主机

在这里插入图片描述
在这里插入图片描述

(3)、引入ngnix.conf的主配置文件

在这里插入图片描述
创建目录

vim blog/index.html

在这里插入图片描述

重启服务
在这里插入图片描述

在windows上访问需要解析ip地址,并访问
在这里插入图片描述


在linux上访问也需要修改hosts文件

echo '127.0.0.1 www.blog.com' >> /etc/hosts
curl http://www.blog.com

在这里插入图片描述

(4)可以在主配置文件中映入所有虚拟主机
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #加载虚拟机住目录里面的虚拟主机
    include extra/*.conf;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

这样就不用一个一个在主配置文件中进行引入了

6、别名配置

所谓虚拟主机别名,就是为虚拟主机设置除了主域名以外的一个或多个域名名字,这样就能实现用户访问的多个域名对应同一个虚拟主机网站的功能。
server_name所在行后面添加别名即可
就拿上面的blog来试试。
在这里插入图片描述
保存重启nginx,然后把新的域名添加到hosts文件,再次访问

在这里插入图片描述
在这里插入图片描述

五、日志的管理

1、日志的实例

看下面这个图,我想你们肯定都知道是什么意思了
在这里插入图片描述
接下来看看输出信息的含义

$remote_addr$http_x_forwarded_for用于记录IP地址
$remote_user用于记录远程客户端用户名称;
$time_local用于记录访问时间与时区;
$request用于记录请求URL与HTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent用于记录发送给客户端的文件主体内容大小;
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户端浏览器的相关信息。

Nginx允许针对不同的server做不同的Log
所以我们接下来就做一个基本案例,给上面的blog做一个日志
先去主配置文件定义一个格式,ip地址 请求方式 状态 还有客户端浏览器

log_format mylog '$remote_addr - $request - $status - $http_user_agent';

在这里插入图片描述
然后去给www.blog.com 的配置文件指定日志

access_log logs/blog.access.log mylog;

在这里插入图片描述
重启服务器

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

访问在这里插入图片描述

查看日志文件logs目录多了一个日志文件
在这里插入图片描述
然后查看一下内容,就是我们规定好的内容
在这里插入图片描述
注意:
$remote_addr$http_x_forwarded_for都用于记录IP地址,区别是什么?
配置负载均衡的时候$remote_addr是返回反向代理服务器的ip地址。
这时候,就要用log_format 指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP

2、日志结合定时任务切割(mysql备份同理)

1、书写脚本

在/date下新建一个目录,写一个脚本文件

在这里插入图片描述

#!/bin/bash
logname=/usr/local/nginx/logs/blog.access.log
baklog=/date/$(date -d yesterday +%Y%m%d%H%M).blog.access.log
mv $logname $baklog
touch $logname
/usr/local/nginx/sbin/nginx -s reopen

2、创建定时任务

如果没有安装定时任务,可以使用
yum install -y vixie-cron命令进行安装;
启动定时任务service crond start
查看定时任务crontab -l
编辑定时任务crontab –e
删除定时任务crontab -r

*/1 * * * * sh /date/runlog.sh
分 时 日 月 周 命令
/1:表示每分钟执行一次


0 3 * * * 命令 :表示每天凌晨3点0分执行命令
0 3 * * 1-5 命令 :表示周一到周五凌晨3点0分执行命令
0 3,22 * * * 命令 :表示每天凌晨3点0分和晚上10点0分执行命令
*/1 * * * 命令 :表示每隔1分钟执行一次命令

在这里插入图片描述

可能用到的指令,生成的日志太多了,你想批量删除以什么结尾的文件

rm -rf *.access.log

六、location语法详解

1、location的作用

location指令的作用是根据用户请求的URL来执行不同的应用。

2、location的基本语法

大概分为3种

精确匹配
location = patt {
}
一般匹配
location patt{
} 
正则匹配
location ~ patt{
} 

3、curl工具的使用

在linux下面配置的虚拟主机测试时,要在hosts文件里面做好解析
linux的hosts文件在/etc/hosts
windows的hosts文件在C:\Windows\System32\drivers\etc
为什么上面是location这里就开始将curl了呢?,因为下面要用
在这里插入图片描述

(1)基本用法

curl www.blog.com

(2)-o 保存访问的页面

curl -o blog.txt www.blog.com
#不想保存文件就指定到黑洞里面去
curl -o /dev/null www.blog.com

在这里插入图片描述

(3) -s 不输出进度

curl -s -o blog.txt www.blog.com

在这里插入图片描述

(4)-I和-i

-i是显示返回头信息和网页内容
-I只显示返回头信息
curl -i www.blog.com
curl -I www.blog.com

在这里插入图片描述
在这里插入图片描述

(5)-w 输出指定格式的内容

多用于测试是否请求成功

输出格式由普通字符串和任意数量的变量组成
输出变量需要按照`%{variable_name}`的格式
%{http_code}表示状态码。
curl -s -o /dev/null -I -w '%{http_code}\n' www.blog.com

在这里插入图片描述

4、匹配实例详解

书写完匹配规则后测试之前都要重启nginx服务

(1)精准匹配与一般匹配

注意:= 开头表示精确匹配
在这里插入图片描述

测试

curl -w '\n' www.blog.com/test

在这里插入图片描述

(2)一般匹配与长度问题

总结:访问的路径中,如果有多个location都符合,则匹配到最长字符串(location)优先;
在这里插入图片描述

在这里插入图片描述

(3)一般匹配与正则匹配

~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
在这里插入图片描述
测试结果
在这里插入图片描述
总结:如果常规字符串,与正则都匹配,则优先匹配正则

注意:也可以通过再字符串规则前设置^~ 表示匹配到常规字符串,不做正则匹配检查

在这里插入图片描述
测试结果
在这里插入图片描述

(4)默认匹配

下面这个就是默认匹配

location   / {
	具体配置
}

/为默认匹配,即如果没有匹配上其他的location,则最后匹配‘默认匹配’部分

总结:location的命中过程是这样的;
(1)先判断精准匹配,如果匹配成功,立即返回结果并结束解析过程
(2)判断一般匹配,如果有多个匹配成功,记录下来最长的匹配规则,
(3)继续判断正则匹配,按匹配里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功一个,立即返回结果,结束解析过程。
注意:一般匹配中,顺序无所谓,是按匹配的场地来确定的;正则匹配中,顺序有所谓,因为是从前向后匹配的。

七、Nginx rewrite(重写规则)

比如访问
http://www.blog.com/index.html

实际上访问
http://www.blog.com/index.php

Nginx rewrite主要功能是实现URL地址重写,需要PCER的支持,前面已经安装。

几个重要的单词

falg标记符号作用
last本条规则匹配完成后,继续向下匹配新的locationURL规则
break本条规则匹配完成即终止,不再匹配后面的任何规则
redirect返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent返回301永久重定向,浏览器地址栏会显示跳转后的url地址

1、基本案例

案例一:访问index.php 重写到abc.html

在这里插入图片描述

server {
        listen 80;
        server_name www.blog.com;
        location / {
                root blog;
                index index.html;
        }
        rewrite ^/index\.php /abc.html last;
}

windows访问要做好hosts文件的解析
在这里插入图片描述

在这里插入图片描述

案例二:网站的跳转案例

访问www.blog.com/index.php 则变成访问www.abc.com/index.php

在这里插入图片描述

代码

server {
        listen 80;
        server_name www.blog.com;
        location / {
                root blog;
                index index.html;
        }
        #rewrite ^/index\.php /abc.html last;
        rewrite ^/(.*) http://www.abc.com/$1 break;
        
        #点号,在正则里面表示除了换行符以外的任何字符,
        #星号,表示0到多个。
        # 使用.*来表示任何字符。
        #$1符号,表示前面(.*)里面的内容。
}

在这里插入图片描述
注意这里,测试时一定要确保域名都已经在hosts文件中解析过,否则访问不上,hosts文件修改后浏览器要重新打开才会读取新内容

2、break与last的区别

location ~ ^/break {
	rewrite ^/break /test  break;
}
#当访问 域名/last的时候 重写到/test 此时因为时last所以没有结束,就续向下匹配新的locationURL规则 查找/test的。
location ~ ^/last {
	rewrite ^/last  /test  last;
}
location /test{
	root abc;
	index 123.html;
}

注意 当访问 域名/test url时,实际上是返回的 abc/test/123.html页面的内容;还有这里一定要留意文件夹的创建,有错的时候可以看一下错误日志
在这里插入图片描述

3、redirect(302)与permanent(301)区别

301永久重定向,浏览器会记住,
比如a.com网站 301到 b.com网站,
浏览器中输入a.com时,就不请求a.com了,就直接请求b.com网站了;
302临时重定向,浏览器不记住,
比如a.com网站 302到 b.com网站,
浏览器中输入a.com时,还是请求a.com网站,根据a.com网站响应的location内容,再去请求b.com网站;

#301重定向;
rewrite ^/(.*)  http://www.abc.com/$1 permanent;

在这里插入图片描述

#302重定向;
rewrite ^/(.*)  http://www.abc.com/$1 redirect;

测试302重定向前要清除一下缓存,不然还是一直301
在这里插入图片描述

八、gzip压缩提升网站速度

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types application/javascript text/css

只需要记住:

gzip_min_length 大于1K才压缩
gzip_comp_level 压缩级别
gzip_types 压缩的类型

注意:text/html是默认开启的压缩类型,根据网友的统计测试,压缩级别大概超过6几乎就没有区别了,所以我们直接设置为6即可。

1.为什么我们压缩大于1K的文件呢?因为小于1K容易越压缩越大
2.图片,视频等不要压缩,因为不但不会减小,在压缩时消耗cpu和内存资源。图片我们要采取的策略应该在程序上比如裁剪缩略图等
3.总结:只压缩 css和 js是最佳策略

个人体验

我个人服务器,带宽是3M的,有一个JS是高达2.2M,每次页面一开至少需要5秒平均维持6秒,最高长达7.4秒。

这样一个网站对于用户来说,我觉得不会想访问第二次。

经过gzip压缩后,原本的2.2M 变成了 336KB 原本的响应时间6秒变成了 455ms ,太夸张了。

原本的页面打开需要5-7秒 ,现在只需要1.5秒左右(这是正常的页面打开时间),我个人觉得很好用。

九、lnmp环境搭建之安装mysql

1、检测mysql的安装情况

yum list installed | grep mysql
yum remove -y mysql-libs

2、下载mysql二进制软件包

在这里插入图片描述
我们最好保持一致下载5.7.30就行
在这里插入图片描述
上方红色的框框复制,然后去镜像网站查找

https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/

在这里插入图片描述
速度那是杠杠滴。然后继续上传上去
在这里插入图片描述
解压

tar xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar 

然后卸载自带mariadb.libs

#查看是否有存在
yum list installed | grep mariadb

在这里插入图片描述

yum remove mariadb-libs.x86_64

然后就是4个指令,一口气成功,注意要按照这个顺序操作

rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm

在这里插入图片描述
都不带错的一路成功,事实证明选择比努力重要。 我醉了

5、启动mysql

#centos7
systemctl start mysqld.service
#centos6
service mysqld start

netstat -tpnl | grep 3306

在这里插入图片描述

6、查看mysql的登录密码

r?k;B=yfk9YL

grep "root@localhost" /var/log/mysqld.log

在这里插入图片描述

7、登录mysql

mysql -uroot -p密码

8、修改mysql的密码

ALTER USER 'root'@'localhost' IDENTIFIED by 'Root1234*';

密码设置太简单会提示
在这里插入图片描述

9、mysql服务控制

systemctl start/stop/restart mysqld.service
service mysqld start/stop/restart

10、mysql安装路径

/var/lib/mysql

11、数据库配置文件

路径在
/etc/my.cnf

11、给mysql设置字符集

init-connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
character-set-server=utf8mb4
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4

在这里插入图片描述
重启mysql服务生效

systemctl restart mysqld

登录进mysql 再次查看一下字符集是否已经修改完成

show variables like '%char%';

在这里插入图片描述

十、lnmp环境搭建之安装php7

1、和apache有什么不同?

在这里插入图片描述

2、下载php7.4

https://www.php.net/downloads.php#gpg-7.4

在这里插入图片描述

上传到usr/local/src下,等待解压
在这里插入图片描述

tar -zxvf php-7.4.10.tar.gz

3、安装

安装php7.4依赖

yum -y install libxml2-devel openssl-devel libcurl libcurl-devel libpng-devel freetype-devel libxslt-devel sqlite-devel oniguruma-devel libicu libicu-devel libjpeg libjpeg-devel

其中
enable-fpm是让php作为一个独立服务运行
prefix编译安装的软件一定不要忘记这个,否则卸载就是麻烦

#切换到解压目录
cd php-7.4.10/
#7.4.10  这个配置是目前几乎所有的项目都够用了,不够再加即可
./configure \
--prefix=/usr/local/php7.4.10 \
--with-config-file-path=/usr/local/php7.4.10/etc \
--with-curl \
--with-freetype \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-mysqli \
--with-openssl \
--with-pdo-mysql \
--with-pear \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-zip \
--enable-ftp \
--enable-intl \
--enable-bcmath \
--enable-inline-optimization \
--enable-gd \
--enable-gd-jis-conv \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-fpm

这里提示报错,提示libzip版本太低,怎么办?
在这里插入图片描述
解决办法:

https://blog.csdn.net/ljh101/article/details/108531725

注意:一定要出现这个界面,才能表示成功
在这里插入图片描述

接着进行编译(make)和安装(make install 就是安装)

make && make install

在这里插入图片描述

注意:重新安装后发现改了配置没有用,需要清理一下以前的缓存

make clean
 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文
 make distclean
 类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile文件。

4、配置

(1)、复制php.ini-development配置文件

cp php.ini-development /usr/local/php7.4.10/etc/php.ini

在这里插入图片描述

(2)、给php服务,服务名称是fpm创建服务配置文件

cd /usr/local/php7.4.10/etc/

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

vim php-fpm.conf 



找到;pid = run/php-fpm.pid 把前面的;删掉



在这里插入图片描述

(3)、配置辅助配置文件

/usr/local/php7.4.10/etc/php-fpm.conf: 是php服务的主配置文件
/usr/local/php7.4.10/etc/php-fpm.d/www.conf: 是php服务辅助配置文件,需要被上述的php-fpm.conf引入

cd /usr/local/php7.4.10/etc/php-fpm.d

cp www.conf.default   www.conf

(4)、修改php.ini中的时区(设置不设置都行)

vim +/date.timezone /usr/local/php7.4.10/etc/php.ini

在这里插入图片描述

到这里,已经完全配置完毕,改了配置需要重启服务哦

5、php服务控制

1.方式一:

开启

/usr/local/php7.4.10/sbin/php-fpm
netstat -tpnl | grep 9000

在这里插入图片描述
关闭

killall  /usr/local/php7.4.10/sbin/php-fpm
netstat -tpnl | grep 9000

2.方式二

进入php安装包目录中复制 php-fpm 的启动脚本

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

增加执行权限

chmod +x /etc/init.d/php-fpm

启动 php-fpm

/etc/init.d/php-fpm start
# 或
service php-fpm start

关闭php-fpm

service php-fpm stop

重启

service php-fpm restart

其实就是centos6的服务器管理

3.把php添加到环境变量

这样在任何地方都可以使用php-fpm

打开

vim /etc/profile

G 直接跳转到最后一行,加入如下内容

export PATH=/usr/local/php7.4.10/sbin:$PATH
export PATH=/usr/local/php7.4.10/bin:$PATH

让环境变量立即生效

source /etc/profile

一个完整的开启关闭=重启的过程
在这里插入图片描述

这样就可以快速通过php-fpmphp来执行命令了
在这里插入图片描述
注意:php-fpm是用来控制服务的

6、下载composer

官网教程

https://pkg.phpcomposer.com/#how-to-install-composer

这个安装非常简单
切换到php/bin目录然后依次执行以下三条指令即可

1.下载安装脚本 - composer-setup.php - 到当前目录。

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

2.执行安装过程。

php composer-setup.php

3.删除安装脚本。

php -r "unlink('composer-setup.php');"

4.脚本改名

mv composer.phar composer

现在就已经可以在任意地方使用了,因为php/bin在上面php安装的时候已经放到环境变量中去了
在这里插入图片描述

更改镜像,不改的话天朝无法使用

默认镜像源
在这里插入图片描述

设置阿里云镜像源

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

查看

composer config -gl | grep repositories.packagist.org.url

在这里插入图片描述
取消设置,执行后就会自动变成默认镜像源

composer config -g --unset repos.packagist

7、php和nginx的整合

(1)、fastcgi.conf文件的简单介绍

它是nginx和php连接的桥梁,在较早的nginx版本中,是没有这个文件,需要自己指定的。因为我现在这个是比较新的版本,所有都有了,因此我们不用再配置该文件了

cd /usr/local/nginx1.18.0/conf/

在这里插入图片描述
如果你的nginx没有该文件则可以把如下内容写入进去,并命名为fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

(2)、在server段中配置如下内容

server{
        listen 80;
        server_name www.blog.com;
        root blog;
        location / {
                index index.php index.html;
        }
        location ~ .*\.(php)?$
        {
                 fastcgi_pass  127.0.0.1:9000;
                 #fastcgi(管理PHP)  
                 fastcgi_index index.php;
                 #引入上面提到的配置文件
                 include fastcgi.conf;
        }
}

(3)、输出phpinfo()做一个测试

自己弄一个blog虚拟主机,这个步骤上面已经说了
在这里插入图片描述

(4)、部署tp5框架的可用的虚拟主机配置

server{
        listen 80;
        server_name www.tp5.com;
        root tp5/public;
        location / {
        		#这一句是伪静态的实现
		        if (!-e $request_filename){
					rewrite ^/(.*)$  /index.php/$1  last;
				}
                index index.php index.html;
        }
        location ~ .+\.php($|/) { 
		   set $script    $uri; 
		   set $path_info  "/"; 
		   if ($uri ~ "^(.+\.php)(/.+)") { 
		       set $script     $1; 
		       set $path_info  $2; 
		    } 
		   
		   fastcgi_pass 127.0.0.1:9000; 
		   fastcgi_index  index.php?IF_REWRITE=1; 
		   include fastcgi.conf; 
		   fastcgi_param PATH_INFO $path_info; 
		   fastcgi_param SCRIPT_FILENAME  $document_root/$script; 
		   fastcgi_param SCRIPT_NAME $script; 
		} 
}

(4)、部署laravel框架的可用的虚拟主机配置

这个是我目前在网上找的亲测可用的。用在laravel7中没问题,laravel5或者6应该也没问题

    server {
            listen 80;
            server_name www.blog.com;
            root "D:/wamp/WWW/blog/public";
            
        
            location / {
                index index.html index.htm index.php;
                try_files $uri $uri/ /index.php?$query_string;
            }
        
            location ~ .php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }

8、nginx部署安装dedecms

(1)、在extra目录新建一个虚拟主机dede.conf

在这里插入图片描述
在这里插入图片描述

server{
        listen 80;
        server_name www.dede.com;
        root dede/uploads;
        location / {
                index index.php index.html;
        }
        location ~ .*\.(php)?$
        {
                 fastcgi_pass  127.0.0.1:9000;
                 #fastcgi(管理PHP)
                 fastcgi_index index.php;
                 #引入上面提到的配置文件
                 include fastcgi.conf;
        }
}

(2)、下载dedecms

官网下载

http://www.dedecms.com/

在这里插入图片描述
创建网站根目录

mkdir /usr/local/nginx1.18.0/dede/
cd /usr/local/nginx1.18.0/dede/

在这里插入图片描述

#切换到源码存放处
cd /usr/local/src

#下载
wget http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz

#解压
tar -zxvf DedeCMS-V5.7-UTF8-SP2.tar.gz


解压完毕,查看目录结构
在这里插入图片描述

(3)、把解压后的软件拷贝到虚拟主机目录里面

#-r 复制目录  -p保留文件属性
cp -Rp uploads/ /usr/local/nginx1.18.0/dede/
cd /usr/local/nginx1.18.0/dede/

在这里插入图片描述
重启服务,并在windows上解析域名www.dede.com

nginx -s reload

在这里插入图片描述
访问结果如下在这里插入图片描述
在这里插入图片描述

(4)、解决权限问题

cd /usr//local/nginx1.18.0/dede/
chmod o+w ./ -R

刷新页面,全部变成绿色小钩
在这里插入图片描述

配置一个密码即可
在这里插入图片描述

十一、nginx的负载均衡配置案例

1、原理图

在这里插入图片描述

2、具体的配置实例

(1)、新建两个基于端口的虚拟主机

一个81 一个82端口
在这里插入图片描述
在这里插入图片描述

server {
        listen 81;
        server_name www.blog.com;
        root 81;
        location / {
                index index.html;
        }
}

(2)、再nginx.conf下配置连接池

在这里插入图片描述
xx.xxx.xx.xx是你的服务ip地址

    #配置连接池
    upstream  blog{
        server  xx.xxx.xx.xx:81;
        server  xx.xxx.xx.xx:82;
    }
    #绑定域名
    server {
        listen 80;
        server_name www.blog.com;
        location / {
                proxy_pass http://blog;
                proxy_set_header Host $host;
                proxy_set_header X-Peal-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }
    }

访问效果
在这里插入图片描述

(3)、连接池其它的命令(了解一下)

server指令:
语法:server name [参数] 
使用环境:upstream 
该指令用于指定后端服务器的名称和参数。服务器的名称可以是一个域名,-个ip地址,端口号。
在后端服务器名称之后,可以跟以下参数:
weight=number  设置服务器的权重,权重数值越高,被分配到的客户端请求数越多。
如果没有设置权重,则为默认权重为1. 
upstream  连接池名称{
	server  192.168.0.100  weight=5;
	server  192.168.0.200  weight=1;
	server  192.168.0.210  weight=3;
}
max_fails=number 在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。如果没有设置,则为默认值1。设为数值0将关闭这项检查。
fail_timeout=time(30s)在经历参数max_fails设置的失败次数后,暂停的世界。
down 标记服务器为永久离线状态,用于ip_hash指令。
backup 仅仅在非backup服务器全部宕机或繁忙的时候,才启用。

十二、nginx在windows上的使用

TODO:晚点来完善这个教程
其实和linux上是一样的,官网就有提供windows版本
这里提一下,如何和php整合
NGINX运行PHP需要运行NGINX和FASTCGI+php

1、开启php的插件

##

2 、打开一个cgi的一个接口,nginx遇到后缀是php文件的文件,交给9000端口来处理

在这里插入图片描述

3、打开nginx的配置文件,进行配置

在这里插入图片描述

4、写一个.bat脚本控制nginx的启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值