Nginx上线一个项目并简操

2023-11-09

上线一个商场项目

思路:

  1. 上传项目文件和数据库文件
  2. 修改Nginx配置文件,增加server 虚拟机
  3. 创建数据库,导入迁移数据文件
  4. 修改项目代码中连接数据库的配置文件
  5. 给woeker进程用户写入缓存目录的权限

上线一个ThinkPHP5.0 框架的项目
ThinkPHP5.0完全开发手册PDF版

第一步:将项目源码和数据库文件上传至html文件中

项目源码包 数据库文件
tp5shop.zip tpshop.sql

第二步:解压项目源码和导入数据文件

因为server 段中指定的www目录是html目录,所以解压在html目录下

解压项目源码:
	#l [root@sever_01 html]# unzip tp5shop.zip	

进入MySQL,导入数据文件:
	# mysql > create database tpshop default chatset=utf8mb4;
	# mysql > use tpshop;
	# mysql > suorce /usr/local/nginx/html/tpshop.sql;

弄完删除源文件:
#l [root@sever_01 html]# rm -rf tp5shop.zip tpshop.sql

第三步:修改Nginx配置文件,配置server 虚拟机

可以自己搭建DNS,虚拟机去访问。我这里直接修改真机的hosts 文件

修改配置文件:

  • server_name:指定域名
  • root:指定项目入口文件,thinkPHP5.0 指定的入口文件在public
  • index:需要更改一下优先级,先解析php后缀文件
  • location ~ \.php$:需要打开一下php-fpm 解析器
  • fastcgi_param:这里后面需要修改为$document_root,表示获取server段中root 的变量(项目入口文件路径)
