高性能 Web 服务器:让网页瞬间绽放的魔法引擎(下)

目录

一.Nginx 反向代理功能

1.缓存功能

2.http 反向代理负载均衡

二.实现 Nginx 四层负载均衡

三.实现 FastCGI

1.为什么会有FastCGI?

2.什么是PHP-FPM?

3.FastCGI配置指令

4.Nginx与php-fpm在同一服务器

5.Nginx配置转发

6. php的动态扩展模块(php的缓存模块)

​编辑​编辑

7.php高速缓存

四.nginx 二次开发版本:编译安装 openresty


一.Nginx 反向代理功能

1.正向代理是客户端指定让代理去访问哪个服务。翻墙服务是用户自己花钱买到,所以正向代理代表的是客户端的利益, 反向代理是代理将客户端的请求分发给某个服务器。Nginx服务器是服务端搭建的,代表的是服务端的利益。

2.反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的 一种方式,这是用的比较多的一种方式。 nginx 本身不具备的请求通过某种预 定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能: ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理 ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass #等指令引用的后端服务器分组 ngx_stream_proxy_module: #将客户端的请求以tcp协议转发至指定服务器处理 ngx_http_fastcgi_module: #将客户端对php的请求以fastcgi协议转发至指定服务器助理 ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理

3.逻辑调用关系:

同构代理:用户不需要其他程序的参与,直接通过http协议或者tcp协议访问后端服务器 。

异构代理:用户访问的资源时需要经过处理后才能返回的,比如php,python,等等,这种访问资源需 要经过处理才能被访问

