搭建LNMP环境实现高并发请求

news2024/11/20 6:22:53

LNMP和Nginx详细配置

    • 一、LNMP环境平台搭建
      • 准备工作
      • 源码软件包安装
        • nginx
        • mysql
        • php
        • 使用nginx连接php
    • 二、web服务器-nginx
      • 1.学nginx之前需要了解的知识
        • 1.1 同步和异步(通知结果的方式)
        • 1.2 阻塞和非阻塞(进线程等待时状态)
        • 1.3 epoll模型
        • 1.4 nginx为什么比其他web服务器能处理高并发请求(工作原理)
        • 1.5 分布式
        • 1.6 负载均衡
        • 1.7 HTTP协议
      • 2. Nginx详解
        • 2.1 概述
        • 2.2 工作模式
        • 2.3 配置文件结构
      • 3.nginx实验
        • 实验1:nginx的状态统计
        • 实验2:目录保护
        • 实验3:基于IP访问控制
        • 实验4:nginx的虚拟主机(基于域名)
        • 实验5:nginx的反向代理
        • 实验6:负载调度(负载均衡)
        • 实验7:nginx实现https(证书+rewrite)

一、LNMP环境平台搭建

准备工作

使用centos7系统并关闭SELinux和firewalld防火墙(老生常谈了)

配置华为镜像云网络源

更新内核版本(yum update)

安装编译工具和和依赖软件包

yum -y install gcc gcc-c++ pcre-devel openssl openssl-devel zlib-devel ncurses-devel cmake bison libxml2-devel libpng-devel

准备Nginx(1.8)、mysql(5.56)、php(7.4.33)三大源码包

源码软件包安装

nginx

1.使用tar -xvf直接解压即可

2.创建用于运行nginx的用户

useradd -r -s /sbin/nologin nginx
echo “/sbin/nologin” >> /etc/shells

3.预编译定义nginx选项

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
mysql

1.使用tar -xvf直接解压即可

2.创建mysql用户

useradd -r -s /sbin/nologin mysql

3.预编译并且安装mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306

