当前位置: 首页 > news >正文

从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(下)

从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)https://coffeemilk.blog.csdn.net/article/details/151350565

一、Nginx与PHP-FPM整合原理

 1.1、PHP-FPM配置文件

Nginx与PHP-FPM整合原理
序号说明
1

PHP-FPM是一个第三方的FastCGI进程管理器,最先它是作为PHP的一个补丁来开发的,现在PHP-FPM已经集成到了PHP源码中,在配置安装PHP的时候,通过指定“--enable-fpm”选项即可启用PHP-FPM功能。

#PHP的源码编译配置
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip
2

PHP-FPM管理的进程包含【master进程】和【worker进程】两种。

《1》master进程只有一个,主要负责监听端口,接收来自Web Server的请求;

《2》而worker进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌了一个PHP解释器,是PHP代码真正执行的地方。

3

那么Nginx又是如何发送请求给PHP-FPM的呢?

        这就要从Nginx层面讲起了,我们知道,Nginx不仅仅是一个Web服务器,也是一个功能强大的代理服务器,除了进行http请求的代理,也可以进行许多其他协议请求的代理,包括与PHP-FPM相关的FastCGI协议。

        为了能够使Nginx理解FastCGI协议,Nginx提供了一个FastCGI模块来将http请求映射为对应的FastCGI请求,这样,Nginx就可以将请求发送给PHP-FPM了,也就实现了Nginx与PHP-FPM的集成。

PHP-FPM配置文件操作
序号说明
1

我们在使用PHP源码编译安装完成PHP后,PHP的默认安装路径是【/usr/local/php】。

#1-PHP的默认安装路径是【/usr/local/php】
cd /usr/local/php#2-PHP的默认配置路径【/usr/local/php/etc】
cd /usr/local/php/etc#3-需要将PHP默认配置路径下的【php-fpm.conf.default】文件名称
#修改为【php-fpm.conf】(这个文件只有最后一行的 
#【include=/usr/local/php/etc/php-fpm.d/*.conf】是有用的)
mv php-fpm.conf.default php-fpm.conf

2

#1-进入PHP默认配置路径下的【php-fpm.d】目录下
#【www.conf.default】文件名称修改为【www.conf】
#并且编辑该配置文件【将该文件里面配置如:
#user与group后面的内容都修改为(www);(listen = 127.0.0.1:9000)】
mv www.conf.default www.conf
vi www.conf#【/usr/local/php/etc/php-fpm.d/www.conf】文件里面具体需编辑的内容如下:
[www]
user = www
group = www
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

3PHP的详细配置文件【/usr/local/php/etc/php-fpm.d/www.conf】参数项说明

user

group

设置运行php-fpm进程的用户;

设置运行php-fpm进程用户组;

listen 配置php-fpm进程监听的IP地址以及端口,默认是127.0.0.1:9000
pm

用来指定php-fpm进程池开启进程的方式,有两个值可以选择:

《1》static(静态);

《2》dynamic(动态);

《3》ondemand(按需);

pm.max_children

在static方式下表示固定开启的php-fpm子进程数量;

在dynamic方式下表示开启php-fpm的最大进程数;

pm.start_servers

【只在pm=dynamic方式】下初始开启php-fpm的子进程数量;

默认值=(min_spare_servers+max_spare_server)/2

pm.min_spare_servers 【只在pm=dynamic方式】空闲状态下开启的最小php-fpm子进程数量
pm.max_spare_servers

【只在pm=dynamic方式】空闲状态下开启的最大php-fpm进程数量;

注意:pm.max_spare_servers的值只能小于等于pm.max_children的值

pm.max_spawn_rate【只在pm=dynamic方式】下一次性生成的子进程数量;默认值是32且不启用
pm.process_idle_timeout【只在pm=ondemand方式】下空闲进程在多少秒后被终止;默认值是10秒且不启用
pm.max_requests每个子进程在重新生成之前应执行的请求数量。
这有助于解决第三方库中的内存泄漏问题。要进行无限的请求处理,请指定“0”。等同于 PHP_FCGI_MAX_REQUESTS。
默认值:0;默认是不启用

 1.2、配置Nginx来支持PHP并测试

