nginx

nginx学习笔记

  • 一、几个专业名称的概念
    • 1、pv值(page views)
    • 2、uv值(unique visitor)
    • 2、独立ip
  • 二、如何解决高并发有什么思路?
    • 1、大并发服务架构图(脑海里存一份)
    • 2、什么是并发连接?
    • 3、如何负载均衡?
      • (1)、硬件方式
      • (2)、软件方式
    • 4、负载均衡实现策略?
      • (1)、轮询
      • (2)、ip哈希
      • (3)、最少连接
  • 三、nginx
    • 1、nginx简单介绍
    • 2、和apache的比较
    • 3、nginx的优点
      • (1)、它可以高并发连接,官方测试支撑5万并发连接
      • (2)、内存消耗少
      • (3)、成本低廉
      • (4)、配置文件非常简单
      • (5)、支持 rewrite重写规则
      • (6)、节省带宽,支持gzip压缩
      • (7)、稳定性高:用于反向代理,宕机的概率微乎其微。
      • (8)、支持热部署。在不间断服务的情况下,对软件版本升级
  • 三、nginx编译安装
    • 1、下载nginx
    • 2、安装依赖
    • 3、开始安装
    • 4、nginx的管理
      • (1)、nginx的启动
      • (2)、nginx的重启/停止
      • (3)、nginx的检查配置文件/查看编译参数
      • (4)、nginx加入环境变量
    • 5、nginx信号控制(了解)
      • (1)、关闭进程
      • (2)、优雅关闭进程(即等请求结束后,再关闭)
      • (3)、重读配置文件
      • (4)、重读日志文件(定时备份需要改知识点)
  • 四、配置文件的详细解释
    • 1、配置文件的整体结构
      • 1.1为了保持清爽就把所有的注释都删了
    • 2、全局配置
    • 3、事件配置
    • 4、虚拟主机配置
      • (1)、基于域名的虚拟主机
      • (2)、基于端口的虚拟主机
      • (3)、基于IP的虚拟主机
    • 5、nginx虚拟主机规范化
      • (1)、在config目录下新建一个目录
      • (2)、进入新创建的目录创建一个虚拟主机
      • (3)、引入ngnix.conf的主配置文件
        • (4)可以在主配置文件中映入所有虚拟主机
    • 6、别名配置
  • 五、日志的管理
    • 1、日志的实例
    • 2、日志结合定时任务切割(mysql备份同理)
      • 1、书写脚本
      • 2、创建定时任务
  • 六、location语法详解
    • 1、location的作用
    • 2、location的基本语法
    • 3、curl工具的使用
      • (1)基本用法
      • (2)-o 保存访问的页面
      • (3) -s 不输出进度
      • (4)-I和-i
      • (5)-w 输出指定格式的内容
    • 4、匹配实例详解
      • (1)精准匹配与一般匹配
      • (2)一般匹配与长度问题
      • (3)一般匹配与正则匹配
      • (4)默认匹配
  • 七、Nginx rewrite(重写规则)
    • 1、基本案例
      • 案例一:访问index.php 重写到abc.html
      • 案例二:网站的跳转案例
    • 2、break与last的区别
    • 3、redirect(302)与permanent(301)区别
  • 八、gzip压缩提升网站速度
    • 个人体验
  • 九、lnmp环境搭建之安装mysql
    • 1、检测mysql的安装情况
    • 2、下载mysql二进制软件包
    • 5、启动mysql
    • 6、查看mysql的登录密码
    • 7、登录mysql
    • 8、修改mysql的密码
    • 9、mysql服务控制
    • 10、mysql安装路径
    • 11、数据库配置文件
    • 11、给mysql设置字符集
  • 十、lnmp环境搭建之安装php7
    • 1、和apache有什么不同?
    • 2、下载php7.4
    • 3、安装
    • 4、配置
      • (1)、复制php.ini-development配置文件
      • (2)、给php服务,服务名称是fpm创建服务配置文件
      • (3)、配置辅助配置文件
      • (4)、修改php.ini中的时区(设置不设置都行)
    • 5、php服务控制
      • 1.方式一:
      • 2.方式二
      • 3.把php添加到环境变量
    • 6、下载composer
    • 7、php和nginx的整合
      • (1)、fastcgi.conf文件的简单介绍
      • (2)、在server段中配置如下内容
      • (3)、输出phpinfo()做一个测试
      • (4)、部署tp5框架的可用的虚拟主机配置
      • (4)、部署laravel框架的可用的虚拟主机配置
    • 8、nginx部署安装dedecms
      • (1)、在extra目录新建一个虚拟主机dede.conf
      • (2)、下载dedecms
      • (3)、把解压后的软件拷贝到虚拟主机目录里面
      • (4)、解决权限问题
  • 十一、nginx的负载均衡配置案例
    • 1、原理图
    • 2、具体的配置实例
      • (1)、新建两个基于端口的虚拟主机
      • (2)、再nginx.conf下配置连接池
      • (3)、连接池其它的命令(了解一下)
  • 十二、nginx在windows上的使用
    • 1、开启php的插件
    • 2 、打开一个cgi的一个接口,nginx遇到后缀是php文件的文件,交给9000端口来处理
    • 3、打开nginx的配置文件,进行配置
    • 4、写一个.bat脚本控制nginx的启动

一、几个专业名称的概念

1、pv值(page views)

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

2、uv值(unique visitor)

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

2、独立ip

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

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

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

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

nginx_第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

nginx_第2张图片
切换到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(和财务有关系的请求会走的协议)
如果已经安装会提示已经安装过
nginx_第3张图片

