高性能web服务器--nginx

下载nginx 

[root@nginx ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz
[root@nginx ~]# tar zxf nginx-1.24.0.tar.gz创建nginx用户
[root@nginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx

 先安装依赖

dnf install gcc pcre-devel zlib-devel openssl-devel -y
[root@nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

注意:如果没有提前安装依赖,会报以下错误

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

   

可以先一个个  dnf install pcre-devel -y

安装编译

 make && make install
[root@nginx nginx-1.24.0]# ll
total 820
drwxr-xr-x 6 nginx nginx   4096 Aug 15 10:56 auto
-rw-r--r-- 1 nginx nginx 323312 Apr 11  2023 CHANGES
-rw-r--r-- 1 nginx nginx 494234 Apr 11  2023 CHANGES.ru
drwxr-xr-x 2 nginx nginx    168 Aug 15 10:56 conf
-rwxr-xr-x 1 nginx nginx   2611 Apr 11  2023 configure
drwxr-xr-x 4 nginx nginx     72 Aug 15 10:56 contrib
drwxr-xr-x 2 nginx nginx     40 Aug 15 10:56 html
-rw-r--r-- 1 nginx nginx   1397 Apr 11  2023 LICENSE
-rw-r--r-- 1 root  root     438 Aug 15 11:02 Makefile
drwxr-xr-x 2 nginx nginx     21 Aug 15 10:56 man
drwxr-xr-x 3 root  root     174 Aug 15 11:03 objs
-rw-r--r-- 1 nginx nginx     49 Apr 11  2023 README
drwxr-xr-x 9 nginx nginx     91 Aug 15 10:56 src
[root@nginx nginx-1.24.0]# cd objs/
[root@nginx objs]# ls
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
[root@nginx objs]# nginx
bash: nginx: command not found...
Install package 'nginx-core' to provide command 'nginx'? [N/y] n# 启动nginx
[root@nginx objs]# ./nginx[root@nginx objs]# ps aux | grep nginx
root       42828  0.0  0.0   9836   928 ?        Ss   11:39   0:00 nginx: master process ./nginx
nginx      42829  0.0  0.1  13724  4844 ?        S    11:39   0:00 nginx: worker process
root       42834  0.0  0.0 221664  2168 pts/0    S+   11:40   0:00 grep --color=auto nginx

关闭nginx

[root@nginx objs]# /usr/local/nginx/sbin/nginx -s stop
[root@nginx objs]# ps aux | grep nginx
root       42837  0.0  0.0 221664  2352 pts/0    S+   11:41   0:00 grep --color=auto nginx

删除nginx

[root@nginx objs]# rm -rf /usr/local/nginx/
[root@nginx objs]# make clean

不启用debug模块

[root@nginx nginx-1.24.0]# vim auto/cc/gcc

nginx软件的执行路径添加到环境变量中

[root@nginx ~]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin
[root@nginx ~]# source ~/.bash_profile
[root@nginx ~]# nginx

看nginx软件的大小

[root@nginx ~]# du -sh /usr/local/nginx/sbin/nginx
5.5M    /usr/local/nginx/sbin/nginx

 改变服务版本信息

[root@nginx ~]# cd /usr/local/nginx/conf/
[root@nginx conf]# vim nginx.conf
[root@nginx conf]# curl -I 192.168.136.100
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Thu, 15 Aug 2024 03:52:15 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 15 Aug 2024 03:03:35 GMT
Connection: keep-alive
ETag: "66bd7007-267"
Accept-Ranges: bytes

平滑升级和平滑回滚  

下载高版本的

将echo-nginx-module-0.63.tar.gz  上传到本地家目录下

开始编译新版本

[root@nginx nginx-1.26.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx  --add-module=/root/echo-nginx-module-0.63 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

只要make无需要make install

[root@nginx nginx-1.26.2]# make

查看两个版本

[root@nginx nginx-1.26.2]# ll objs/nginx /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 root root 6177456 Aug 15 13:06 objs/nginx
-rwxr-xr-x 1 root root 5679504 Aug 15 11:03 /usr/local/nginx/sbin/nginx

把之前的旧版的nginx命令备份

[root@nginx nginx-1.26.2]# cd /usr/local/nginx/sbin/
[root@nginx sbin]# ll
total 5548
-rwxr-xr-x 1 root root 5679504 Aug 15 11:03 nginx
[root@nginx sbin]# mv nginx nginx.old

把新版本的nginx命令复制过去

[root@nginx sbin]# \cp -f /root/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/

检测一下有没有问题

[root@nginx sbin]# 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 sbin]# nginx -s restart
[root@nginx sbin]# nginx
[root@nginx sbin]# ps aux | grep nginx
root       47861  0.0  0.0   9836   932 ?        Ss   13:48   0:00 nginx: master process nginx
nginx      47862  0.0  0.1  13724  4816 ?        S    13:48   0:00 nginx: worker process
root       47864  0.0  0.0 221664  2272 pts/0    S+   13:48   0:00 grep --color=auto nginx[root@nginx sbin]# kill -USR2 47861
[root@nginx sbin]# ps aux | grep nginx
root       47861  0.0  0.0   9836  3196 ?        Ss   13:48   0:00 nginx: master process nginx
nginx      47932  0.0  0.1  13736  4956 ?        S    14:05   0:00 nginx: worker process
root       47939  0.0  0.1   9872  5952 ?        S    14:06   0:00 nginx: master process nginx
nginx      47940  0.0  0.1  13760  4736 ?        S    14:06   0:00 nginx: worker process
root       47942  0.0  0.0 221664  2256 pts/0    S+   14:06   0:00 grep --color=auto nginx#回收旧版本
[root@nginx sbin]# kill -WINCH 47861#检测版本信息
[root@nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.26.2
Date: Thu, 15 Aug 2024 06:07:15 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 15 Aug 2024 03:03:35 GMT
Connection: keep-alive
ETag: "66bd7007-267"
Accept-Ranges: bytes#平滑回滚
[root@nginx sbin]# kill -HUP 47861

隐藏

[root@nginx nginx]# vim /root/nginx-1.26.2/src/core/nginx.h

Nginx 核心配置详解 

[root@nginx conf]# vim nginx.conf

[root@nginx conf]# nginx -g "worker_processes 6;"
[root@nginx conf]# ps aux | grep nginx
root       48272  0.0  0.0   9872   940 ?        Ss   16:10   0:00 nginx: master process nginx -g worker_processes 6;
nginx      48273  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
nginx      48274  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
nginx      48275  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
nginx      48276  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
nginx      48277  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
nginx      48278  0.0  0.1  13772  4864 ?        S    16:10   0:00 nginx: worker process
root       48280  0.0  0.0 221664  2328 pts/0    S+   16:10   0:00 grep --color=auto nginx

写启动文件

[root@nginx conf]# vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target[root@nginx conf]# systemctl daemon-reload
[root@nginx conf]# nginx -s stop
[root@nginx conf]# ps aux | grep nginx
root       48382  0.0  0.0 221664  2268 pts/0    S+   16:19   0:00 grep --color=auto nginx
[root@nginx conf]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@nginx conf]# ps aux | grep nginx
root       48411  0.0  0.0   9872   944 ?        Ss   16:20   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      48412  0.0  0.1  13772  4824 ?        S    16:20   0:00 nginx: worker process
root       48414  0.0  0.0 221664  2196 pts/0    S+   16:20   0:00 grep --color=auto nginx

将Nginx工作进程绑定到指定的CPU核心

worker_cpu_affinity   将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进 程独占以一核心CPU,但是可以保证此进程不运行在其他核心上,这就极大减少了nginx的工作进程在不同的 cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务 器的性能。

user nginx;  #启动Nginx工作进程的用户
worker_processes 4;  #启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_cpu_affinity 0001 0010 0100 1000;  
[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

实现 nginx 的高并发配置

修改pam限制 

查看ulimit
[root@nginx conf]# sudo -u nginx ulimit -n
1024
[root@nginx conf]# vim /etc/security/limits.conf

设置单个工作进程的最大并发连接数

测试访问 

[root@nginx conf]# ab -n 100 -c 50 http://192.168.136.100/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 192.168.136.100 (be patient).....doneServer Software:        nginx/1.26.2
Server Hostname:        192.168.136.100
Server Port:            80Document Path:          /index.html
Document Length:        615 bytesConcurrency Level:      50
Time taken for tests:   0.006 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      84800 bytes
HTML transferred:       61500 bytes
Requests per second:    15444.02 [#/sec] (mean)
Time per request:       3.237 [ms] (mean)
Time per request:       0.065 [ms] (mean, across all concurrent requests)
Transfer rate:          12789.58 [Kbytes/sec] receivedConnection Times (ms)min  mean[+/-sd] median   max
Connect:        0    1   0.4      1       2
Processing:     0    1   1.0      1       4
Waiting:        0    1   1.1      1       4
Total:          1    2   1.3      2       5Percentage of the requests served within a certain time (ms)50%      266%      275%      280%      290%      595%      598%      599%      5100%      5 (longest request)

新建一个 PC web 站点

配置子配置文件(可选),在主配置文件添加一行

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

[root@nginx ~]# mkdir -p /usr/local/nginx/conf.d
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
server {listen 80;server_name www.jieyu.org;root /data/web/html;index index.html;
}[root@nginx ~]# mkdir -p /data/web/html
[root@nginx ~]# echo www.jieyu.org > /data/web/html/index.html
[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
^C
[root@nginx ~]# nginx -s reload

 修改C:\Windows\System32\drivers\etc\hosts    添加以下解析 
192.168.136.100 www.jieyu.org

测试访问

root 与 alias

 root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location     

 root示例:

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
server {listen 80;server_name www.jieyu.org;root /data/web/html;index index.html;location /test1 {root /data/web;}
}[root@nginx ~]# mkdir -p /data/web/test1
[root@nginx ~]# echo /data/web/test1 > /data/web/test1/index.html
[root@nginx ~]# nginx -s reload

测试 

alias:定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于 location上下文,此指令使用较少

server {listen 80;server_name www.jieyu.org;root /data/web/html;index index.html;location /test1 {root /data/web;}location /test2 {alias /data/web/test1;}
}

location 的详细使用

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;

ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配, 而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最 高的一个uri uri是用户请求的字符串,即域名后面的web文件路径 然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理 此请求。

匹配以html或者yu结尾

location ~ .(html|yu)$ {root /data/web1;   
}
[root@nginx test]# pwd
/data/web1/test

 

[root@nginx web]# mkdir -p /data/web{1..5}/test
[root@nginx web]# echo web1 > /data/web1/test/index.html
[root@nginx web]# echo web2 > /data/web2/test/index.html
[root@nginx web]# echo web3 > /data/web3/test/index.html
[root@nginx web]# echo web4 > /data/web4/test/index.html
[root@nginx web]# echo web5 > /data/web5/test/index.html

文件和目录的优先级不一样

 

创建默认认证文件 

[root@nginx ~]# htpasswd -cm /usr/local/nginx/.htpasswd yujie  # -c 会覆盖之前的用户
New password:
Re-type new password:
Adding password for user yujie[root@nginx ~]# htpasswd -m /usr/local/nginx/.htpasswd admin  [root@nginx ~]# cat /usr/local/nginx/.htpasswd
yujie:$apr1$lqNM/m0v$1E.lLVqwHTc8Ji6UWNfJL.
admin:$apr1$OaJ1Hrgx$kRH2x6iOMt.DN97QrgQYd0[root@nginx ~]# mkdir /data/web/yu
[root@nginx ~]# echo yu > /data/web/yu/index.html

加用户认证

server {listen 80;server_name www.jieyu.org;root /data/web/html;index index.html;location /yu {root /data/web;auth_basic "login password !!";auth_basic_user_file "/usr/local/nginx/.htpasswd";}
}

用户认证 

自定义错误页 

server {listen 80;server_name  www.jieyu.org;root /data/web/html;index index.html;error_page 404 /40x.html;location /yu {root /data/web;auth_basic "login password !!";auth_basic_user_file "/usr/local/nginx/.htpasswd";}location = /40x.html {root /data/web/errorpage;}
}
[root@nginx ~]# mkdir -p /data/web/errorpage
[root@nginx ~]# echo error page > /data/web/errorpage/40x.html
[root@nginx ~]# nginx -s reload

自定义错误日志与访问日志

[root@nginx ~]# mkdir /var/log/jieyu.org/
[root@nginx ~]# nginx -s reload

 

[root@nginx ~]# cat /var/log/jieyu.org/access.log
192.168.136.1 - admin [16/Aug/2024:14:33:02 +0800] "GET /yu/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"

 

[root@nginx ~]# cat /var/log/jieyu.org/error.log
2024/08/16 14:34:13 [error] 2019#0: *19 open() "/data/web/yua" failed (2: No such file or directory), client: 192.168.136.1, server: www.jieyu.org, request: "GET /yua HTTP/1.1", host: "www.jieyu.org"

检测文件是否存在

try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一 个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。

示例: 如果不存在页面, 就转到default.html页面

[root@nginx ~]# rm -rf /data/web/html/index.html
[root@nginx ~]# mkdir /data/web/html/error
[root@nginx ~]# echo error default > /data/web/html/error/default.html

长连接配置

长连接的测试工具

[root@nginx ~]# dnf install telnet -y

设定保持连接超时时长,0表示禁止长连接

让客户看到60s  实际65s

作为下载服务器配置

[root@nginx ~]# mkdir /data/web/download
[root@nginx ~]# dd if=/dev/zero of=/data/web/download/yufile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0395786 s, 2.6 GB/s

测试 

nginx的状态页面

server {listen 80;server_name status.jieyu.org;root /data/web/html;index index.html;location /status {stub_status;allow 192.168.136.1;   #指定让谁看deny all;}
}

更改 C:\Windows\System32\drivers\etc\hosts  文件

192.168.136.100 status.jieyu.org 

因为指定了让192.168.136.1看   所以只能浏览器看

Nginx 压缩功能

Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资源。

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.confgzip  on;                 #启用或禁用gzip压缩,默认关闭gzip_comp_level 4;        #压缩比由低到高从1到9,默认为1,值越高压缩后文件越小gzip_min_length 1k;       #gzip压缩的最小文件,小于设置值的文件将不会压缩gzip_http_version 1.1;    #启用压缩功能时,协议的最小版本,默认HTTP/1.1gzip_vary on;     #如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/gif image/png;     #指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,

制作大文件,小文件 


[root@nginx ~]# echo hello jieyu > /data/web/html/small.html
[root@nginx ~]# du -sh /usr/local/nginx/logs/access.log
24K     /usr/local/nginx/logs/access.log
[root@nginx ~]# cat /usr/local/nginx/logs/access.log > /data/web/html/big.html

Nginx Rewrite 相关功能 

[root@nginx ~]# vim /etc/hosts
192.168.136.100 vars.jieyu.org
server {listen 80;server_name var.jieyu.org;root /data/web/html;index index.html;location /var {default_type text/html;echo $remote_addr;echo $args;echo $is_args;echo $document_root;echo $document_uri;echo $host;echo $remote_port;echo $remote_user;echo $request_method;echo $request_filename;echo $request_uri;echo $scheme;echo $server_protocol;echo $server_addr;echo $server_name;echo $server_port;echo $http_user_agent;echo $http_cookie;echo $cookie_key2;}
}

 测试:

[root@nginx ~]# curl -b "key1=yu,key2=yu1" -u yu:123 var.jieyu.org/var?name=lee&&id=6666
192.168.136.100
name=lee
?
/data/web/html
/var
var.jieyu.org
48482
yu
GET
/data/web/html/var
/var?name=lee
http
HTTP/1.1
192.168.136.100
var.jieyu.org
80
curl/7.76.1
key1=yu,key2=yu1
yu1

nginx自定义变量

server {listen 80;server_name var.jieyu.org;root /data/web/html;index index.html;location /var {default_type text/html;set $jieyu jie;echo $jieyu;}
}

测试

[root@nginx ~]#  curl var.jieyu.org/var
jie

if 判定指令 

测试文件是否存在

[root@nginx test2]# cat /usr/local/nginx/conf.d/yu.conf
server {listen 80;server_name var.jieyu.org;root /data/web/html;index index.html;location /test2 {if ( !-e $request_filename ) {echo "$request_filename is not exist";}}
}

 测试

#没文件
[root@nginx test2]# nginx -s reload
[root@nginx test2]# curl var.jieyu.org/test2/index.html
/data/web/html/test2/index.html is not exist#有文件
[root@nginx test2]# echo test2 > /data/web/html/test2/index.html
[root@nginx test2]# curl var.jieyu.org/test2/index.html
test2

break指令

location /break {default_type text/html;set $name yu;echo $name;if ( $http_user_agent = "curl/7.76.1" ){break;}set $id 666;echo $id;}

测试

[root@nginx test2]# nginx -s reload
[root@nginx test2]# curl var.jieyu.org/break
yu[root@nginx test2]# curl -A "firefox" var.jieyu.org/break
yu
666

return指令

location /return {default_type text/html;if ( !-e $request_filename){return 301 http://www.baidu.com;}echo "$request_filename is exist";}

测试 

[root@nginx test2]# nginx -s reload
[root@nginx test2]# curl -I var.jieyu.org/return
HTTP/1.1 301 Moved Permanently
Server: nginx/1.26.2
Date: Sun, 18 Aug 2024 03:55:35 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Keep-Alive: timeout=60
Location: http://www.baidu.com[root@nginx test2]# mkdir -p /data/web/html/return
[root@nginx test2]# curl -I var.jieyu.org/return
HTTP/1.1 200 OK
Server: nginx/1.26.2
Date: Sun, 18 Aug 2024 03:56:26 GMT
Content-Type: text/html
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding

 rewrite  临时和永久

永久重定向301:域名永久型调整,即域名永远跳转至另外一个新的域名,之前的域名再也不使用,跳转记录可以缓存到客户端浏览器

永久重定向会缓存DNS解析记录, 浏览器中有 from disk cache 信息,即使nginx服务器无法访问,浏览器也会利用缓存进行重定向

location /rewrite {root /data/web/var;index index.html;rewrite / http://www.jieyu.com permanent;}

测试

临时重定向302:域名临时重定向,告诉浏览器域名不是固定重定向到当前目标域名,后期可能随时会更改,因此浏览器 不会缓存当前域名的解析记录,而浏览器会缓存永久重定向的DNS解析记录,这也是临时重定向与永久重定向最大的本质区别。

即当nginx服务器无法访问时,浏览器不能利用缓存,而导致重定向失败 

location /rewrite {root /data/web/var;index index.html;rewrite / http://www.jieyu.com redirect;}

 测试

rewrite 案例: break 与 last

创建html文件

[root@nginx ~]# mkdir /data/web/html/{test1,test2,break,last} -p
[root@nginx ~]# echo test1 > /data/web/html/test1/index.html
[root@nginx ~]# echo test2 > /data/web/html/test2/index.html
[root@nginx ~]# echo last > /data/web/html/last/index.html
[root@nginx ~]# echo break > /data/web/html/break/index.html
server {listen 80;server_name var.jieyu.org;root /data/web/html;index index.html;location /break {rewrite ^/break/(.*) /test1/$1;rewrite ^/test1/(.*) /test2/$1;}location /last {rewrite ^/last/(.*) /test1/$1;rewrite ^/test1/(.*) /test2/$1;}location /test1 {default_type test/html;echo "jieyu hahahahahha";}location /test2 {root /data/web/html;}
}

测试

 当加入break之后

当加入last之后

rewrite案例: 自动跳转 https

案例:基于通信安全考虑公司网站要求全站 https,因此要求将在不影响用户请求的情况下将http请求全 部自动跳转至 https,另外也可以实现部分 location 跳转

[root@nginx ~]# mkdir -p /usr/local/nginx/certs
[root@nginx ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/jieyu.org.key -x509 -days 365 -out /usr/local/nginx/certs/jieyu.org.crt
.+.....+....+.....+.+...+........+....+....................+.+.....+...+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+.....+....+........+...+.+...+...............+...+...+..............+.+......+.........+............+..+.+......+.....+...+.........................................................+...+.+..+.......+...+.....+...+.+...+...+..+............+.+.........+........+...+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
...+........+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..........+.....+...+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*....+.........+...+...+.+...+..........................+.......+..............+....+............+............+...........+.+........+.+...........+.+..+...+...+..........+..+.........+......+....+...+........+...+.+......+.....+....+...+......+...........+.+...+......+......+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Jiangsu
Locality Name (eg, city) [Default City]:nanjing
Organization Name (eg, company) [Default Company Ltd]:jieyu
Organizational Unit Name (eg, section) []:webserver
Common Name (eg, your name or your server's hostname) []:www.jieyu.org
Email Address []:admin@jieyu.com

 编辑配置

vim /usr/local/nginx/conf.d/vhosts.conf
server {listen 80;listen 443 ssl;server_name www.jieyu.org;root /data/web/html;index index.html;ssl_certificate /usr/local/nginx/certs/jieyu.org.crt;ssl_certificate_key /usr/local/nginx/certs/jieyu.org.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;location / {if ( $scheme = http ){rewrite / https://$host redirect;}}
}

 测试: 输入http://www.jieyu.org

案例:防盗链

放图片

[root@nginx html]# mkdir /data/web/html/images
[root@nginx images]# ls
123.jpg将盗链图片放在/data/web/html下 

实现盗链

在一个web 站点盗链另一个站点的资源信息,比如:图片、视频等 

 假设有个192.168.136.128的web服务器偷图

[root@client ~]# cat /var/www/html/index.html
<html><head><meta http-equiv=Content-Type content="text/html;charset=utf-8"><title>盗链</title>
</head><body><img src="http://www.jieyu.org/images/nginx.jpg" ><h1 style="color:red">欢迎大家</h1><p><a href=http://www.jieyu.org>狂点老鱼</a>出门见喜</p></body></html>

 

location /images  {valid_referers none blocked server_names *.jieyu.org ~/.baidu/.;if ( $invalid_referer ){rewrite ^/   http://www.jieyu.org/daolian.png;}}

 如果从百度转过去  会有referer信息

验证两个域名的日志,是否会在被盗连的web站点的日志中出现以下盗链日志信息:

 实现防盗链

全站限制  

发现图片裂了,网址也访问不了

location /images  {valid_referers none blocked server_names *.jieyu.org ~/.baidu/.;if ( $invalid_referer ){rewrite ^/   http://www.jieyu.org/daolian.png;}}

再次访问

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协议转发至指定服务器处理

动静分离 

准备两台web服务器

 在nginx主机上测试访问两台web主机

 一台主机装php

[root@web1 ~]# yum install php -y

[root@web1 ~]# yum install httpd -y
[root@web1 ~]# cat /var/www/html/index.php
<?php
  phpinfo();
?>

一台配置一个html页面

[root@nginx images]# cat /usr/local/nginx/conf.d/vhosts.conf
server {listen 80;server_name www.jieyu.org;location ~ \.php$ {proxy_pass http://192.168.136.128:80;}location /static {proxy_pass http://192.168.136.129:90;}
}

测试:

反向代理示例: 缓存功能

cache is king 

压测

[root@nginx nginx]# ab -n1000 -c100 http://www.jieyu.org/static/index.html

每秒处理的请求量  

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

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

在http模块添加以下语句:

proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g;

server {listen 80;server_name www.jieyu.org;location ~ \.php$ {proxy_pass http://192.168.136.128:80;}location /static {proxy_pass http://192.168.136.129:80;proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 1m;}
}

 再次压测

刚刚配置生成的文件

http 反向代理负载均衡 

需要有这些模块

upstream webcluster {server 192.168.136.128:80 fail_timeout=15s max_fails=3;server 192.168.136.129:80 fail_timeout=15s max_fails=3;server 192.168.136.100:80 backup;
}
server {listen 80;server_name www.jieyu.org;location / {proxy_pass http://webcluster;}
}

测试

ip_hash

源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计 算,以实现会话保持

加入ip_hash后

 测试

hash $request_uri consistent; #基于用户请求的uri做hash

测试 

对cookie进行hash

基于cookie中的sessionid这个key进行hash调度,实现会话绑定测试down 标记为down状态,可以平滑下线后端服务

测试

实现 Nginx 四层负载均衡

域名解析负载均衡

两台主机安装bind服务,并编辑配置文件

[root@web1 ~]# vim /etc/named.rfc1912.zones
...
zone "jieyu.org" IN {type master;file "jieyu.org.zone";allow-update { none; };
};
...
[root@web1 named]# cat /var/named/jieyu.org.zone
$TTL 1D
@       IN SOA   ns.jieyu.org. root.jieyu.org. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns.jieyu.org.
ns      A       192.168.136.128
www     A       192.168.136.128

传给另一台服务器

[root@web1 named]# scp -p /etc/named.{conf,rfc1912.zones} root@192.168.136.129:/etc/
root@192.168.136.129's password:
named.conf                                                                           100% 1712     1.3MB/s   00:00
named.rfc1912.zones                                                                  100% 1115     2.0MB/s   00:00[root@web1 named]# scp -p /var/named/jieyu.org.zone  root@192.168.136.129:/var/named/jieyu.org.zone[root@web2 named]# chgrp named /var/named/jieyu.org.zone

实现 FastCGI

二进制下载nginx

[root@nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63 --add-module=/root/memc-nginx-module-0.20 --add-module=/root/srcache-nginx-module-0.33 --user=nginx --group=nginx --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-pcre
[root@nginx nginx-1.24.0]# make && make install

二进制下载php 

利用yum解决php依赖

[root@Nginx ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel
libpng-devel libcurl-devel oniguruma-devel

 oniguruma-devel 可能安装不了  去阿里下

[root@nginx php-8.3.9]# ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd
[root@nginx php-8.3.9]# make && make install

make && make install

php相关配置优化

[root@nginx php-8.3.9]# cd /usr/local/php/etc/
[root@nginx etc]# ls
php-fpm.conf.default  php-fpm.d
[root@nginx etc]# cp -p php-fpm.conf.default php-fpm.conf
去掉注释
[root@nginx etc]# vim php-fpm.conf
pid = run/php-fpm.pid   #指定pid文件存放位置

[root@nginx etc]# cd php-fpm.d/
[root@nginx php-fpm.d]# ls
www.conf.default
[root@nginx php-fpm.d]# cp www.conf.default www.conf -p
[root@nginx php-fpm.d]# vim www.conf

生成主配置文件 

[root@nginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini
[root@nginx ~]# cd /usr/local/php/etc/
[root@nginx etc]# vim php.ini 

修改时区

生成启动文件

[root@nginx php-8.3.9]# cp sapi/fpm/php-fpm.service /lib/systemd/system

注释该内容

[root@nginx php-8.3.9]# systemctl daemon-reload 
[root@nginx php-8.3.9]# systemctl start php-fpm.service 
[root@nginx php-8.3.9]# netstat -launpt | grep php
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      147532/php-fpm: mas 

添加php环境变量

[root@nginx php-8.3.9]# vim ~/.bash_profile 

[root@nginx php-8.3.9]# source ~/.bash_profile 

 准备php测试页面

[root@nginx php-8.3.9]# mkdir /data/web/php -p
[root@nginx php-8.3.9]# cd /data/web/php
[root@nginx php]# vim index.php<?phpphpinfo();
?>

Nginx配置转发

Nginx安装完成之后默认生成了与fastcgi的相关配置文件,一般保存在nginx的安装路径的conf目录当 中,比如/apps/nginx/conf/fastcgi.conf、/apps/nginx/conf/fastcgi_params。

在主配置文件添加子配置文件

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

写nginx文件

[root@nginx ~]# mkdir /usr/local/nginx/conf.d
[root@nginx ~]# cd /usr/local/nginx/conf.d/
[root@nginx conf.d]# vim vhosts.confserver {listen 80;server_name  www.jieyu.org;root /data/web/html;index index.html;location ~ \.php$ {root /data/web/php;fastcgi_pass 127.0.0.1:9000fastcgi_index index.php;include fastcgi.conf;}
}

测试访问 

php高速缓存  

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

安装memcache模块

[root@Nginx ~]# tar zxf memcache-8.2.tgz
[root@Nginx ~]# cd memcache-8.2/
[root@Nginx memcache-8.2]# yum install autoconf
[root@Nginx memcache-8.2]# phpize
Configuring for:
PHP Api Version:         20200930
Zend Module Api No:      20200930
Zend Extension Api No:   420200930[root@Nginx memcache-8.2]# ./configure && make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-nonzts-20230831/
[root@Nginx memcache-8.2]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts20230831/
memcache.so opcache.so

复制测试文件到nginx发布目录中 

[root@Nginx ~]# cd memcache-8.2/
[root@Nginx memcache-8.2]# ls
autom4te.cache config.log configure.ac example.php Makefile.fragments
README
build config.m4 config.w32 include Makefile.objects runtests.php
config9.m4 config.nice CREDITS libtool memcache.la src
config.h config.status docker LICENSE memcache.php
tests
config.h.in configure Dockerfile Makefile modules
[root@Nginx memcache-8.2]# cp example.php memcache.php /data/web/php
[root@Nginx ~]# vim /data/php/memcache.php

 

配置php加载memcache模块 

[root@Nginx ~]# vim /usr/local/php/etc/php.ini

[root@Nginx ~]# systemctl reload php-fpm
[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
976 1037243 186762/memcached
[root@Nginx ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1"

测试:

输入用户和密码

访问 http://php.timinglee.org/memcache.php 查看命中效果 

性能对比 

[root@apache20 ~]# ab -n500 -c10 http://www.jieyu.org/index.php
@@@内容忽略@@@
Concurrency Level: 10
Time taken for tests: 0.514 seconds
Complete requests: 500
Failed requests: 44
(Connect: 0, Receive: 0, Length: 44, Exceptions: 0)
[root@apache20 ~]# ab -n500 -c10 http://www.jieyu.org/example.php
@@@内容忽略@@@
Concurrency Level: 10
Time taken for tests: 0.452 seconds
Complete requests: 500
Failed requests: 0


部署方法

在我们安装的nginx中默认不支持memc和srcache功能,需要借助第三方模块来让nginx支持此功能,所以nginx需要重新编译

[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf
upstream memcache {server 127.0.0.1:11211;keepalive 512;
}
server {listen 80;server_name www.jieyu.org;root /data/web/php;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 memcache-8.2]# 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 ~ ]# ab -n500 -c10 http://www.jieyu.org/index.php

 

 

nginx 二次开发版本

openresty

 二进制安装

[root@nginx openresty]# ./configure --prefix=/usr/local/openresty --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-stream_ssl_module --with-stream_realip_module --with-pcre --with-stream --with-http_ssl_module \# make && make install
[root@nginx bin]# vim ~/.bash_profile

[root@nginx bin]# source ~/.bash_profile
[root@nginx bin]# openresty
[root@nginx bin]# netstat -launpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      166940/nginx: maste

[root@nginx ~]# cd /usr/local/openresty/
[root@nginx openresty]# ls
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site

 可以在里面进行开发

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

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

相关文章

p0级别事故 分类

信息化系统 P0至P4事故级别描述了不同严重程度的服务中断或功能故障&#xff0c;其中P0代表最高级别的事故。以下是各级别的详细描述&#xff1a; ● P0&#xff1a;核心业务重要功能不可用&#xff0c;且影响范围广泛&#xff0c;如大面积影响用户。这包括系统崩溃、页面无法访…

Android低内存设备系统优化

切记,所有的优化都遵循一条准则: 空间换时间,时间换空间。 一、前言 我们为什么会觉得卡顿、不流畅? 卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染…

springboot整合mybatis以及mybatis-plus 开发

一、springboot整合mybatis 1.注解版 1.1 导入坐标 <dependencies><!--mybatis坐标--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</…

【C++】使用红黑树封装map与set

文章目录 1. 源码分析2. 调整红黑树的结构搭建map、set3. 红黑树的迭代器3.1 普通迭代器3.2 const迭代器3.3 map的operator[ ] 4. 完整代码4.1 RBTree4.2 MyMap4.3 MySet 对于map与set&#xff0c;它们一个是KV模型&#xff0c;一个是K模型&#xff0c;那我们要写两个红黑树吗&…

虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)

虚幻5|在连招基础上&#xff0c;给角色添加武器并添加刀光|在攻击的时候添加武器并返回背后&#xff08;第一部分&#xff0c;下一部分讲刀光&#xff09;_unreal 如何给角色添加攻击-CSDN博客 目的&#xff1a;捡起各种不同的武器&#xff0c;捡起的武器跟装备的武器相匹配 …

【Hot100】LeetCode—234. 回文链表

目录 1- 思路快慢指针链表拆分反转链表 2- 实现⭐234. 回文链表——题解思路 3- ACM 实现 原题连接&#xff1a;234. 回文链表 1- 思路 快慢指针链表拆分反转链表 思路 ①将链表拆分前后两个部分——>找拆分点、②反转后面部分、③根据反转结果&#xff0c;同时利用两个指…

MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端&#xff0c;只有服务器端服务开启以后&#xff0c;才可以通过客户端登录MySQL服务端。 首先&#xff0c;以管理员身份运行“命令提示符”&#xff1a; &#xff08;1&#xff09;启动MySQL服务…

python井字棋游戏设计与实现

python实现井字棋游戏 游戏规则&#xff0c;有三个井字棋盘&#xff0c;看谁连成的直线棋盘多谁就获胜 棋盘的展现形式为 棋盘号ABC和位置数字1-9 输入A1 代表在A棋盘1号位数下棋 效果图如下 部分源码如下&#xff1a; 卫星工纵浩 白龙码程序设计&#xff0c;点 代码获取 …

海外短剧平台的局限性与优势:做平台还是选择CPS?

随着国内短剧市场的蓬勃发展&#xff0c;越来越多的目光开始聚焦在海外市场。不少企业和个人都看到了“文化输出”的巨大潜力&#xff0c;希望通过短剧这一形式&#xff0c;吸引海外的观众。然而&#xff0c;在进入海外市场时&#xff0c;我们面临着两种主要的选择&#xff1a;…

STM32 定时器 输入捕获

用于测频率测占空比 IC(Input Capture)输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;上升沿/下降沿&#xff09;时&#xff0c;会让当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数…

2024年入职/转行网络安全,该如何规划?_网络安全职业规划

前言 前段时间&#xff0c;知名机构麦可思研究院发布了 《2022年中国本科生就业报告》&#xff0c;其中详细列出近五年的本科绿牌专业&#xff0c;其中&#xff0c;信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景&#xff0c;想必无需我多言&#xff0c;作为…

制造企业为什么要数字化转型?面临哪些困难?

如何界定制造企业 制造业&#xff08;Manufacturing Industry&#xff09;是指机械工业时代利用某种资源&#xff08;物料、能源、设备、工具、资金、技术、信息和人力等&#xff09;&#xff0c;按照市场要求&#xff0c;通过制造过程&#xff0c;转化为可供人们使用和利用的…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求&#xff1a; 1.如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息 2.如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息 3.如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议&#xff0c;也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单&#xff0c;在进行 DNS 查询时&#xff0c;如果查询的域名不在 DNS 服务器本机缓存中&#xff0c;就会访问互联网进行查询&#xff0c;然后返回结果。…

JavaScript基础知识(三)

样式修改 元素.style是对象的一种格式,用于通过设置元素的相关行内样式来设置css,也可以选择相关关联的样式来修改元素相关的样式. 要注意的是,选择相关的样式的时候,样式名是采用小驼峰写法而非是全部小写的方式 类名 添加类名: 元素.classList.add("classname") …

FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer

GSYVideoPlayer是一个国产的移动端视频播放器&#xff0c;它采用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四种播放器内核&#xff0c;支持弹幕、滤镜、广告等多项功能。 GSYVideoPlayer的Github主页为https://github.com/CarGuo/GSYVideoPlayer&#xff0c;截…

『Z-Workshop』 The Graph workshop mini hackathon活动

Community Meetup In Hangzhou ZJUBCA 2024 求是 创新 概述 / OVERVIEW The Graph作为一个去中心化的查询协议&#xff0c;为区块链数据的索引和查询提供了强大的支持。我们希望通过这场黑客松&#xff0c;激发大家对区块链技术更深层次的探索和应用&#xff0c;共同推动这一…

Facebook与区块链:社交网络如何融入去中心化技术

随着区块链技术的飞速发展&#xff0c;去中心化理念逐渐渗透到各个领域&#xff0c;社交网络也不例外。作为全球领先的社交平台&#xff0c;Facebook在这一趋势下开始积极探索区块链技术的潜力&#xff0c;希望利用这一前沿技术来提升平台的安全性、透明度和用户控制权。本文将…

Linux网络:基于OS的网络架构

Linux网络&#xff1a;OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统&#xff0c;讲解计算机网络的设计理念&#xff0c;帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…

【AI安防】YOLOv8 + OpenVINO2023 + QT5 电子围栏预警系统

引言 电子围栏是一种利用无线通信技术和地理信息系统实现的虚拟边界&#xff0c;用于监控和控制被监控对象的位置。它可以帮助我们实现对特定区域内的自定义对象进行实时检测、定位与跟踪。本文介绍了一种基于YOLOv8 OpenVINO2023 QT5 联合打造的实时高效、多线程、自定义对…