#需要三台主机:
#172.25.254.100 Nginx 代理服务器
#172.25.254.10 后端node1web,Apache部署
#172.25.254.20 后端node2web,Apache部署
--------------------node1web:172.25.254.10--------------------------
yum install httpd -y
systemctl enable --now httpd
echo node1web - 172.25.254.10 > /var/www/html/index.html
dnf install php -y
systemctl restart httpd
vim /var/www/html/index.php
<?phpphpinfo();
?>
-----------------node2web:172.25.254.20---------------------------
[root@node2 ~]# yum install httpd -y
[root@node2 ~]# systemctl enable --now httpd
[root@node2 ~]# mkdir -p  /var/www/html/static/
[root@node2 ~]# echo node2web static - 172.25.254.20 > /var/www/html/static/index.html
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
....
#listen 12.34.56.78:80
listen 8080
....
[root@node2 ~]# systemctl restart httpd
测试:在nginx端curl一下。
[root@nginx ~]# curl 172.25.254.20:8080/static/
node2web static - 172.25.254.20
[root@nginx ~]# curl 172.25.254.10
node1web - 172.25.254.10
----------------------nginx:172.25.254.100-----------------------
#nginx
[root@Nginx ~]# vim /usr/local/nginx/conf.d/xiaozhuhzhu.conf
server {listen 80;server_name www.timinglee.org;location / {proxy_pass http://172.25.254.10:80; #proxy_pass只能写一个。反向代理单台 web服务器}location /static {proxy_pass http://172.25.254.20:8080; #指定 location 实现反向代理}
}
----------------------动静分离----------------------
[root@Nginx ~]# vim /usr/local/nginx/conf.d/xiaozhuhzhu.conf
server {listen 80;server_name www.timinglee.org;location ~ \.php$ {proxy_pass http://172.25.254.10:80;    #动态}location /static {proxy_pass http://172.25.254.20:8080;   #静态  #指定 location 实现反向代理}
}
nginx -s reload
测试:浏览器访问www.timinglee.org/index.php
1.缓存功能

缓存功能默认关闭状态,需要先动配置才能启用.

proxy_cache zone_name | off; 默认off #指明调用的缓存,或关闭缓存机制;Context:http, server, location #zone_name 表示缓存的名称.需要由proxy_cache_path事先定义.

proxy_cache_key string; #缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;

proxy_cache_valid [code ...] time; #定义对特定响应码的响应内容的缓存时长,定义在http{...}中示例: proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m.

#node2web访问并验证缓存文件
ab -n1000 -c100 http://www.timinglee.org/static/index.html-----------------------------------------------------------------------------
[root@nginx conf.d]# vim /usr/local/nginx/conf/nginx.conf
....
#gzip on;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g; #配置在nginx.conf http配置段
....
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/xiaozhuzhu.conf
server {listen 80;server_name www.timinglee.org;location ~ \.php$ {proxy_pass http://172.25.254.10:80;   }location /static {proxy_pass http://172.25.254.20:8080;proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 1m; #必须指定哪些响应码的缓存}
}
测试:
#/data/nginx/proxycache/ 目录会自动生成
[root@nginx conf.d]# ll /usr/local/nginx/proxy_cache/ -d
drwx------ 2 nginx root 6 Aug 19 00:08 /usr/local/nginx/proxy_cache/
[root@nginx conf.d]# tree /usr/local/nginx/proxy_cache/
/usr/local/nginx/proxy_cache/0 directories, 0 files
#访问并验证缓存文件
[root@node2 ~]# ab -n1000 -c100 http://www.timinglee.org/static/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking www.timinglee.org (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requestsServer Software:        nginx/1.26.1
Server Hostname:        www.timinglee.org
Server Port:            80Document Path:          /static/index.html
Document Length:        32 bytesConcurrency Level:      100
Time taken for tests:   0.262 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      283000 bytes
HTML transferred:       32000 bytes
Requests per second:    3815.91 [#/sec] (mean)
Time per request:       26.206 [ms] (mean)
Time per request:       0.262 [ms] (mean, across all concurrent requests)
Transfer rate:          1054.59 [Kbytes/sec] receivedConnection Times (ms)min  mean[+/-sd] median   max
Connect:        2   10   2.3     10      20
Processing:     6   14   4.5     14      28
Waiting:        4   11   3.9     11      23
Total:         13   24   4.4     24      36Percentage of the requests served within a certain time (ms)50%     2466%     2575%     2680%     2790%     3095%     3398%     3599%     35100%     36 (longest request)
[root@nginx conf.d]# tree /usr/local/nginx/proxy_cache/
/usr/local/nginx/proxy_cache/
└── e└── 50└── 99└── 319432ef3663735a9d3cb4e0c1d9950e3 directories, 1 file
2.http 反向代理负载均衡

在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器,而 且不能对后端服务器提供相应的服务器状态监测,Nginx 可以基于ngx_http_upstream_module模块提 供服务器分组转发、权重分配、状态监测、调度算法等高级功能。

#后端多台 web服务器
172.25.254.100 #Nginx 代理服务器
172.25.254.10 #后端web node1,Apache部署
172.25.254.20 #后端web node2,Apache部署
#部署后端 Apache服务器,前面已完成基础配置。
----------------172.25.254.10 #后端web node1,Apache部署------------------
[root@node1 ~]# vim /etc/hosts
....
172.25.254.100  www.timinglee.org
[root@node1 ~]# mkdir -p /var/www/html/static
[root@node1 ~]# echo static - 172.25.254.10 > /var/www/html/static/index.html
----------------172.25.254.20 #后端web node2,Apache部署------------------
[root@node1 ~]# vim /etc/hosts
....
172.25.254.100  www.timinglee.org--------------------------172.25.254.100=nginx部署-------------------------
#配置 nginx 反向代理
##注意: 本节实验过程中先关闭缓存
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/xiaozhuzhu.conf
upstream webcluster {#ip_hash;  #算法需要一个一个打开,测试多curl即可#hash $request_uri consistent;  # node1建了一个文件curl的时候加上/static/可以得到文件写的内容,不加就是node2的内容。#hash $cookie_lee;      #测试:curl -b "lee=1" www.timinglee.org;里面lee可以=1;2;3;4....server 172.25.254.10:80 weight=1 fail_timeout=15s max_fails=3; #在里面加入down关闭。server 172.25.254.20:8080 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.100:80 backup;   #测试算法时候需要注释掉
}
server {listen 80;server_name www.timinglee.org;location / {proxy_pass http://webcluster;}
}
[root@nginx conf.d]# nginx -s reload
测试:curl www.timinglee.org  #默认轮询

二.实现 Nginx 四层负载均衡

Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于 DNS的域名解析,其配置方式和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp 负载,另外基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、 调度算法等高级功能。 如果编译安装,需要指定 --with-stream 选项才能支持ngx_stream_proxy_module模块。

----------------172.25.254.10 #后端web node1,Apache部署------------------
[root@node1 ~]# dnf install bind -y
[root@node1 ~]# vim /etc/named.conf
....
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
...
//      allow-query     { localhost; };
....
dnssec-validation no;
...
[root@node1 ~]# vim /etc/named.rfc1912.zones
....
zone "timinglee.org" IN {type master;file "timinglee.org.zone";allow-update { none; };
};
....
[root@node1 ~]# cd /var/named/
[root@node1 named]# cp named.localhost timinglee.org.zone -p
[root@node1 named]# vim timinglee.org.zone
$TTL 1D
@       IN SOA  ns.timinglee.org. roor.timinglee.org. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns.timinglee.org.
ns      A       172.25.254.10
www     A       172.25.254.10
[root@node1 named]# systemctl restart named
[root@node1 named]# dig www.timinglee.org @172.25.254.10; <<>> DiG 9.16.23-RH <<>> www.timinglee.org @172.25.254.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9148
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 759e814dddf96a240100000066c22e333577155e2e826b88 (good)
;; QUESTION SECTION:
;www.timinglee.org.		IN	A;; ANSWER SECTION:
www.timinglee.org.	86400	IN	A	172.25.254.10;; Query time: 1 msec
;; SERVER: 172.25.254.10#53(172.25.254.10)
;; WHEN: Mon Aug 19 01:24:03 CST 2024
;; MSG SIZE  rcvd: 90[root@node1 named]# scp -p /etc/named.{conf,rfc1912.zones} root@172.25.254.20:/etc/
The authenticity of host '172.25.254.20 (172.25.254.20)' can't be established.
ED25519 key fingerprint is SHA256:oBPEX0nYpWQYjJ8OGpbvh+YBXeynOKk0hh0gq7trBAA.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.25.254.20' (ED25519) to the list of known hosts.
root@172.25.254.20's password: 
named.conf                                        100% 1727     1.3MB/s   00:00    
named.rfc1912.zones                               100% 1126   773.9KB/s   00:00    
[root@node1 named]# scp -p /var/named/timinglee.org.zone root@172.25.254.20:/var/named/timinglee.org.zone
root@172.25.254.20's password: 
timinglee.org.zone                                100%  205   293.2KB/s   00:00  
#下载mariadb
[root@node1 named]# dnf install mariadb-server -y
[root@node1 named]# vim /etc/my.cnf.d/mariadb-server.cnf
....
[mysqld]
server-id=10
[root@node1 named]# systemctl start mariadb
[root@node1 named]# mysql
MariaDB [(none)]> CREATE USER lee@'%' identified by 'lee';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]>  GRANT ALL ON *.* to lee@'%';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> quit
Bye----------------172.25.254.20 #后端web node2,Apache部署------------------
[root@node2 ~]# dnf install bind -y
[root@node2 ~]# ll /etc/named.conf
-rw-r----- 1 root named 1727 Aug 19 01:18 /etc/named.conf
[root@node2 ~]# ll /etc/named.rfc1912.zones
-rw-r----- 1 root named 1126 Aug 19 01:19 /etc/named.rfc1912.zones
[root@node2 ~]# vim /var/named/timinglee.org.zone
$TTL 1D
@       IN SOA  ns.timinglee.org. roor.timinglee.org. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns.timinglee.org.
ns      A       172.25.254.20
www     A       172.25.254.20
[root@node2 ~]# systemctl restart named
[root@node2 ~]# dig www.timinglee.org @172.25.254.20; <<>> DiG 9.16.23-RH <<>> www.timinglee.org @172.25.254.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 23248
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 777707da505dc8e70100000066c22f36c8fbd3ba8eb575b9 (good)
;; QUESTION SECTION:
;www.timinglee.org.		IN	A;; Query time: 0 msec
;; SERVER: 172.25.254.20#53(172.25.254.20)
;; WHEN: Mon Aug 19 01:28:22 CST 2024
;; MSG SIZE  rcvd: 74[root@node2 ~]# cd /var/named/
[root@node2 named]# chgrp named timinglee.org.zone
[root@node2 named]# systemctl restart named
[root@node2 named]# dig www.timinglee.org @172.25.254.20; <<>> DiG 9.16.23-RH <<>> www.timinglee.org @172.25.254.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54931
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 9639f0ef8cf919680100000066c22f591044e7e21725497c (good)
;; QUESTION SECTION:
;www.timinglee.org.		IN	A;; ANSWER SECTION:
www.timinglee.org.	86400	IN	A	172.25.254.20;; Query time: 0 msec
;; SERVER: 172.25.254.20#53(172.25.254.20)
;; WHEN: Mon Aug 19 01:28:57 CST 2024
;; MSG SIZE  rcvd: 90#下载mariadb
[root@node2 named]# dnf install mariadb-server -y
[root@node2 named]# vim /etc/my.cnf.d/mariadb-server.cnf
....
[mysqld]
server-id=20
....
[root@node2 named]# systemctl start mariadb
[root@node2 named]# mysql
MariaDB [(none)]> CREATE USER lee@'%' identified by 'lee';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> GRANT ALL ON *.* to lee@'%';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> quit
Bye
[root@node2 named]# netstat -antlupe | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      27         37998      2778/mariadbd --------------------------172.25.254.100=nginx部署-------------------------
#udp 负载均衡 DNS
[root@nginx conf.d]# vim /usr/local/nginx/conf/nginx.conf
...
events {worker_connections 1024;
}
include "/usr/local/nginx/tcpconf.d/*.conf";
....
[root@nginx conf.d]# nginx -s reload
[root@nginx conf.d]# mkdir -p /usr/local/nginx/tcpconf.d/
[root@nginx conf.d]# mv xiaozhuzhu.conf /usr/local/nginx/tcpconf.d/
[root@nginx conf.d]# cd /usr/local/nginx/tcpconf.d/
[root@nginx tcpconf.d]# ls
[root@nginx tcpconf.d]# vim /usr/local/nginx/tcpconf.d/xiaozhuzhu.conf
stream {upstream dns {server 172.25.254.10:53 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.20:53 weight=1 fail_timeout=15s max_fails=3;}server {listen 53 udp reuseport;proxy_timeout 20s;proxy_pass dns;}
}
[root@nginx tcpconf.d]# nginx -s reload测试:
[root@nginx tcpconf.d]# dig www.timinglee.org @172.25.254.100; <<>> DiG 9.16.23-RH <<>> www.timinglee.org @172.25.254.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39748
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a173604345bcaec00100000066c23297ebfde8bae3db2cdd (good)
;; QUESTION SECTION:
;www.timinglee.org.		IN	A;; ANSWER SECTION:
www.timinglee.org.	86400	IN	A	172.25.254.10;; Query time: 0 msec
;; SERVER: 172.25.254.100#53(172.25.254.100)
;; WHEN: Mon Aug 19 01:42:47 CST 2024
;; MSG SIZE  rcvd: 90[root@nginx tcpconf.d]# dig www.timinglee.org @172.25.254.100; <<>> DiG 9.16.23-RH <<>> www.timinglee.org @172.25.254.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7149
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8980c11b0de9e9880100000066c2329af7b0b1ffff4fe6f5 (good)
;; QUESTION SECTION:
;www.timinglee.org.		IN	A;; ANSWER SECTION:
www.timinglee.org.	86400	IN	A	172.25.254.20;; Query time: 15 msec
;; SERVER: 172.25.254.100#53(172.25.254.100)
;; WHEN: Mon Aug 19 01:42:50 CST 2024
;; MSG SIZE  rcvd: 90#负载均衡MySQL
[root@nginx tcpconf.d]# vim /usr/local/nginx/tcpconf.d/xiaozhuzhu.conf
stream {upstream dns {server 172.25.254.10:53 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.20:53 weight=1 fail_timeout=15s max_fails=3;}upstream mysql {server 172.25.254.10:3306 weight=1 fail_timeout=15s max_fails=3;server 172.25.254.20:3306 weight=1 fail_timeout=15s max_fails=3;}server {listen 3306;proxy_timeout 60s;proxy_pass mysql;}server {listen 53 udp reuseport;proxy_timeout 20s;proxy_pass dns;}
}
[root@nginx tcpconf.d]# nginx -s reload
[root@nginx tcpconf.d]# netstat -antlupe | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      0          39891      979/nginx: master p 
[root@nginx tcpconf.d]# dnf install mariadb -y测试:
[root@nginx tcpconf.d]# mysql -ulee -plee -h172.25.254.100 -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|          10 |
+-------------+
[root@nginx tcpconf.d]# mysql -ulee -plee -h172.25.254.100 -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|          20 |
+-------------+

三.实现 FastCGI

CGI的由来: 最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏 览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技 术,比如像php(1995年)、java(1995)、python(1991)语言开发的网站,但是nginx/apache服务器并不 能直接运行 php、java这样的文件,apache实现的方式是打补丁,nginx通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户的请求,处理完成后返回数据给Nginx并回收进程,最后nginx在返回给客户端,那这个约定就是通用网 关接口(common gateway interface,简称CGI),CGI(协议) 是web服务器和外部应用程序之间的接口 标准,是cgi程序和web服务器之间传递信息的标准化接口。

1.为什么会有FastCGI?

CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server 每收到一个请求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候 再关闭进程,对于每一个创建的CGI进程都会执行这些操作,所以效率很低,而FastCGI是用来提高CGI性 能的,FastCGI每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请 求。这样的话每个请求都不用再重新创建一个进程了,大大提升了处理效率。

2.什么是PHP-FPM?

PHP-FPM(FastCGI Process Manager: FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。 进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自web server 的请求 worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,进行PHP代码的处理。

3.FastCGI配置指令

Nginx基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处 理,其配置指令如下:

fastcgi_pass address:port;  \#转发请求到后端服务器,address为后端的fastcgi server的地址,可用位置:location, if in
location 
fastcgi_index name;   
#fastcgi默认的主页资源,示例:fastcgi_index index.php; fastcgi_param parameter value [if_not_empty]; 
#设置传递给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义 key 
fastcgi_param REMOTE_ADDR     $remote_addr; #客户端源IP 
fastcgi_param REMOTE_PORT     $remote_port; #客户端源端口  
fastcgi_param SERVER_ADDR      $server_addr; #请求的服务器IP地址 
fastcgi_param SERVER_PORT       $server_port; #请求的服务器端口 
fastcgi_param SERVER_NAME       $server_name; #请求的server name 
Nginx默认配置示例:
location ~ \.php$ { 
root /scripts; 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #默认脚本路径
#fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
include                fastcgi_params;      #此文件默认系统已提供,存放的相对路径为 prefix/conf
}
4.Nginx与php-fpm在同一服务器

阿里云下载图片:

#编译安装更方便自定义参数或选项,所以推荐大家使用源码编译 官方网站:www.php.net
---------------#源码编译nginx添加模块---------------
[root@nginx ~]# cd /usr/local
[root@nginx local]#rm -rf /nginx/  #删掉配置文件,重新源码安装。
nginx源码安装需要的模块
memc;srcache;echo
www.php.net官方网站下载新的软件包。
[root@Nginx ~]# cd nginx-1.26.1/
[root@Nginx nginx-1.26.1]# ./configure --prefix=/usr/local/nginx \
--user=nginx \ # 指定nginx运行用户
--group=nginx \ # 指定nginx运行组
--with-http_ssl_module \ # 支持https://
--with-http_v2_module \ # 支持http版本2
--with-http_realip_module \ # 支持ip透传
--with-http_stub_status_module \ # 支持状态页面
--with-http_gzip_static_module \ # 支持压缩
--with-pcre \ # 支持正则
--with-stream \ # 支持tcp反向代理
--with-stream_ssl_module \ # 支持tcp的ssl加密
--with-stream_realip_module \ # 支持tcp的透传ip
--add-module=/root/memc-nginx-module-0.20 \
--add-module=/root/srcache-nginx-module-0.33 \
--add-module=/root/echo-nginx-module-0.63 \[root@nginx ~]# make && make install---------------------#源码编译php-----------------[root@nginx ~]# tar zxf php-8.3.9.tar.gz
[root@nginx ~]# cd php-8.3.9
[root@nginx php-8.3.9]# ./configure \ 
--prefix=/usr/local/php \ #安装路径 
--with-config-file-path=/usr/local/php/etc \ #指定配置路径 
--enable-fpm \ #用cgi方式启动程序 
--with-fpm-user=nginx \ #指定运行用户身份 
--with-fpm-group=nginx \ 
--with-curl \ #打开curl浏览器支持 
--with-iconv \ #启用iconv函数,转换字符编码 
--with-mhash \ #mhash加密方式扩展库 
--with-zlib \ #支持zlib库,用于压缩http压缩传输 
--with-openssl \ #支持ssl加密 
--enable-mysqlnd \ #mysql数据库 
--with-mysqli \
--with-pdo-mysql \ 
--disable-debug \ #关闭debug功能 
--enable-sockets \ #支持套接字访问 
--enable-soap \ #支持soap扩展协议 
--enable-xml \ #支持xml 
--enable-ftp \ #支持ftp 
--enable-gd \ #支持gd库 
--enable-exif \ #支持图片元数据 
--enable-mbstring \ #支持多字节字符串
--enable-bcmath \ #打开图片大小调整,用到zabbix监控的时候用到了这个模块 
--with-fpm-systemd #支持systemctl 管理cgi[root@nginx php-8.3.9]# dnf install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel -y
oniguruma-devel下载的版本不一致无法适配。在阿里云镜像站下载对应的版本。dnf  list oniguruma-devel查看版本。
阿里云https://developer.aliyun.com/mirror下载https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/kickstart/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
[root@nginx php-8.3.9]# make && make install
如果报错出现没有指定目标就重新./configure一下。------------------php相关配置优化---------------
[root@nginx etc]# cd /usr/local/php/etc
[root@nginx etc]# ls
php-fpm.conf  php-fpm.conf.default  php-fpm.d  php.ini
[root@nginx etc]# cp -p php-fpm.conf.default php-fpm.conf
[root@nginx etc]# vim php-fpm.conf
...
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = run/php-fpm.pid
...
[root@nginx etc]# cd php-fpm.d/
[root@nginx php-fpm.d]# 
cp www.conf.default www.conf -p[root@nginx php-fpm.d]# 
cd /root/php-8.3.9/
[root@nginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini
[root@nginx php-8.3.9]# vim /usr/local/php/etc/php.ini[Date] ; Defines the default timezone used by the date functions ; https://php.net/date.timezone date.timezone = Asia/Shanghai #修改时区---------------------#生成启动文件------------------
[root@Nginx ~]# cd  /root/php-8.3.9/
[root@Nginx php-8.3.9]# cp sapi/fpm/php-fpm.service /lib/systemd/system/ 
[root@nginx php-8.3.9]# vim /lib/systemd/system/php-fpm.service
....
#Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit. 
#ProtectSystem=full #注释该内容 
.....
[root@Nginx php-8.3.9]# systemctl start php-fpm.service 
[root@Nginx php-8.3.9]# netstat -antlupe | grep php tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 0 820758 176202/php-fpm: mas
5.Nginx配置转发
[root@nginx ~]# mkdir /data/web/php -p
[root@nginx conf.d]# vim ~/.bash_profile
...
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/php/sbin
source ~/.bash_profile
[root@nginx conf.d]# cat /data/web/php/index.php #php测试页面
<?phpphpinfo();
?>
[root@nginx conf.d]# vim /usr/local/nginx/conf/nginx.conf
....
#gzip  on;   #在http模块里面添加
include "/usr/local/nginx/conf.d/*.conf";
....
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/vhost.conf
server {listen 80;server_name www.timinglee.org;root /data/web/html;index index.html;location ~ \.php$ {root /data/web/php;fastcgi_pass 172.25.254.100:9000;fastcgi_index index.php;include fastcgi.conf;}
}
[root@nginx conf.d]# nginx -s reload
[root@nginx conf.d]# vim /usr/local/php/etc/php-fpm.d/www.conf
....
listen = 0.0.0.0:90000
....
[root@nginx conf.d]# systemctl restart php
测试:
访问www.timinglee.org/index.php
6. php的动态扩展模块(php的缓存模块)

软件下载:PECL :: Package :: memcache

[root@nginx ~]# tar zxf memcache-8.2.tgz
[root@nginx ~]# cd memcache-8.2/
[root@nginx memcache-8.2]# yum install autoconf 
phpize
[root@nginx memcache-8.2]# ./configure && make && make install
...
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20230831/
[root@Nginx memcache-8.2]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20230831/
memcache.so opcache.so
[root@nginx memcache-8.2]# systemctl restart php-fpm.service#复制测试文件到nginx发布目录中
[root@Nginx ~]# cd memcache-8.2/
[root@nginx memcache-8.2]# ls
[root@nginx memcache-8.2]# cp example.php memcache.php /data/web/php/
[root@Nginx ~]# vim /data/web/php/memcache.php
.....
define('ADMIN_USERNAME','admin'); // Admin Username
define('ADMIN_PASSWORD','lee'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array#配置php加载memcache模块
[root@Nginx ~]# vim /usr/local/php/etc/php.ini
....
;extension=zip
extension=memcache
;zend_extension=opcache
....
[root@Nginx ~]# systemctl reload php-fpm.service
[root@Nginx no-debug-non-zts-20230831]# php -m | grep mem
memcache#部署memcached
[root@Nginx ~]# yum install memcached -y
[root@Nginx ~]# systemctl enable --now memcached.service
[root@nginx ~]# netstat -antlupe | grep memcache
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      977        158415     145205/memcached    
tcp6       0      0 ::1:11211               :::*                    LISTEN      977        158416     145205/memcached 
[root@Nginx ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1"
[root@Nginx ~]# systemctl restart memcached.service测试:
访问 http://www.timinglee.org/example.php 不断刷新
访问 http://www.timinglee.org/memcache.php 查看命中效果.
[root@nginx ~]# ab -n1000 -c100 http://www.timinglee.org/index.php
bash: ab: command not found...
Install package 'httpd-tools' to provide command 'ab'? [N/y] y* Waiting in queue... * Loading list of packages.... 
The following packages have to be installed:apr-1.7.0-11.el9.x86_64	Apache Portable Runtime libraryapr-util-1.6.1-20.el9.x86_64	Apache Portable Runtime Utility libraryapr-util-bdb-1.6.1-20.el9.x86_64	APR utility library Berkeley DB driverapr-util-openssl-1.6.1-20.el9.x86_64	APR utility library OpenSSL crypto supporthttpd-tools-2.4.51-7.el9_0.x86_64	Tools for use with the Apache HTTP Server
Proceed with changes? [N/y] y* Waiting in queue... * Waiting for authentication... * Waiting in queue... * Loading list of packages.... * Requesting data... * Testing changes... * Installing packages... Failed to install packages: PackageKit daemon disappeared

 访问图片:

7.php高速缓存

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
upstream memcache {server 127.0.0.1:11211;keepalive 512;
}
server {listen 80;server_name www.timinglee.org;root /data/web/html;index index.html;location /memc {internal;memc_connect_timeout 100ms;memc_send_timeout 100ms;memc_read_timeout 100ms;set $memc_key $query_string; #使用内置变量$query_string来作为keyset $memc_exptime 300; #缓存失效时间300秒memc_pass memcache;}location ~ \.php$ {root /data/web/php;set $key $uri$args; #设定key的值srcache_fetch GET /memc $key; #检测mem中是否有要访问的phpsrcache_store PUT /memc $key; #缓存为加载的php数据fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;}
}
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# nginx -s reload
测试:
[root@nginx ~]# ab -n1000 -c100 http://www.timinglee.org/index.php
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking www.timinglee.org (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requestsServer Software:        nginx/1.26.1
Server Hostname:        www.timinglee.org
Server Port:            80Document Path:          /index.php
Document Length:        74914 bytesConcurrency Level:      100
Time taken for tests:   0.285 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      75098993 bytes
HTML transferred:       74914000 bytes
Requests per second:    3511.10 [#/sec] (mean)
Time per request:       28.481 [ms] (mean)
Time per request:       0.285 [ms] (mean, across all concurrent requests)
Transfer rate:          257500.10 [Kbytes/sec] receivedConnection Times (ms)min  mean[+/-sd] median   max
Connect:        0    1   2.1      0      13
Processing:     1   26  23.2     18     133
Waiting:        1   26  22.8     18     123
Total:          1   26  23.4     20     133Percentage of the requests served within a certain time (ms)50%     2066%     3075%     3680%     4290%     5695%     7898%     9999%    104100%    133 (longest request)

四.nginx 二次开发版本:编译安装 openresty

Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM 嵌入到 Nginx 中, 实现了 OpenResty 这个高性能服务端解决方案 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方 模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服 务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言 调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高 性能 Web 应用系统。 OpenResty 由于有功能强大且方便的的API,可扩展性更强,如果需要实现定制功能,OpenResty是个不错的选择。

官网: OpenResty® - 开源官方站

[root@nginx ~]# systemctl stop nginx
[root@nginx ~]# netstat -antlulpe | grep nginx
[root@nginx ~]# killall -9 nginx    #如果关不了,就杀掉。
[root@nginx ~]# ps -ef |grep nginx
avahi        878       1  0 Aug19 ?        00:00:00 avahi-daemon: running [nginx-2.local]
nginx     144832  144812  0 Aug19 ?        00:00:00 php-fpm: pool www
nginx     144833  144812  0 Aug19 ?        00:00:00 php-fpm: pool www
root      145516  145480  0 00:36 pts/0    00:00:00 grep --color=auto nginx
[root@nginx ~]# dnf -y install gcc pcre-devel openssl-devel perl
[root@nginx ~]# tar zxf openresty-1.25.3.1
[root@nginx ~]# cd openresty-1.25.3.1/
[root@nginx openresty-1.25.3.1]# ./configure \
--prefix=/usr/local/openresty \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--without-http_memcached_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
....
cd ../..
Type the following commands to build and install:gmakegmake install
[root@nginx openresty-1.25.3.1]# gmake -j2 && gmake install
....
gmake[2]: Leaving directory '/root/openresty-1.25.3.1/build/nginx-1.25.3'
gmake[1]: Leaving directory '/root/openresty-1.25.3.1/build/nginx-1.25.3'
mkdir -p /usr/local/openresty/site/lualib /usr/local/openresty/site/pod /usr/local/openresty/site/manifest
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/bin/openresty
[root@nginx openresty-1.25.3.1]# cd /usr/local/openresty/
[root@nginx openresty]# ls
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site
[root@nginx openresty]# cd bin/
[root@nginx bin]# ll
total 168
-rwxr-xr-x 1 root root 19185 Aug 20 00:52 md2pod.pl
-rwxr-xr-x 1 root root 15994 Aug 20 00:52 nginx-xml2pod
lrwxrwxrwx 1 root root    37 Aug 20 00:52 openresty -> /usr/local/openresty/nginx/sbin/nginx
-rwxr-xr-x 1 root root 63650 Aug 20 00:52 opm
-rwxr-xr-x 1 root root 36881 Aug 20 00:52 resty
-rwxr-xr-x 1 root root 14957 Aug 20 00:52 restydoc
-rwxr-xr-x 1 root root  8873 Aug 20 00:52 restydoc-index
[root@nginx bin]# vim ~/.bash_
.bash_history  .bash_logout   .bash_profile  
[root@nginx bin]# vim ~/.bash_profile 
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/php/sbin:/usr/local/openresty/bin
[root@nginx bin]# source ~/.bash_profile 
[root@nginx bin]# openresty 
[root@nginx bin]# netstat -antlulpe | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          180114     159771/nginx: maste 
tcp6       0      0 ::1:631                 :::*                    LISTEN      0          22780      910/cupsd   
测试:
浏览器访问172.25.254.100有openresty专属界面。

访问图片:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索全光网技术 | 全光网相关厂商的产品解决方案整理 (锐捷系列)

全光网产品解决方案整理-锐捷系列 目录 一、教学场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 二、办公场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 三、宿舍场景1、方案概述2、方案需求3、实践案例4、相关产品5、方案价值 注&#xff1a;本…

你的显卡能不能玩《黑神话:悟空》?

《黑神话&#xff1a;悟空》作为一款备受瞩目的国产单机大作&#xff0c;其对显卡和整体硬件配置的需求较高。根据官方公布的信息&#xff0c;游戏的推荐配置包括GeForce RTX 40系列GPU&#xff0c;以确保在2K或4K分辨率下能够享受到60FPS的全景光追游戏体验。特别是GeForce RT…

2024年新SCI顶刊算法信息获取优化算法IAO优化Transformer-GRU模型的多变量时间序列预测

matlab R2024a以上 一、数据集 ​ ​ 二、2024年新SCI顶刊算法信息获取优化算法IAO 本期介绍了一种名为信息获取优化算法Information acquisition optimizer&#xff0c;IAO的元启发式算法。该算法受人类信息获取行为的启发&#xff0c;由信息收集、信息过滤和评估以及信息分…

C#中客户端直接引用服务端Proto文件

gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项&#xff0c;然后继续 到此配置完成&#xff0c;然后就和服务共用一份protocol文件

图像生成模型基础——Stable Diffusion模型介绍

随着人工智能技术的飞速发展&#xff0c;图像生成技术也取得了显著进步。扩散模型&#xff08;Stable Diffusion&#xff09;因其高效性和稳定性而得到广泛关注&#xff0c;目前的大多数生成模型都是以扩散模型为基础进行改进得到。首先简单介绍一下传统人工智能模型和生成模型…

request.getRequestURI()与request.getRequestURL()的区别

1.返回值的区别&#xff1a; request.getRequestURL() 返回值是一个StringBuffer类型 request.getRequestURI() 返回值是一个String类型 先看 request.getRequestURL() 返回的是一个具体的地址&#xff0c;访问网页的地址 而 request.getRequestURI() 返回的是一个映射地址&a…

VM Ubuntu22.04 ROS2 从头安装

目录 前言安装步骤1 设置编码2 添加ROS2软件源&#xff08;从哪去下载ros2相关软件&#xff09;报错解决方法 3 安装报错解决方法1解决方法2 报错 4 设置环境变量5 Ros2 测试Hello World 发送和监听小海龟键盘控制 成功 Hello World 发送和监听界面成功控制小海龟界面 前言 本…

【java】RuoYiBootstrap多模块版本-新写的接口,用接口工具访问,状态码302,访问不到。打的断点也进不去。其实是Shiro拦截器搞的鬼

【java】RuoYiBootstrap多模块版本-新写的接口&#xff0c;用接口工具访问&#xff0c;状态码302&#xff0c;访问不到。打的断点也进不去 你如果着急&#xff0c;可以直接看《ShiroConfig.java文件源码-过滤器配置-重点代码》 重点 状态码&#xff1a;302访问不到断点进不去 …

FileNotFoundException: XXX (系统找不到指定的文件。)

目录 问题描述 问题分析 问题总结 问题描述 idea引入文件&#xff0c;系统去读取&#xff0c;但是路径的问题报错系统找不到指定文件 String filePath "test.txt"; try {FileInputStream fileInputStream new FileInputStream(filePath); } catch (FileNotFou…

信息搜集--敏感文件Banner

免责声明:本文仅做分享参考... 目录 git安装: git目录结构: 敏感目录泄露 1-git泄露 (1)常规git泄露 scrabble工具 (2)git回滚 (3)git分支 GitHacker工具 (4)git泄露的其他利用 .git重定向问题 2-SVN泄露 dvcs-ripper工具 3-小结 dirsearch目录扫描工具 敏感备…

MySQL修改表属性

一、修改表名 ① 使用DDL语句修改表名 ALTER TABLE 旧表名 RENAME 新表名; ② 使用Navicat修改表名 二、修改列 2.1 修改列名 ① 使用DDL语句修改列名 ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型; ② 使用Navicat修改列名 2.2 修改列类型 ① 使用DDL语句修改列类…

C++实现多线程三窗口卖票程序

假设我们有100张门票&#xff0c;有三个售卖窗口&#xff0c;我们希望以多线程的方式将这些票卖出去&#xff0c;这样效率会更高一些。 首先我们需要有一个全局的门票变量。 int tickts 100; 卖票的函数&#xff0c;由于每个窗口卖出一张票都需要花费一些时间&#xff0c;假设…

springboot的启动流程原理

一:入口简介: 首先,分析启动流程,就要 找到入口. 启动流程的入口方法就是这个run方法: 点进去之后就是这样: 主要分为了两个步骤: 1.创建springBootApplication对象 2.运行SpringApplication#run(java.lang.String...)方法; 上面说了主要分为两个步骤,那么接下…

day02-JavaScript-Vue

1 JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过代码/js效果演示提供资料进行效果演…

PCIE-TS1/TS2,变量总结

1.标准TS1/TS2 2.EQ TS1/TS2 3.Modified TS1/TS2 Modified TS1/TS2 是什么&#xff1f;Modify了什么&#xff1f;为什么要Modify&#xff1f;非 PCIe 协议运行在 PCIe PHY 上或发送 TS Message 时&#xff0c;在 LTSSM 部分子状态采用 Modified TS1/TS2。允许发送 Modified …

6.画面渲染及背景-《篮球比赛展示管理系统》现场管理员角色操作手册

通过[特效实验室]及[更换背景] 对整个展示界面的底部图层进行动画渲染。此功能是平台的一大特色。一般用在选手上场或颁奖等。用户可以根据现场情况&#xff0c;妥善发挥。背景图片及其特效&#xff0c;应该在比赛之前设置好。

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…

遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题

遗传算法与深度学习实战&#xff08;7&#xff09;——使用遗传算法解决N皇后问题 0. 前言1. N 皇后问题2. 解的表示3. 遗传算法解决 N 皇后问题小结系列链接 0. 前言 进化算法 (Evolutionary Algorithm, EA) 和遗传算法 (Genetic Algorithms, GA) 已成功解决了许多复杂的设计…

GitHub的未来:在微软领导下保持独立与AI发展的平衡

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

20240821 每日AI必读资讯

&#x1f3ae;《黑神话&#xff1a;悟空》震撼上线&#xff0c;英伟达AI技术立功&#xff01; - 中国游戏史上的奇迹&#xff1a;《黑神话&#xff1a;悟空》预售销售额达3.9亿元&#xff0c;刷新国产游戏预售纪录。 - 游戏美学效果惊人&#xff1a;孙悟空形象深入人心&#…