3、开始安装

cd nginx-1.12.2

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

make && make install

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

4、nginx的管理

查看所有的帮助信息

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

nginx_第5张图片

(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

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

(4)、nginx加入环境变量

vim /etc/profile

加入

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

nginx_第7张图片
让环境变量立即生效

source /etc/profile

在这里插入图片描述

5、nginx信号控制(了解)

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

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

nginx_第8张图片

(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 )

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

当我访问站点的时候日志文件越来越大
nginx_第9张图片

nginx_第10张图片
如果我把该配置文件改名后然后重新新建一个和原来一样的名称的文件它会把数据写到新的文件中去吗?
nginx_第11张图片
此时需要执行:

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

然后多刷新几次页面
nginx_第12张图片
nginx_第13张图片

四、配置文件的详细解释

1、配置文件的整体结构

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

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

nginx_第14张图片
整体收缩后的结构
nginx_第15张图片
观察可知,该配置文件有两段

events {
}
http {
	server {
}
}

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

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

nginx_第16张图片

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_第17张图片

然后重启nginx

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

本地windows系统上解析ip
nginx_第18张图片
访问www.abc.com,配置成功
nginx_第19张图片

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

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

nginx_第20张图片
nginx_第21张图片

nginx_第22张图片

(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地址
nginx_第23张图片
新增一个ip地址,不要和上面那个重复
nginx_第24张图片
然后配置一个虚拟主机

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

nginx_第25张图片
创建站点目录
在这里插入图片描述
在这里插入图片描述

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

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

5、nginx虚拟主机规范化

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

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

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

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

在这里插入图片描述
nginx_第26张图片

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

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

vim blog/index.html

nginx_第27张图片

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

在windows上访问需要解析ip地址,并访问
nginx_第28张图片

nginx_第29张图片


在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_第30张图片
保存重启nginx,然后把新的域名添加到hosts文件,再次访问

nginx_第31张图片
在这里插入图片描述

五、日志的管理

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';

nginx_第32张图片
然后去给www.blog.com 的配置文件指定日志

access_log logs/blog.access.log mylog;

nginx_第33张图片
重启服务器

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

访问在这里插入图片描述

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

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

1、书写脚本

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

nginx_第35张图片

#!/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分钟执行一次命令

nginx_第36张图片

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

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了呢?,因为下面要用
nginx_第37张图片

(1)基本用法

curl www.blog.com

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

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

nginx_第38张图片

(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

nginx_第39张图片
nginx_第40张图片

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

多用于测试是否请求成功

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

在这里插入图片描述

4、匹配实例详解

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

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

注意:= 开头表示精确匹配
nginx_第41张图片

测试

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

在这里插入图片描述

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

总结:访问的路径中,如果有多个location都符合,则匹配到最长字符串(location)优先;
nginx_第42张图片

在这里插入图片描述

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

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

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

nginx_第44张图片
测试结果
在这里插入图片描述

(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

nginx_第45张图片

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

windows访问要做好hosts文件的解析
nginx_第46张图片

nginx_第47张图片

案例二:网站的跳转案例

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

nginx_第48张图片

代码

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符号,表示前面(.*)里面的内容。
}

nginx_第49张图片
注意这里,测试时一定要确保域名都已经在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页面的内容;还有这里一定要留意文件夹的创建,有错的时候可以看一下错误日志
nginx_第50张图片

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;

nginx_第51张图片

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

测试302重定向前要清除一下缓存,不然还是一直301
nginx_第52张图片

八、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二进制软件包

nginx_第53张图片
我们最好保持一致下载5.7.30就行
nginx_第54张图片
上方红色的框框复制,然后去镜像网站查找

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

nginx_第55张图片
速度那是杠杠滴。然后继续上传上去
nginx_第56张图片
解压

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

nginx_第57张图片
都不带错的一路成功,事实证明选择比努力重要。 我醉了

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

nginx_第58张图片
重启mysql服务生效

systemctl restart mysqld

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

show variables like '%char%';

在这里插入图片描述

十、lnmp环境搭建之安装php7

1、和apache有什么不同?

nginx_第59张图片

2、下载php7.4

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

nginx_第60张图片

上传到usr/local/src下,等待解压
nginx_第61张图片

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

注意:一定要出现这个界面,才能表示成功
nginx_第62张图片

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

make && make install

nginx_第63张图片

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

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

nginx_第64张图片

(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 把前面的;删掉



nginx_第65张图片

(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

nginx_第66张图片

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

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来执行命令了
nginx_第67张图片
注意: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安装的时候已经放到环境变量中去了
nginx_第68张图片

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

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

设置阿里云镜像源

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虚拟主机,这个步骤上面已经说了
nginx_第69张图片

(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

在这里插入图片描述
nginx_第70张图片

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/

nginx_第71张图片
创建网站根目录

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

nginx_第72张图片

#切换到源码存放处
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


解压完毕,查看目录结构
nginx_第73张图片

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

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

nginx_第74张图片
重启服务,并在windows上解析域名www.dede.com

nginx -s reload

nginx_第75张图片
访问结果如下nginx_第76张图片
nginx_第77张图片

(4)、解决权限问题

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

刷新页面,全部变成绿色小钩
nginx_第78张图片

配置一个密码即可
nginx_第79张图片

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

1、原理图

nginx_第80张图片

2、具体的配置实例

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

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

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

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

nginx_第82张图片
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;

        }
    }

访问效果
nginx_第83张图片

(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的插件

nginx_第84张图片

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

在这里插入图片描述

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

nginx_第85张图片

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

你可能感兴趣的:(nginx)