make && make install
ln -s /usr/local/mysql/bin/*  /usr/local/bin

4.生成配置文件

 cp -a /mysql-5.5.62/support-files/my-medium.cnf  /etc/my.cnf

5.初始化授权表

 cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql

6.生成Mysql的启动和自启动管理脚本

#切换到mysql的源码解压缩目录下的support-files
cd /lnmp/mysql-5.5.62/support-files
cp -a mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

chkconfig --add mysqld
chkconfig mysqld on
service mysqld start|stop|restart

7.给mysql的root用户设置密码

mysqladmin -uroot password 123456
php

1.使用tar -xvf直接解压即可

2.预编译选项并且安装

./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear --enable-fpm

make && make install

3.生成php配置文件

cp -a /lnmp/php-7.1.29/php.ini-production /usr/local/php/etc/php.ini

4.创建软连接,使用php相关命令是更方便

ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
使用nginx连接php

1.使用nginx连接php先启动php-fpm

cd /usr/local/php/etc/
#生成php-fpm的配置文件,并修改指定参数
cp -a php-fpm.conf.default php-fpm.conf

#修改指定条目的参数:
vim php-fpm.conf
pid = run/php-fpm.pid

cd /usr/local/php/etc/php-fpm.d/
cp -a www.conf.default www.conf
vim www.conf
#修改用户和组的指定用户
	user = nginx
	group = nginx

2.修改Nginx的配置文件,使其识别.php后缀的文件

vim /usr/local/nginx/conf/nginx.conf
#取消下列行的注释,并修改include选项的后缀为fastcgi.conf,并注意每一行结尾的分号和大括号
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;		#修改为fastcgi.conf
}

注意:有些网站项目开发时,目录和页面结构不相同,重新定义正则匹配

案例:location ~ .php(/.*)*$

该结构适用于typecho博客项目,可以匹配出"http://192.168.88.110/blog/index.php/archives/1/"

二、web服务器-nginx

1.学nginx之前需要了解的知识

1.1 同步和异步(通知结果的方式)
同步:当一个同步请求调用消息发出之后,调用者要一直等待调用的结果通知后,才能进行后续的操作执行
异步:当一个异步请求调用消息发出之后,调用者不必一直等待调用的结果返回,异步请求调用消息,想要得到结果,一般有两种方式
1.主动轮循异步调用的结果
2.被调用通过callback(回调函数)来通知调用者的调用结果

同步与异步的区别在于消息通知的方法上,也就是调用结果的通知方式不同

1.2 阻塞和非阻塞(进线程等待时状态)
阻塞:请求调用消息在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活 
非阻塞:请求调用消息在发出去后,不会阻塞当前进/线程,而会立即返回。

阻塞和非阻塞的区别在于(进程/线程)等待消息 时候的行为,也就是在等待消息的时候,当前(进程/线程)是挂起状态还是非挂起状态

同步异步和阻塞非阻塞的四种组合

  • 同步阻塞 :客户端在向服务端发送调用消息,客户端需要等待服务端的返回消息结果。在这个返回的过程中,进线程会被挂起,只有返回消息返回到客户端,进线程才会被激活。(apache就是该模式)
  • 同步非阻塞:客户端在向服务端发送调用消息,客户端需要等待服务端的返回消息结果。在这个返回的过程中,不会阻塞当前进线程,返回消息会立即返回客户端。
  • 异步阻塞:客户端在向服务端发送调用消息,客户端不需要一直等待服务端的返回消息结果。在这个返回的过程中,进线程会被挂起,只有返回消息返回到客户端,进线程才会被激活。
  • 异步非阻塞:客户端在向服务端发送调用消息,客户端不需要一直等待服务端的返回消息结果。在这个返回的过程中,不会阻塞当前进线程,返回消息会立即返回客户端。(nginx就是该模式)
	大部分程序的I/O模型都是同步阻塞的,单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞,直到完成数据传输。传统的服务器采用的就是同步阻塞的多进程模型。一个server采用一个进程负责一个request的方式,一个进程负责一个request,直到会话结束。进程数就是并发数,而操作系统支持的进程数是有限的,且进程数越多,调度的开销也越大,因此无法面对高并发。
1.3 epoll模型

当连接有I/O事件产生的时候,epoll就会去告诉进程哪个连接有I/O事件产生,然后进程就去处理这个事件。

1.4 nginx为什么比其他web服务器能处理高并发请求(工作原理)
	nginx配置了epoll模型,使用异步非阻塞方式工作,可以轻轻松松完成百万计的并发连接。
	每次有用户请求消息,就会有一个worker进程去处理。worker只会处理到可能会发生阻塞的进程。
	举个例子,客户端向服务端发送请求信息,并等待请求返回。那么当前进行处理的worker进程,不会干等着,客户端发送完请求后,他会把这个请求注册成一个事件(如果服务端返回消息了,请告诉我,我接着继续工作)。
	如果再有新的请求消息,接着秉承着这种工作方法处理请求。一旦服务端返回消息,就会触发事件,worker就快速回来接手。这个request就会一直往下走。通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大并发量的目的。

在这里插入图片描述

1.5 分布式

​ 同一项任务有多个不同的步骤协同完成的服务器构建方式

1.6 负载均衡

​ 同一类有多个服务彼此分摊压力的服务器构建方式。结合调度器

1.7 HTTP协议

​ 超文本传输协议

​ http1.1 数据传输的过程将所有的数据一起传输

​ http2 数据传输的时候将数据进行分流管理(分成图片文件、php文件、html文件等),提高处理数据效率

​ http3 支持udp传输

#使用http2在nginx中开启功能:
http2 on;  #在server模块中添加,http2需要在加密的基础上实现

2. Nginx详解

2.1 概述

​ Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协。议下发行。其特点是内存利用率高,并发能力强。

2.2 工作模式

nginx有两种工作模式:master-worker模式和单进程模式。

master-worker模式

nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理系统信号,加载配置,管理worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是worker进程。生产环境下一般使用这种模式。

使用master-worker模式的优点:

1. 稳定性高,只要还有worker进程存活,就能够提供服务,并且一个worker进程挂掉master进程会立即启动一个新的worker进程,保证worker进程数量不变,降低服务中断的概率。
2. 配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能
3. 处理信号/配置重新加载/升级时可以做到尽可能少或者不中断服务(热重启)

单进程模式(了解即可):

单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。该模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。

2.3 配置文件结构
user  www www;
#程序运行用户和组
worker_processes auto;
#启动进程,指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般等于cpu核心数目
error_log  /home/wwwlogs/nginx_error.log  crit;
#全局错误日志
pid        /usr/local/nginx/logs/nginx.pid;
#主进程PID保存文件
worker_rlimit_nofile 51200;
#文件描述符数量
events 
	{
  	use epoll; 
	#使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能
	worker_connections 51200;	 
	#工作进程的最大连接数量
	}
http{
	#网站优化参数
	server {						#具体的某一网站的配置信息
		listen 80;					#监听端口
		root html;					#网页根目录(/usr/local/nginx/html)
		server_name www.kernel.com;		#服务器域名
		index index.html;			#默认加载页面
		access_log logs/access.log;	#访问日志保存位置
		......;
		location (.*)\.php$ {
			用正则匹配具体的访问对象;
		}
		location {
			跳转等规则;
		}
	}
	server {
		虚拟主机;
	}
}

3.nginx实验

实验1:nginx的状态统计

1.预编译nginx的时候使用–with-http_stub_status_module,将该模块开启

2.修改nginx的主配置文件(写入要访问的server标签)

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location /tongji{
	stub_status on;
	access_log  off;
	}

3.客户端访问网址IP/tongji

在这里插入图片描述

"Active connections"表示当前的活动连接数;
"server accepts handled requests"表示已经处理的连接信息三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数

实验2:目录保护

继续上面的步骤继续实验

在线状态统计的location中添加

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
auth_basic "Welcome to nginx_status!";
auth_basic_user_file /usr/local/nginx/html/htpasswd.nginx;

使用apache的命令htpsswd进行用户密码文件的创建

yum -y install httpd		#需要先安装apache
htpasswd -c /usr/local/nginx/html/htpasswd.nginx user
#将密码文件生成到指定的目录

重启nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx

实验结果

在这里插入图片描述

实验3:基于IP访问控制

接着上面的实验完成操作

在线状态统计的localtion添加

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
allow 192.168.88.1;
deny 192.168.88.0/24;

重启nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx
实验4:nginx的虚拟主机(基于域名)

1.提前准备两个网站域名,并且规划了两个网站网页存放目录,并且设置好权限

www.first.com(/use/local/nginx/html/one) www.second.com(/use/local/nginx/html/two)

2.在nginx主配置文件中编写两个server标签,并且写好各自信息

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    server{
        listen  80;
        server_name www.first.com;
        index index.html;
        root html/one;
        access_log logs/one-access.log main;
   }

   server{
        listen  80;
        server_name www.second.com;
        index index.html;
        root html/two;
        access_log logs/one-access.log main;
   }

3.重启nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx

4.分别访问两个不同的域名验证结果(需要把域名和ip地址加到本机hosts文件中)

在这里插入图片描述

在这里插入图片描述

实验5:nginx的反向代理

正向代理:是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个请求并指定目录,然后代理向原始服务器转交请求并获得内容返回给客户端

在这里插入图片描述

反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,及用户直接访问代理服务器就可以获得目标服务器之间的资源,反向代理服务器负责将请求转发给目标服务器。

用户不需要知道目标服务器的ip地址,也无需在用户端做任何决定

在这里插入图片描述

实验步骤

1.在另一台机器安装apache,启动并编写页面

2.编写nginx的主配置文件在server标签内添加

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

location / {
  proxy_pass http://192.168.99.135:80;#此处填写apache服务器的IP地址
}

3.重启nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx

启动之前原页面

在这里插入图片描述

启动之后现在页面

在这里插入图片描述

实验6:负载调度(负载均衡)

负载均衡:就是将任务分摊到多个操作单元上进行执行,例如web服务器、FTP服务器、企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务

实验步骤

1.使用默认的rr轮询算法,修改nginx配置文件

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
# 负载均衡模块
upstream aas{
        server 192.168.99.135:80;
        server 192.168.99.145:80;
   }
   server{
        location / {
           proxy_pass http://aas;  #添加反向代理。代理地址写aas和上面的轮询标签一致
           proxy_set_header Host $host;#重写请求头部保证网站所有页面都可以访问成功
        }
   }

2.开启并设置两台主机(99.135和99.145)

安装apache,并设置不同的网页内容来完成实验效果

3.重启nginx,使用客户端进行测试

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx

#刷新网站页面就可以实现两个网页来回轮询

扩展补充:wrr算法实现加强轮询

upstream aas {
	server 192.168.88.100:80 weight=1;
	server 192.168.88.200:80 weight=2;
}
实验7:nginx实现https(证书+rewrite)

实验步骤

1.预编译nginx,需要将–with-http_ssl_module 模块开启

2.在对应要进行加密的server标签中添加以下内容开启SSL

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
        listen       443 ssl;
        server_name  www.second.com;
        ssl on;             #开启ssl加密
        ssl_certificate     /usr/local/nginx/conf/ssl/tt.crt;
        ssl_certificate_key  /usr/local/nginx/conf/ssl/tt.key;

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

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

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

3.生成证书密钥文件

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# mkdir ssl
[root@localhost conf]# cd ssl
[root@localhost ssl]# openssl genrsa -out tt.key 1024
[root@localhost ssl]# openssl req -new -key tt.key -out tt.csr
[root@localhost ssl]# openssl x509 -req -days 365 -sha256 -in tt.csr -signkey tt.key -out tt.crt

4.设置http自动跳转https功能

#在刚才的加密ssl模块server上面加以下内容 
server {
        listen  80;
        server_name  www.second.com;
        rewrite  ^(.*)$  https://www.second.com$1 permanent;
    #直接跳转到https://www.second.com ,permanent是永久跳转的意思测试的时候不建议使用,容易造成误判
        location / {
            root   html/two;
            index  index.html index.htm;
        }
   }

5.重启nginx,并测试

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
[root@localhost ~]# /usr/local/nginx/sbin/nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1881819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.NET 漏洞情报 | 某整合管理平台SQL注入

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Github 2024-07-01开源项目月报 Top15

根据Github Trendings的统计,本月(2024-07-01统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6JavaScript项目3C++项目2PHP项目1Blade项目1非开发语言项目1C#项目1Lua项目1Go项目1MDX项目1Jupyter Notebook项目1从零开始构建你喜…

AI绘画:探索人工智能与艺术的奇妙结合

前言 人工智能技术的不断发展,使得AI绘画逐渐成为艺术领域的新宠。AI绘画是指利用人工智能算法进行绘画创作的一种艺术形式,它可以模拟人类艺术家的创作过程,创造出各种独特的艺术作品。 突破传统艺术的极限:AI绘画的无限可能性 …

学习CAN协议(二):使用CAN发送数据

相关文章 学习CAN协议(一):CAN协议简介 学习CAN协议(二):使用CAN发送数据 学习CAN协议(三):使用CAN接收数据 目录 一、配置CubeMX 二、代码编写 CAN的发送示例代码…

数据资产的创新应用与未来展望:探讨数据资产在人工智能、物联网等新兴领域的应用前景,提出前瞻性的数据资产解决方案,为企业探索新的增长点,推动行业创新发展

目录 一、引言 二、数据资产在人工智能领域的应用 1、机器学习与深度学习 2、自然语言处理 3、计算机视觉 三、数据资产在物联网领域的应用 1、智能家居 2、工业物联网 3、智慧城市 四、前瞻性的数据资产解决方案 1、构建统一的数据管理平台 2、加强数据安全和隐私…

SAAM架构-系统架构师(十九)

1、(重点)(问题1)针对最终架构而非详细设计进行评估。(问题2)用于分析多种质量属性之间的折中。 问题1 A SAAM B ATAM C CBAM D SAEM 问题2 A SAAM B ATAM C CBAM D SAEM 解析: SAAM针…

3.js - MeshPhysicalMaterial - 虹彩效果

效果图 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween impor…

控制台厂家的创新设计主要体现在哪几方面

在当今科技飞速发展的时代,控制台厂家面临着不断变化的市场需求和激烈的竞争,创新设计成为了他们脱颖而出的关键。这些创新设计主要体现在以下几个引人注目的方面: 人体工程学的深度融合是一大亮点。控制台厂家充分考虑操作人员长时间工作的实…

JsonCpp:更简洁的序列化及反序列化

简介 jsoncpp 提供了一组简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得更加方便和高效。 安装 linux环境下安装jsoncpp sudo apt-get update sudo apt-get install --reinstall libjsoncpp-dev建立软链接确保编译器找到头文件 #include <json/json.h>…

华为HCIP Datacom H12-821 卷19

1.多选题 如图所示,RTA 的 GE0/0/0、GE0/0/1 接口分别连接部门 1 和 2,其网段分别为 10.1.2.0/24、 10.1.3.0/24 网段,为限制部门 1 和 2 之间的相互访问,在 RTA 上部署 traffic-filter,以下哪些部署方式是正 确? A、配置 ACL3000 拒绝源为 10.1.2.0/24 目的为 10.1.3.0…

智谱AI ChatGLM-4使用教程:函数调用Function calling(赠送免费500w token)

文章目录 智谱AI介绍ChatGLM介绍token资源包函数调用能力编写函数参数列表的 `JSON` 描述函数调用选择Function Call 流程实践智谱AI介绍 北京智谱华章科技有限公司(简称“智谱AI”)致力于打造新一代认知智能大模型,专注于做大模型的中国创新。公司合作研发了中英双语千亿级…

剑神诀_单机架设_无需虚拟机_小白专用

前言 今天给大家带来一款单机游戏的架设&#xff1a;剑神诀&#xff0c;一键端 无需虚拟机 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 剑神诀 搭建教程 此游戏架设不需要安装虚拟机&#xff0c;…

大会员体系是如何让积分流动起来,实现跨业态引流的?

积分&#xff0c;是大会员体系建设的重点&#xff0c;也是难点之一。 假设积分跨业态或者跨品牌流通&#xff0c;但没有一套统一的积分结算体系&#xff0c;就容易出现各业态或品牌利益分配不均的问题。 因此&#xff0c;大会员体系能有效落地的重点之一&#xff1a;集团必须…

AI绘画Stable Diffusion 双重曝光-神秘意境和难以言喻的视觉体验,SD提示词轻松搞定

大家好&#xff0c;我是画画的小强 今天给大家介绍AIGC绘图提示语使用常见摄影手法&#xff1a;双重曝光。双重曝光摄影效果是一种摄影爱好所热衷的常见摄影手法之一。通过双重曝光摄影手法&#xff0c;能够为图同摄影图像引入神秘的意境感和一种难以言喻的视觉体验&#xff0…

python基础_类

在Python中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。类提供了一种创建新对象的模板&#xff0c;这些对象通常被称为类的实例或对象。以下是关于Python类的一些关键点和特性&#xff1a; 定义类 类通过class关键…

Swagger php注解常用语法梳理

Swagger php注解常用语法梳理 快速编写你的 RESTFUL API 接口文档工具&#xff0c;通过注释定义接口和模型&#xff0c;可以和代码文件放置一起&#xff0c;也可以单独文件存放。 Swagger 优势 通过代码注解定义文档&#xff0c;更容易保持代码文档的一致性模型复用&#xff0…

CSS 背景添加白色小圆点样式

css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;

Java代码生成器(开源版本)

一、在线地址 Java在线代码生成器&#xff1a;在线访问 二、页面截图 三、核心功能 支持Mybatis、MybatisPlus、Jpa代码生成使用 antlr4 解析SQL语句&#xff0c;保证了SQL解析的成功率支持自定义包名、作者名信息支持自定义方法名、接口地址支持自定义选择是否生成某个方法…

沃尔玛自养号测评:从入门到精通的全方位指南

沃尔玛测评自养号优势要点及IP环境搭建技术及主要可以归结为以下几个方面&#xff1a; 一、沃尔玛IP环境搭建技术 1.使用国外的服务器&#xff1a;为了确保测评活动的隐蔽性和安全性&#xff0c;卖家需要选择使用国外的服务器&#xff0c;并通过远程搭建一个安全终端防火墙。…

IDEA中Java源文件编译后class文件中文乱码

文章目录 一、设置 一、设置 路径&#xff1a;File -> Settings -> Bulid, Execution,Deployment -> Compiler -> Java Compiler