# vim /usr/local/nginx/conf/nginx.conf

     server {
 36         listen       80;
" 37         server_name  www.shop.com;					这这这"
" 38         root html/tp5shop/public;					这这这"
 39         #charset koi8-r;
 40
 41         #access_log  logs/host.access.log  main;
 42
 43         location / {
 44          #   root   html;
" 45             index  index.php index.html index.htm;					这这这"
 46         }
 47
 48         #error_page  404              /404.html;
 49
 50         # redirect server error pages to the static page /50x.html
 51         #
 52         error_page   500 502 503 504  /50x.html;
 53         location = /50x.html {
 54             root   html;
 55         }
 56
 57         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 58         #
 59         #location ~ \.php$ {
 60         #    proxy_pass   http://127.0.0.1;
 61         #}
 62
 63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64         #
 65         location ~ \.php$ {
 66             #root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
" 69             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;		这这这	"
 70             include        fastcgi_params;
 71         }
 72


# systemctl reload nginx

到这访问会报一个错误,那是因为没有指定需要连接的数据库
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

第四步:在项目代码文件中配置连接MySQL的用户密码及数据库database.php

修改database.php的连接参数:

  • 这里可以创建一个该项目数据库的指定用户,授予该项目自己的数据库权限

  • 注意:主要连接地址、数据库名称、用户名称、用户密码、连接端口号等参数

  • 修改php项目代码不需要重载Nginx,因为php 每次都会重新读取

# vim /usr/local/nginx/html/tp5shop/application/database.php		=>	thinkphp5.0框架指定连接数据库的文件路径

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'tpshop',
    // 用户名
    'username'        => 'root',
    // 密码
    'password'        => 'root',
    // 端口
    'hostport'        => '3306',

到这访问会报一个错误,项目需要在runtime文件夹中写入缓存信息(需要写权限)
file_put_contents(/usr/local/nginx/html/tp5shop/runtime/cache/c4/ef352f74e502ef5e7bc98e6f4e493d.php): failed to open stream: Permission denied

第五步:把runtime目录的所属关系赋予www用户

原因:因为是子进程去处理请求信息,Nginx和PHP的子进程都是www用户执行的

  • ①nginx 读取静态文件 => 用户www操作
  • ②php-fpm 读取、写入、解析php文件 => 用户www操作
# chown -R www:www /usr/local/nginx/html/tp5shop/runtime

到此初步完成一个项目上线部署,可以访问到商场首页
在这里插入图片描述

第六步:Nginx支持pathinfo路径 重写方式

在我们点击首页功能选项的时候,不会跳转。是因为其指定的入口文件在public 下,html 目录找不到该文件,所以需要重写

thinkPHP5.0开发手册定义:在这里插入图片描述
在这里插入图片描述

http://www.shop.com/home/goods/index/cate_id/187.html  默认不支持访问
重写成为
http://www.shop.com/index.php?s=home/goods/index/cate_id/187.html

语法规则示例

location / {
   #root html;
   index  index.php index.html index.htm;
   #l	这个是伪静态
   rewrite /index.html /index.php last;				=>	伪静态,将inde.html重写为index.php


   #l	判断请求的路径 不存在,这个是pathinfo路径 重写方式
   if (!-e $request_filename) {
      # 捕获到所有路径信息   重写为index.php的s参数   last需要匹配之后的location规则
      rewrite ^(.*)$   /index.php?s=$1 last;
   }
}

到此完成重写pathinfo路径

使用官方默认模块

gzip 压缩模块:压缩传输

在传输的时候压缩文件,使文件变小,传输更快了。目前市场上大部分浏览器是支持GZIP的。IE6以下支持不好,会出现乱码情况。

该ngx_http_gzip_module模块是一个使用gzip方法压缩响应的过滤器。这通常有助于将传输数据的大小减少一半甚至更多。

官方文档:http://nginx.org/en/docs/http/ngx_http_gzip_module.html

示例语法:

  • 配置到http段里,使整个http服务都启用gzip压缩
#
gzip on;		=>	开启gzip压缩
#
gzip_http_version 1.0;		=>	http协议版本
#
gzip_disable 'MSIE [1-6].';			=>	IE浏览器不开启gzip  IE6以下会乱码,所以索性关闭IE1~6 开启gzip模块
#
gzip_types image/jpeg image/jpg image/png text/plain text/css;		=>	开启gzip 文件的格式

修改配置文件:启用gzip 模块

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

17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20     gzip on;
 21     gzip_http_version 1.0;
 22     gzip_disable 'MSIE [1-6].';
 23     gzip_types image/jpeg image/jpg image/png text/plain text/css;

# systemctl reload nginx

开启后会增加一个响应头:Content-Encoding: gzip

客户端缓存

B/S架构里 browser浏览器 就是客户端

告知浏览器获取的静态信息是在某个区间时间段是有效的。客户端可不听从

官方文档:http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires

示例语法:

#l 可以在server 段中开启对特定文件的缓存时间
location ~ \.(js|css)$ {						=>	代表指定js文件和css文件的缓存时间
    #单位参数 d day 天|H hour 小时  M 分
    expires 1h;
}

#l	在整个http中生效  配置到http段里(对全部文件进行缓存)
expires 1h

修改配置文件:启用客户端缓存

  • 设置在location 段,让一些静态资源缓存在客户端
# vim /usr/local/nginx/conf/nginx.conf

location ~ \.(js|ico|gif|jpg|jpeg|png|html|htm)$ {
              expires 1h;
        }


# systemctl reload nginx

客户端缓存响应头:Cache-Control: max-age=3600单位秒

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

基于IP的访问控制

基于ngx_http_access_module模块,默认可使用,可以禁止某些ip的访问

官方文档:http://nginx.org/en/docs/http/ngx_http_access_module.html

语法示例:

  • allow:并不是只允许的意思,需要与deny一起使用
location / {
    deny  ip;
    allow ip/24;
    allow ip/16;
    allow 2001:0db8::/32;
    deny  all;
}
按顺序来,如果deny all 在前面,allow在后面,也是拒绝所有

基于用户的访问控制

基于ngx_http_auth_basic_module模块,默认可用,用于控制登录

官方文档:http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

表示访问这个网站你需要登录账号密码

示例语法:

auth_basic "提示信息"

auth_basic_user_file  /etc/nginx/htpasswd;

第一步:创建用户名和密码存储文件

  • htpasswd 如果不存在就通过 yum -y install httpd-tools安装
  • 在nginx 配置文件下创建
# cd /usr/local/nginx/conf			=>	在此目录生成

# htpasswd -c ./passwd.db lnmp		=>	回车后输入两次所配置该用户的密码
		说项说明:
			-c 指定生成密码存储文件名称及路径
			lnmp:这个是创建的用户名

第二步:在Nginx配置文件中进行配置

  • 根据业务需求,这里是配置到server段里
# vim /usr/local/nginx/conf/nginx.conf			=>	添加配置

	auth_basic "test login";		=>	登录框显示的标题提示	
	auth_basic_user_file  /usr/local/nginx/conf/passwd.db; 		=>	加载用户名称和密码校验文件



# systemctl nginx reload			=>	重载配置

到此结束
在这里插入图片描述

目录列表显示

显示文件列表,或者需要做一个下载列表,默认是关闭的

官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html#autoindex

示例语法:

  • 注意:如果目录中没有配置的默认index访问项,而autoindex又没有开启,不能查看访问目录列表,就会报出403错误。
# vim /usr/local/nginx/conf/nginx.conf			=>	添加配置

	autoindex on;			=>	开启目录列表显示,当index默认找不到时,才会使用目录列表


# systemctl nginx reload			=>	重载配置

重新配置一个server段:

第一步:创建一个sever 段

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

    server {
 89         listen       80;
 90         server_name  10.1.1.100;
 91         root html;
 92         #charset koi8-r;
 93         autoindex on;			=>	在server 段加一行

# systemctl nginx reload			=>	重载配置

第二步:将html目录中的inde.php和index.html 重命名,让Nginx找不到
在这里插入图片描述

反向代理

正向代理:

  • 特点:知道自己使用了代理,需要填写代理服务器的IP等相关连接信息

常见于代理客户端上网等操作

在这里插入图片描述
反向代理:

  • 特点:用户是无感知的,不知道使用了代理服务器。反向代理服务器是和真实访问的服务器是在一起的,有关联的。

  • 作用:可以根据实际业务需求,分发代理页面到不同的解释器,可以隐藏真实服务器的路径

常见于代理后端服务器

在这里插入图片描述
反向代理配置:LNMPA

官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

在这里插入图片描述

第一步:安装一个Apache,并修改其配置文件

# yum install -y httpd

# vim /etc/httpd/conf/httpd.conf
	42 Listen 8080					=>	将Apache端口改一下,因为80端口现在被Nginx占了

# systemctl start httpd 				=>	启动Apache

第二步:配置nginx的server并进行转发

  • 需要新建一个server段,然后写在location 段中proxy_pass http://127.0.0.1:8080;
  • 访问b.com就是访问Apache的8080端口
# vim /usr/local/nginx/conf/nginx.conf
     server {
        listen 80;
        server_name b.com;
        root html;
        location / {
           proxy_pass http://127.0.0.1:8080;
        }
}

访问b.com:其实就是访问Apache
在这里插入图片描述

日志管理

日志类型:

access.log 访问日志 查看统计用户的访问信息 流量
error.log 错误日志 错误信息 重写信息

访问日志

访问日志,可以统计分析用户的流量的相关情况。客情分析

官方文档:http://nginx.org/en/docs/http/ngx_http_log_module.html

# cat /usr/local/nginx/logs/access.log			=>	查看access.log:

access.log日志文件内容示例:

  • 10.1.1.1 - - [27/Jun/2021:02:55:50 +0800] "GET /index.php HTTP/1.1" 200 81489 “-” "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"

查看Nginx配置文件中access.log 解析参数说明:

  • 默认是开启的
#定义日志格式  格式命名    详细格式参数
#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;
参数 意义
$remote_addr 客户端的ip地址(代理服务器,显示代理服务ip)
$remote_user 用于记录远程客户端的用户名称(一般为“-”)
$time_local 用于记录访问时间和时区
$request 用于记录请求的url以及请求方法
$status 响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent 给客户端发送的文件主体内容字节数
$http_user_agent 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer 可以记录用户是从哪个链接访问过来的

错误日志

记录一些启动和运行过程中的错误信息

官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log

# cat /usr/local/nginx/logs/error.log		=>	查看error.log

error.log日志文件内容示例:

  • 2021/06/27 01:56:00 [error] 6947#0: *1 open() “/usr/local/nginx/html/indexphp” failed (2: No such file or directory), client: 10.1.1.1, server: localhost, request: “GET /indexphp HTTP/1.1”, host: “10.1.1.15”

查看Nginx配置文件中error.log 解析参数说明:

  • 默认开启
定义开启错误日志      日志位置            日志级别   
#error_log          logs/error.log;
#error_log          logs/error.log      notice;
#error_log          logs/error.log      info;

基于域名日志分割

如果有多个项目,默认所有的访问日志都是在access.log 下,管理不方便,所以需要进行分割

第一步:在Nginx配置文件中开启日志的定义规则

  • 只能定义在http 段中,默认不开启,参数根据需求定义
  • 格式命名可自定义
# vim /usr/local/nginx/conf/nginx.conf			=>	添加配置

定义日志格式 格式命名    参数
log_format  my_shop_logs  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

第二步:在Nginx配置文件中定义需要分割的虚拟主机

  • 定义在server段中,分别写在连个server 段中
  • 其他server 段不定义,默认写入原本的access.log
# vim /usr/local/nginx/conf/nginx.conf			=>	添加配置

开启当前server访问日志        当前server里的访问日志路径          调用的日志格式
access_log                  logs/www.shop.com_access.log       mylogs;		=>	这个是shop的

access_log                  logs/10.1.1.100.com_access.log       mylogs;		=>	这个是10.1.1.100# systemctl nginx reload		=>	重载

重新访问就会生成新的该域名访问日和字文件

#l[root@sever_01 logs]# ls
10.1.1.100_access.log  access.log  error.log  nginx.pid  shop.lnmp.com_access.log

日志切割的方式有很多种:

  • ①基于域名分开存储

  • ②日志轮转 时间段

  • ③自定义脚本 定时检测大小 根据文件大小进行切割

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx上线一个项目并简操 的相关文章

  • 实习记录(1)——数据标注

    使用数据标注工具labelme对图像进行标注 一 labelme的安装 首先需要python环境 激活anaconda环境后可以直接输入以下指令 pip install labelme 注意 建议以管理员权限打开dos 不然可能安装报错 二
  • UniApp 组件内修改组件内的组件的样式,穿透组件中的组件样式

    UniApp 组件内修改组件内的组件的样式 穿透组件中的组件样式 main vue 这是一个页面 这是 a 组件 这是 b 组件 页面可以修改页面引入的组件样式 直接使用 deep 例如 main页面 修改 a组件的样式
  • python正则表达式匹配ip地址

    首先要引入re模块 import re re search r 01 0 1 d 0 1 d 2 0 4 d 25 0 5 3 01 0 1 d 0 1 d 2 0 4 d 25 0 5 1 2 3 4 真实实战 import urllib
  • 问题点-28-Gradle4.9升级到Gradle7.2产生的问题

    由于业务需要 需要将gradle版本从4 9升级到7 2 于是出现一系列问题 汇总如下 idea版本 不要使用2019版本 建议使用2021版本 不然会抛错 项目环境需要有gradle对应的版本 maven gt maven publish
  • es_MySQL、HBase、ElasticSearch三者对比详解

    1 概念介绍 MySQL 关系型数据库 主要面向OLTP OLTP 也叫联机事务处理 Online Transaction Processing 支持事务 支持二级索引 支持sql 支持主从 Group Replication MGR 是一
  • SQLServer数据库数据备份的几种方法

    采用MS SQLServer数据库 在开发的过程中 需要对数据库的结构及数据进行备份 以便在另一个系统中进行安装和恢复 一般采用以下四种方法来处理 1 对数据库生成SQL脚本 恢复时通过查询分析器执行脚本 2 对数据库执行备份操作 恢复时先
  • 明年,HarmonyOS不再兼容Android应用!

    2023年华为开发者大会 不知道各位老铁们是否观看了 一个震撼的消息就是 首次公开了HarmonyOS NEXT的概念 简而言之就是 这是一款专为开发者打造的预览版操作系统 旨在提供 纯正鸿蒙操作系统 的体验 与之前的版本不同 Harmon
  • SpringBoot系列FastJson篇之@JsonField

    在实际运用中 JsonField主要有三个用处 1 修改和json字符串的字段映射 name 2 格式化数据 format 3 过滤掉不需要序列化的字段 serialize 首先声明在低版本中区分注解加在setter和getter方法 而高
  • Java的运算符

    目录 一 什么是运算符 二 算术运算符 1 基本四则运算符 加减乘除模 2 增量运算符 3 自增 自减运算符 三 关系运算符 四 逻辑运算符 重点 1 逻辑与 2 逻辑或 3 逻辑非 4 短路求值 五 位运算符 1 按位与 2 按位或 3
  • python定义函数求和_Python定义函数实现累计求和操作

    一 使用三种方法实现0 n累加求和 定义函数分别使用while循环 for循环 递归函数实现对0 n的累加求和 1 使用while循环 定义一个累加求和函数sum1 n 函数代码如下 2 使用 for循环 定义一个累加求和函数sum2 n
  • c++虚函数详解

    1 虚函数的简介 由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数 所以被成为 虚 函数 用父类型别的指针指向其子类的实例 然后通过父类的指针调用实际子类的成员函数 这种技术可以让父类的指针有 多种形态 这是一种泛型技术
  • 优先队列的实践

    一 使用背景 对于前 k 大或前 k 小这类问题 有一个通用的解法 优先队列 优先队列可以在 O log n 的时间内完成插入或删除元素的操作 其中 n 为优先队列的大小 并可以 O 1 地查询优先队列顶端元素 二 前K个高频单词 给定一个
  • 巡检过程中有哪些注意事项?智能巡检了解一下

    智能巡检系统是现场过程管理的生产力革命 由人工记录蝶化为掌上电脑运作 适用于设备运行值班记录 仓库 资产管理 设备巡检保养 安全巡更 机房值守 基站维护等一切重复性的工作管理 安全巡检的目的在于识别信息系统存在的安全脆弱性 分析信息系统存在
  • C++:构造/析构/赋值运算(Effective C++)

    文章目录 写在前面 05 了解C 默默编写并调用哪些函数 06 若不想使用编译器自动生成的函数 就该明确拒绝 10 令operator 返回一个reference to this 11 在operator 中处理 自我赋值 12 复制对象时
  • linux网络测速qerf,www.n5fe.com

    河北承德电信 104 27 149 3 CLOUDFLARE COMcloudflare com 200 0 937s 0 019s 0 182s 0 003s 0 35KB 936 667Kb s 查看 HTTP 1 1 200 OK D
  • java构建菜单权限树形结构给前端

    1 建个菜单权限表 CREATE TABLE system permission id bigint 19 NOT NULL COMMENT id permission name varchar 50 CHARACTER SET utf8m

随机推荐

  • 微信分布式数据存储协议对比——Paxos和Quorum

    微信分布式数据存储协议对比 Paxos和Quorum 2017 4 19 1 36 00 作者丨莫晓东 责编丨仲培艺 分布式系统是网络化的计算机系统 海量数据的互联网应用只能通过分布式系统协调大量计算机来支撑 微信后台存储大量使用了分布式数
  • 夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式。

    夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式 1 夏普GP2Y0AYK0F红外测距传感器介绍 参数介绍 品牌 夏普SHARP 型号 GP2Y0A21YK0F 产地 日本 Japan 类型 红外测距
  • 企业数字化转型成熟度模型首个IOMM标准发布 企业数字化有章可循

    科技云报道原创 9月8日 由中国信息通信研究院 简称 中国信通院 云计算与大数据研究所 中国通信标准化协会云计算标准和开源推进委员会主办 云计算开源产业联盟承办的 企业数字化转型IOMM发布会 在线召开 会上中国信通院联合银行 保险 能源
  • TSDB时序数据库-OpenTSDB

    TSDB时序数据库 OpenTSDB 背景 一 概念 二 使用引入 背景 需要及时获取短信发送消息队列的堆积情况 pass将相关信息及时的存入了opentsdb时序数据库中 现需要读取时序数据库将堆积情况以短信形式通知 一 概念 时间序列数
  • Java基础----常用类

    0 Intellij Idea 快捷键 ALT SHIFT 0 生成构造器或setter getter IDEA的Debug IDEA导入已有的模块 1 字符串相关的类 1 1 String类 String源码 public final c
  • 【核磁共振成像】临床基本通用脉冲序列

    目录 一 脉冲序列 二 自旋回波 SE 脉冲序列 2 1 自旋回波脉冲序列 2 2 信噪比 差噪比 2 3 采样 2 4 改进的自旋回波变型序列 三 反向恢复 IR 脉冲序列 3 1 反向恢复脉冲序列 3 2 关于反向恢复脉冲序列的改进 四
  • RDS for MySQL 物理备份文件恢复到自建数据库

    文档在这 我主要说下注意事项 https help aliyun com knowledge detail 41817 html 操作系统中已安装数据恢复工具Percona XtraBackup 您可以从Percona XtraBackup
  • 机器学习-算法决策树学习笔记(详解)

    决策树的概念 决策树是一种非参数的监督学习方法 既可以用于分类 也可以用于回归 决策树的目标是创建一个模型 从数据特征中进行学习 进而推断出简单决策规则 用来预测目标变量的值 决策树的决策过程就是从根节点开始 测试待分类项中对应的特征属性
  • 从AOP到分布式链路追踪

    文章目录 1 aop介绍 2 1 spring aop 2 2 jdk动态代理 2 分布式链路追踪 2 1 日志规范 2 2 Spring Log组件 2 3 MDC介绍以及使用 3 接入 3 1 侵入式接入 3 2 aop接入 4 中间件
  • Nginx 可视化管理平台 Nginx-Proxy-Manager 中文入门指南

    今天给大家介绍一款 Nginx 可视化管理界面 非常好用 小白也能立马上手 nginx proxy manager 是一个反向代理管理系统 它基于 NGINX 具有漂亮干净的 Web UI 还可以获得受信任的 SSL 证书 并通过单独的配置
  • QT中的绝对路径和相对路径

    绝对路径 app applicationDirPath 这个获取的就是一个绝对路径 是程序运行时的绝对路径 如果是debug模式 绝对路径定位到debug文件 QDir currentPath 这个获取的是工作目录的绝对路径 在工程中点击运
  • echart旭日图_ECharts 旭日图

    ECharts 旭日图 旭日图 Sunburst 由多层的环形图组成 在数据结构上 内圈是外圈的父节点 因此 它既能像饼图一样表现局部和整体的占比 又能像矩形树图一样表现层级关系 ECharts 创建旭日图很简单 只需要在 series 配
  • 检测到“RuntimeLibrary”的不匹配项

    1 gt libCGAL vc140 mt 4 4 I 900 lib all files obj error LNK2038 检测到 RuntimeLibrary 的不匹配项 值 MT StaticRelease 不匹配值 MD Dyna
  • golang处理execl文件

    1 引入execl依赖包 go get github com xuri excelize v2 2 打开execl文件 并获取句柄 打开文件 获取句柄 f err excelize OpenFile path if err nil fmt
  • elasticsearch全文检索流程

    elasticsearch全文检索流程 elasticsearch全文检索流程 索引过程 创建索引 获得原始文档 创建文档对象 分析文档 创建索引 查询索引 elasticsearch全文检索流程 索引过程 索引过程 对要搜索的原始内容进行
  • java中包装类的作用

    Java中包装类的作用 一 包装类是什么 包装类就是解决java的八种基本数据类型不面向对象的缺陷 而设计出来的一个个与每一个与基本类型相对应的类 这八种基本数据类型对应的类统称包装类 Wrapper Class 包装类均位于java la
  • 升级到spring security5遇到的坑-密码存储格式

    遇到的问题 将spring security oauth2 包括spring security 升级到最新 代码没有改动 运行项目没有报错 但是页面登陆时报错 There is no PasswordEncoder mapped for t
  • 火猴之图片立体翻转效果展示(firemonkey)

    结果 思路 1 使用firemonkey之3d应用 2 layout3d image3d textlayer3d 3 使用floatanimation改变image3d的rotation的角度实现 4 运用floatanimation的fi
  • Python自动化测试框架:Pytest和Unittest的区别

    pytest和unittest是Python中常用的两种测试框架 它们都可以用来编写和执行测试用例 但两者在很多方面都有所不同 本文将从不同的角度来论述这些区别 以帮助大家更好地理解pytest和unittest 1 原理 pytest是基
  • Nginx上线一个项目并简操

    Nginx上线一个项目 上线一个商场项目 第一步 将项目源码和数据库文件上传至html文件中 第二步 解压项目源码和导入数据文件 第三步 修改Nginx配置文件 配置server 虚拟机 第四步 在项目代码文件中配置连接MySQL的用户密码