#配置Nginx来支持PHP的完整操作流程#1-查看已有nginx的编译所有配置信息和版本(若是yum安装的Nginx则直接使用【nginx -V】即可)
#也可使用【systemctl status nginx.service】查看到Nginx的配置文件启动路径等信息
#【yum安装的Nginx的配置文件默认是(/etc/nginx/nginx.conf)】
#【使用源码安装的Nginx的配置文件默认是(/usr/local/nginx/conf/nginx.conf)】
systemctl status nginx.servicewhereis nginx
/usr/local/nginx/sbin/nginx -V#2-编辑Nginx的配置文件实现反向代理.php内容到php-fpm中(及其最终配置为的内容)
vi /etc/nginx/nginx.confserver {listen       80;listen       [::]:80;server_name  _;root         /usr/share/nginx/html;location / {index index.html index.htm index.php;root html;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-查看系统当前运行的Nginx进程信息并获取到Nginx的父进程PID编号(如:1224)
#获取到Nginx的父进程PID后【在不影响Nginx处理业务的情况下重启Nginx】
ps -ef | grep nginx
kill -HUP 1224#4-检查PHP-FPM服务是否已经启动(若未启动则需要启动,且设置开机自启)
systemctl status php-fpm.service 
systemctl start php-fpm.service 
systemctl enable php-fpm.service#5-若使用systemctl命令启动服务失败,可以查看服务状态配合日志来判断定位问题(如:这里排查后提示日志文件是只读模式,导致无法写入才失败,因此我们可以进入日志所在目录查看日志的权限;如权限没有问题就是php-fpm服务中的ProtectSystem属性保护系统导致,需要将php-fpm服务中的ProtectSystem属性值修改为false保存退出后,重载服务并重启php-fpm服务即可)
systemctl status php-fpm.service 
tail -20 /var/log/messagescd /usr/local/php/var/log/
ll
vi /usr/lib/systemd/system/php-fpm.service
ProtectSystem=falsesystemctl daemon-reload
systemctl start php-fpm.service
systemctl status php-fpm.service#6-查看php-fpm的所有进程信息与网络端口信息
ps -ef | grep php-fpm
netstat -antlp | grep php-fpm#7-进入到Nginx配置网站内容的路径且编写一个php文件用于测试Nginx对php的反向代理和支持
cd /usr/local/nginx/html
vi phpinfo.php#7.1-给phpinfo.php文件里面的内容如下:
<?php phpinfo(); ?>#8-在浏览器输入Nginx所在服务器的IP地址/phpinfo.php即【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)看该文件是否可以解析出正常的内容
#8.1-查看Linux服务器的ip命令
ifconfig#9-通过【mysqli方式】测试PHP连接MySQL是否正常
#9.1-进入Nginx的网站配置路径
cd /usr/share/nginx/html/
#9.2-创建并编辑mysqli.php文件
vi mysqli.php#mysqli.php文件中连接mysql数据的代码(保存并退出)
<?php
$conn = mysqli_connect('127.0.0.1', 'root', 'abc123456', 'mysql','3336');
if(!$conn){
die("数据库连接错误" . mysqli_connect_error());
}else{
echo"数据库连接成功";
}
?>#9.3-在浏览器输入Nginx所在服务器的IP地址/mysqli.php即【ip/mysqli.php】(如:192.168.1.9/mysqli.php)查看是否显示“数据库连接成功”#10-通过【pdo-mysql方式】测试PHP连接MySQL是否正常
#10.1-进入Nginx的网站配置路径
cd /usr/share/nginx/html/
#10.2-创建并编辑mysqli.php文件
vi pdo-mysql.php#pdo-mysql.php文件中连接mysql数据的代码(保存并退出)
<?php
try{
$pdo=new pdo('mysql:host=127.0.0.1;port=3336;dbname=mysql','root','abc123456');
}catch(PDDException $e){
echo "pdo方式连接数据库失败"+$e;
}
echo "pdo方式连接数据库成功";
?>#10.3-在浏览器输入Nginx所在服务器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如:192.168.1.9/pdo-mysql.php)查看是否显示“pdo方式连接数据库成功”

现在在浏览器上输入Nginx所在服务器的IP地址/phpinfo.php即【服务器IP/phpinfo.php】(如:192.168.1.9/phpinfo.php)

        注意:如果我们在浏览器访问(192.168.1.9/phpinfo.php)并没有正常显示php内容,且提示“File not fount”时的排查解决思路:进入Nginx服务器并查看报错日志;分析报错日志。

#进入Nginx服务器并查看报错日志;分析报错日志详细排查解决流程:#1-查看当前服务器的Nginx的默认目录配置、报错日志文件命令
nginx -V#2-根据查找到的nginx报错日志文件打开查看
tail -f /var/log/nginx/error.log#3-通过查看Nginx的报错日志文件可以清晰的看到报错日志是“FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream”;我们若不清楚这个报错信息可以将这个报错内容粘贴到百度查看即可查看到解决方法【该错误的含义是php-fpm的FastCGI无法响应Nginx反向代理过来的内容,在结合浏览器界面上显示的没有发现我们访问的phpinfo.php文件】(总结一下这个问题的原因就是:我们在Nginx上创建的phpinfo.php所在的路径不对,导致Nginx没有找到这个文件;只需要将这个文件在Nginx正确读取的网站路径下配置就可以解决了)#4-查找Nginx对应的正确网站路径(是【/usr/share/nginx/html】,接着在该路径下重新创建phpinfo.php文件)
nginx -V
cd /usr/share/nginx/html
vi phpinfo.php#phpinfo.php文件的内容是
<?php phpinfo(); ?>#5-再次访问【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)即可成功显示php的版本配置信息内容

到这里恭喜你配置Nginx支持php-fpm解析成功了!!!

《1》接下来是通过【mysqli方式 】测试php连接mysql数据库是否正常:

        在浏览器输入Nginx所在服务器的IP地址/mysqli.php即【ip/mysqli.php】(如192.168.1.9/mysqli.php)若显示“数据库连接成功”则表示php连接mysql没有问题(如下图所示)否则就是有问题的(具体的问题需要查看Nginx的错误日志【tail -f /var/log/nginx/error.log】)

《2》接下来是通过【pdo-mysql方式 】测试php连接mysql数据库是否正常:

         在浏览器输入Nginx所在服务器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如192.168.1.9/pdo-mysql.php)若显示“pdo方式连接数据库成功”则表示php连接mysql没有问题(如下图所示)否则就是有问题的(具体的问题需要查看Nginx的错误日志【tail -f /var/log/nginx/error.log】)

二、在LNMP环境下部署WordPress网站项目

        本文以wordpress为例,介绍下在LNMP环境下,如何部署和使用这套博客系统,WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统(CMS),用户可以免费使用、修改和分发,安装完成后,通过后台管理界面进行网站的配置和内容管理。

#在LNMP环境下载安装部署应用项目WordPress详细操作流程#1-进入/data目录然后从WordPress网站下载安装包
cd /data
wget https://cn.wordpress.org/wordpress-6.8.2-zh_CN.tar.gz#2-将下载好的WordPress安装包解压到Nginx网站目录下(/usr/share/nginx/html/)
tar -zxvf wordpress-6.8.2-zh_CN.tar.gz -C /usr/share/nginx/html#3-进入Nginx的默认网站目录下(可以查看到有一个名为wordpress的文件夹里面就是全部的php网站内容)
cd /usr/share/nginx/html/
ls
cd ./wordpress/
ll#4-在浏览器输入NginxIP/wordpress即可访问(若不能访问到安装界面则在后面添加上index.php就可以了)
192.168.1.9/wordpress#5-在mysql数据库中创建wordpress的数据库
/usr/local/mysql/mysql-8.4.6/bin/mysql -uroot -p
create database wordpress;#6-在Nginx的默认网站路径下的wordpress网站中创建【wp-config.php】文件并填写内容
vi /usr/share/nginx/html/wordpress/wp-config.php#6.1-在Nginx的默认网站路径下的wordpress网站中创建【wp-config.php】文件对应的内容
<?php
/*** The base configuration for WordPress** The wp-config.php creation script uses this file during the installation.* You don't have to use the website, you can copy this file to "wp-config.php"* and fill in the values.** This file contains the following configurations:** * Database settings* * Secret keys* * Database table prefix* * ABSPATH** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/** @package WordPress*/// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );/** Database username */
define( 'DB_USER', 'root' );/** Database password */
define( 'DB_PASSWORD', 'abc123456' );/** Database hostname */
define( 'DB_HOST', '127.0.0.1:3336' );/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );/**#@+* Authentication unique keys and salts.** Change these to different unique phrases! You can generate these using* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.** You can change these at any point in time to invalidate all existing cookies.* This will force all users to have to log in again.** @since 2.6.0*/
define( 'AUTH_KEY',         'SXfAJ2,9cW^4[%U/2*}p!2`wa_Nfv:.}:s$a-/(M){cPO{YX1O7];:xFcqjirnn#' );
define( 'SECURE_AUTH_KEY',  '[orgrI*qeAlv10NT6yvLN|KYZ4i8km;X9I%M5=X_x;D*YxE.W`G8zHf-CIW-i$Dj' );
define( 'LOGGED_IN_KEY',    '[0&^_kfTzSk/&8{li3V+M#qt@,T@E;Z*wO>kHEwKV,eM6tFbT$0dZSV+;m|AjOur' );
define( 'NONCE_KEY',        'EIEx?o`;AM@4{aD/V:(to%#)0Xv1=>Z?X!a}mK7$!FrbRoj|1>nnj+**yuejAT~<' );
define( 'AUTH_SALT',        'qd#3G(O:1s?Y<3LKZii ?!&sN@j7jDpa%sej*Po%C}>EUAk!p?@BltS+tbyT*;]L' );
define( 'SECURE_AUTH_SALT', '$LvzuK:/t7_.`SGDCp946r?)*x%srjJreh]z+p4bYCq*rQ <DL98Pe,a%,oS}?S!' );
define( 'LOGGED_IN_SALT',   'rppE.fpZ7MZlaJb.fJU@-^p;4-ObSZg`ay{P>4^d%m1IV`vC$KiMc++1[[s8t*9q' );
define( 'NONCE_SALT',       ']=s+s^ 8rI=q++-&$e,]_#>s,W9E?-8ou-kE==|m_wIA->9u{qoF);Dmf+VZ1(/l' );/**#@-*//*** WordPress database table prefix.** You can have multiple installations in one database if you give each* a unique prefix. Only numbers, letters, and underscores please!** At the installation time, database tables are created with the specified prefix.* Changing this value after WordPress is installed will make your site think* it has not been installed.** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix*/
$table_prefix = 'wp_';/*** For developers: WordPress debugging mode.** Change this to true to enable the display of notices during development.* It is strongly recommended that plugin and theme developers use WP_DEBUG* in their development environments.** For information on other constants that can be used for debugging,* visit the documentation.** @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/*/
define( 'WP_DEBUG', false );/* Add any custom values between this line and the "stop editing" line. *//* That's all, stop editing! Happy publishing. *//** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {define( 'ABSPATH', __DIR__ . '/' );
}/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

注意:在这一步点击【安装WordPress】前一定要先复制一份密码框的内容做备份,否则第一次登录的密码那里你都不知道密码就无法登录了!!!

三、LNMP环境下给Web开启https

 3.1、HTTP与HTTPS

HTTP与HTTPS
序号说明
1HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
2HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版本,HTTPS协议是利用SSL+HTTP协议建立安全信道,加密数据包,提供身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别
1

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

2

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

3

使用https协议需要申请SSL证书,证书有收费和免费的。

现在几乎所有的网站都开启了https协议,所以使用https已经是个趋势。

 3.2、SSL证书的获取

关于证书完整申请的流程如下:

        购买域名--->购买云主机(可获取到公网IP)--->工信部备案域名(备案需要域名和可解析的公网IP地址,最快两周内即可完成备案)--->备案成功后,就可以做域名解析了--->购买SSL证书--->在云主机部署网站程序,加载免费证书。

        注意:商业CA机构颁发证书时,需要绑定公网域名(即:在申请SSL证书之前,你的域名已经申请好了,并且也做了域名备案和解析,否则无法申请SSL证书)。 ​​​​​​​

        现在很多网站都提供免费的SSL证书(如:阿里云 的数字证书服务,可以一次申请3个月免费的SSL证书,过期后,可继续再次申请3个月的免费证书),申请方式如下:

 3.3、绑定SSL证书到Nginx

        将会申请好的证书绑定到我们服务器的Nginx配置上即可,在Nginx上配置ssl证书,需要在nginx.conf中添加一个server段,内容如下:

#1-在Nginx的配置文件路径创建一个证书的文件夹ssl,然后将SSL证书上传到Nginx的配置文件所在路径下的ssl中(如:/etc/nginx/)
cd /etc/nginx/
mkdir ssl#2-编辑Nginx的配置文件
vi /etc/nginx/nginx.conf#2.1-编辑Nginx启用SSL证书的配置内容server{listen       443 ssl;listen       [::]:443 ssl;root         /usr/share/nginx/html;server_name ck.site www.ck.site;ssl_certificate   ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;ssl_prefer_server_ciphers on;ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers     "HIGH:!aNULL:!MD5";add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-Xss-Protection 1;location / {root html;index  index.html index.htm index.php;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-验证修改后的Nginx的配置文件nginx.conf是否正确
nginx -t#4-查看系统当前的Nginx进程获取到Nginx的父进程PID编号(如:5035)
ps -ef | grep nginx#5-在不影响Nginx正常业务处理的情况下重启Nginx
kill -HUP 5035#6-在浏览器输入域名访问即可查看到效果

 3.4、配置Nginx只能通过域名访问不能使用IP访问

#配置Nginx只能通过域名(如:ck.site)访问不能使用IP访问的配置流程#1-在Nginx的配置文件所在路径中(如:/etc/nginx/)
cd /etc/nginx/#2-编辑Nginx的配置文件
vi /etc/nginx/nginx.conf#3-实现只能通过域名(如:ck.site)访问不能使用IP访问的nginx配置内容server {listen 80 default_server;listen [::]:80 default_server;server_name _;# 当用IP访问时,返回500错误码#return 500;#把IP和其他域名访问的流量永久重定向到我们的域名return 301 https://ck.site$request_uri;}server {listen 443 ssl default_server;listen [::]:443 ssl default_server;ssl_certificate ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;server_name _;#return 500;#把IP和其他域名访问的流量永久重定向到我们的域名return 301 https://ck.site$request_uri;}server {listen 80;listen [::]:80;listen 443;listen [::]:443;server_name ck.site www.ck.site;#将IP和其他域名访问的流量永久重定向到我们的域名中return 301 https://$server_name$request_uri;location / {root /usr/share/nginx/html;#根据需要设置访问白名单(这里只允许192.168.1网段与192.168.3网段的设备访问)allow 192.168.1.0/24;allow 192.168.3.0/24;deny  all;}}#4-验证修改后的Nginx的配置文件nginx.conf是否正确
nginx -t#5-查看系统当前的Nginx进程获取到Nginx的父进程PID编号(如:5035)
ps -ef | grep nginx#6-在不影响Nginx正常业务处理的情况下重启Nginx
kill -HUP 5035#7-在浏览器输入域名访问即可查看到效果

        如果要在本地的Windows系统使用自己的域名测试,则需要进入【C:\Windows\System32\drivers\etc】路径,将该路径下的【hosts】文件复制一份到桌面上,然后使用文本编辑器打开输入自己的域名及其IP地址后保存;然后在将桌面上修改好的这个hosts文件复制粘贴到【C:\Windows\System32\drivers\etc】路径下替换原有的hosts文件即可。

注意,在正式修改Windows系统的hosts文件前先复制一份作为备份。


文章转载自:

http://Ok8bO3N5.mhmdx.cn
http://PPpfiCrU.mhmdx.cn
http://WcrruLRq.mhmdx.cn
http://BFPvfUAL.mhmdx.cn
http://EUFffmeE.mhmdx.cn
http://sYEw89GC.mhmdx.cn
http://SYEvwR2Z.mhmdx.cn
http://Zh9sDRoF.mhmdx.cn
http://Z93nectb.mhmdx.cn
http://Werkj0IA.mhmdx.cn
http://OZGJ5gz6.mhmdx.cn
http://KZnUqVzj.mhmdx.cn
http://E8iwdtsz.mhmdx.cn
http://F3jyPQh2.mhmdx.cn
http://VjUISGKb.mhmdx.cn
http://9BZCaYXy.mhmdx.cn
http://t8pDZvj9.mhmdx.cn
http://jLCl59X7.mhmdx.cn
http://lVLkJ3rN.mhmdx.cn
http://WaXOnlZu.mhmdx.cn
http://HE0Pasnq.mhmdx.cn
http://R2QezvY9.mhmdx.cn
http://WxKMF8Yn.mhmdx.cn
http://AllMqjpV.mhmdx.cn
http://qnI25eKT.mhmdx.cn
http://WfbaN6zw.mhmdx.cn
http://CGGyvLjg.mhmdx.cn
http://TRmNtNbt.mhmdx.cn
http://sFG3dtQL.mhmdx.cn
http://ca5Yxq2z.mhmdx.cn
http://www.dtcms.com/a/378701.html

相关文章:

  • 从iPhone 17取消SIM卡槽,看企业如何告别“数据孤岛”
  • Docker入门指南:CentOS 7 安装与阿里云镜像加速配置
  • 【Python自动化】 22 Python os 库详解
  • 智能投影仪技术解析:从显示工具到智慧影音终端的演进
  • 下一代社媒运营工具:亚矩阵云手机集成AIGC与数字人技术引领内容革命
  • 在Excel中删除大量间隔空白行
  • Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示
  • 新版Android Studio能打包但无法run ‘app‘,编译通过后手机中没有安装,顶部一直转圈
  • CSS 伪类选择器
  • 2年1170万!39岁的霍福德,还有多少油?
  • IsaacSim Segmentation
  • CLIP、DALL·E 1的解读
  • Go 语言开发环境安装与 GOPROXY 镜像配置(含依赖管理与版本切换技巧)
  • 麒麟V10 + Docker部署KingbaseES数据库实战教程
  • 比亚迪新版五合一登陆、签到、查询、迁移
  • HOT100--Day22--74. 搜索二维矩阵,34. 在排序数组中查找元素的第一个和最后一个位置,33. 搜索旋转排序数组
  • Sentinel 原理与源码解析:流控、熔断、降级到热点限流的一体化方案
  • 克隆代币 + 捆绑开盘:多链环境下的低成本发币玩法
  • Android 项目:画图白板APP开发(六)——分页展示
  • 阿里云ClickHouse数据保护秘籍:本地备份与恢复详解
  • 数字图像处理——图像金字塔
  • 全球充电标准体系简介
  • Sub-GHz无线收发单片机,低功耗物联网通信的硬件“基石”
  • React18学习笔记(一) 创建React项目,JSX基础应用,案例:视频网站评论区
  • 【实时Linux实战系列】规避缺页中断:mlock/hugetlb 与页面预热
  • 全球汽车高压电加热器市场规模到2031年将达到62.72亿美元,CAGR 25.2%
  • 【展厅多媒体】从技术到体验,AR在展厅中的一体化整合
  • 双指针算法_移动零
  • 数据结构之复杂度
  • 几种常用锁