nginx笔记整理

目录

一.Nginx基础介绍

二.nginx安装配置

三.Nginx配置文件

3.1nginx主配置文件(/etc/nginx/nginx.conf)

3.2默认的网站配置文件(/etc/nginx/conf.d/default.conf)

四.创建新的虚拟主机

五.Nginx日志

5.1nginx日志格式

5.2查看日志

5.3日志缓存(了解)

5.4日志轮转(/etc/logrotate.d/nginx)

六.Nginx WEB模块

6.1连接状态模块(stub_status_module)

6.2随机主页模块(random_index_module)

6.3替换模块(sub_moddule)

6.4文件读取模块(ngx_http_core_module)

6.5文件压缩模块

6.6页面缓存模块(ngx_http_headers_module)

6.7防盗链模块(ngx_http_referer_module)

七.Nginx访问限制模块

7.1ngx_http_limit_req_module(请求限制模块)

7.2ngx_http_limit_conn_module(连接限制模块)

八.Nginx访问控制模块

8.1基于IP实现(ngx_http_access_module)

8.2基于用户实现(ngx_http_auth_basic_module)

九.Nginx Proxy服务器

9.1代理

9.2Nginx Proxy服务器反向代理实验

9.3Nginx-proxy缓存(网页缓存)

十.Nginx之location


一.Nginx基础介绍

简介:

Nginx是一个高性能的HTTP和反向代理服务器,也是一个邮局服务器,支持高并发,其高并发是通过IO多路复用中的epoll模型实现的。
 

二.nginx安装配置

通过yum安装

yum install nginx -y

三.Nginx配置文件

/usr/share/nginx/htm/index.html Nginx默认的网站根目录
/etc/nginx/nginx.conf总配置文件
/etc/nginx/conf.d子配置文件夹
/etc/nginx/conf.d/default.conf默认的网站配置文件

/etc/logrotate.d/nginx日志轮转
/etc/nginx/mime.types文件关联程序
/etc/nginx/modules模块文件夹
/usr/lib/systermd/system/nginx.service systemctl服务脚本。
/usr/sbin/nginx主程序
/var/cache/nginx缓存各种
var/og/nginx日志文件夹
/usr/ib64/nginx Nginx模块目录

3.1nginx主配置文件(/etc/nginx/nginx.conf)

user nginx;  # 设置运行nginx的用户
worker_processes auto;  # 设置工作进程数量为自动
error_log /var/log/nginx/error.log;  # 错误日志文件路径
pid /run/nginx.pid;  # 进程ID文件路径

events {
    worker_connections 1024;  # 每个工作进程的最大连接数
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';  # 自定义日志格式

    access_log  /var/log/nginx/access.log  main;  # 访问日志文件路径及使用的日志格式

    sendfile            on;  # 开启sendfile系统调用传输文件
    tcp_nopush          on;  # 开启tcp_nopush功能
    tcp_nodelay         on;  # 开启tcp_nodelay功能
    keepalive_timeout   65;  # 客户端保持连接超时时间
    types_hash_max_size 4096;  # MIME类型哈希表最大值

    include             /etc/nginx/mime.types;  # 包含MIME类型文件
    default_type        application/octet-stream;  # 默认MIME类型

   
    include /etc/nginx/conf.d/*.conf;  # 包含指定目录下的所有.conf配置文件

    server{

        location / {


        }


    }

}

总结:整个nginx主配置文件分为3大模块,分别是全局配置模块,events模块,http模块,而http模块还可以包括server模块(虚拟主机配置部分)和location模块(配置请求的路由)。

3.2默认的网站配置文件(/etc/nginx/conf.d/default.conf)

server {
    listen 80;  # 监听端口80
    server_name localhost;  # 设置服务器名称为localhost

    #charset koi8-r;  # 设置字符编码为koi8-r
    #access_log /var/log/nginx/host.access.log main;  # 设置访问日志路径及日志格式

    location / {
        root /usr/share/nginx/html;  # 设置根目录为/usr/share/nginx/html
        index index.html index.htm;  # 设置默认访问文件为index.html或index.htm
    }
}

四.创建新的虚拟主机

setenforce 0  # 临时关闭SELinux
systemctl stop firewalld  # 停止Firewalld防火墙
vim /etc/nginx/conf.d/yulang.conf  # 使用vim编辑器打开Nginx配置文件yulang.conf

# Nginx配置文件内容
server {
    listen 80;  # 监听端口80
    server_name www.yulang.com;  # 设置服务器名称为www.yulang.com

    location / {
        root /yulang;  # 设置根目录为/yulang
        index index.html;  # 设置默认访问文件为index.html
    }
}

mkdir /yulang  # 创建/yulang目录
echo yulang > /yulang/index.html  # 在/yulang目录下创建index.html并写入内容"yulang"
systemctl restart nginx  # 重启Nginx服务
vim /etc/hosts  # 使用vim编辑器打开hosts文件
192.168.145.129 www.yulang.com  # 将www.yulang.com映射到IP地址192.168.145.129
curl www.yulang.com  # 使用curl命令访问www.yulang.com网站
这里还可以访问指定的文件:
curl www.yulang.com/index.html

五.Nginx日志

5.1nginx日志格式

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

$remote_addr远程地址:记录客户端IP地址
$remote_user远程用户:记录客户端用户名称
$time_local本地时间:服务器自身时间
$request请求:记录请求的URL和HTTP协议
$status状态: 记录请求状态
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小
$http_referer记录从哪个页面链接访问过来的(超链接 )
$http_user_agent记录客户端浏览器相关信息
$http_ x_ forwarded_for代理IP

5.2查看日志

/var/log/nginx/access.log(正常日志):

[root@serverd ~]# tail /var/log/nginx/access.log
192.168.145.131 - - [28/Feb/2024:16:58:43 +0800] "GET / HTTP/1.1" 403 153 "-" "curl/7.76.1" "-"
192.168.145.131 - - [28/Feb/2024:16:58:54 +0800] "GET / HTTP/1.1" 200 7 "-" "curl/7.76.1" "-"


# 详细注释:
# 192.168.145.131: 请求的客户端IP地址
# - -: 在标准日志格式中,通常表示标识用户和认证用户的字段,但在这里未提供信息
# [28/Feb/2024:16:58:43 +0800]: 记录的时间戳,包括日期、时分秒和时区信息 (+0800 表示东八区)
# "GET / HTTP/1.1": HTTP请求方法(GET),请求的URI路径(/),HTTP协议版本(HTTP/1.1)
# 403: 服务器响应状态码,表示禁止访问(Forbidden)
# 153: 响应内容的字节数
# "-": 用户代理(User-Agent)字符串,指示发起请求的客户端应用程序(curl/7.76.1)
# "-": 另一个横杠,在标准日志格式中通常表示引用页面的来源,但在这里未提供信息


/var/log/nginx/error.log(错误日志):

[root@serverd ~]# tail /var/log/nginx/error.log
2024/02/29 09:32:51 [emerg] 6937#6937: "access_log" directive is not allowed here in /etc/nginx/nginx.conf:8
2024/02/29 09:33:10 [emerg] 6947#6947: "access_log" directive is not allowed here in /etc/nginx/nginx.conf:8
2024/02/29 09:43:22 [error] 6965#6965: *1 open() "/yulang/89.html" failed (2: No such file or directory), client: 192.168.145.131, server: www.yulang.com, request: "GET /89.html HTTP/1.1", host: "www.yulang.com"

5.3日志缓存(了解)

大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭占用了系统的1O,与业务无关,可以使用open_log_file_cache来设定。

open_log_file_cache: max=1000 inactive=20s min_uses=3 vald=1m;


字段解析:
max 1000:
日志文件的FD,最大的缓存数量为1000。
min_users3:20秒內小于 3次访问的FD,就给你清掉,结合inactive 20s的时间。
valid 1m:检查周期为1分钟。
总结:缓存最多1000个,到了极限每分钟开始清除掉20秒内小于3次的文件FD.
 

5.4日志轮转(/etc/logrotate.d/nginx)

[root@serverd ~]# vim /etc/logrotate.d/nginx 
# 针对nginx日志文件的logrotate配置

# 匹配所有/var/log/nginx/目录下的以.log结尾的文件
/var/log/nginx/*log {
    # 按日进行日志切割
    daily
    # 保留旧日志文件的数量,超过10个会被删除
    rotate 10
    # 如果日志文件丢失,也不报错
    missingok
    # 如果日志文件为空,也不报错
    notifempty
    # 压缩日志文件
    compress
    # 在压缩之前保留一个未压缩的副本
    delaycompress
    # 多个进程共享日志文件时,只在所有进程都完成后再执行postrotate
    sharedscripts
    # 日志切割后执行的命令
    postrotate
        # 向nginx主进程发送USR1信号,实现重新打开日志文件,使日志切割生效
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

六.Nginx WEB模块

6.1连接状态模块(stub_status_module)

意义:展示了用户和nginx链接数量信息。

启动状态模块:

[root@serverd ~]# vi /etc/nginx/conf.d/default.conf
在server内添加如下:
  # 下面是用于展示Nginx状态的接口配置
    location /nginx_status {
        stub_status;  # 使用stub_status模块
        allow all;     # 允许所有IP访问
    }
[root@serverd ~]# curl 192.168.145.131/nginx_status
Active connections: 1  # 当前活动连接数为1
server accepts handled requests
 5 5 5  # 这三个数字分别代表总共接受的连接、处理的连接和请求的数量
Reading: 0 Writing: 1 Waiting: 0  # 当前状态下读取连接数为0,写入连接数为1,等待连接数为0

6.2随机主页模块(random_index_module)

意义:将主页设置成随机页面,是一种微调更新机制

启动随机主页:

[root@serverd app]# mkdir /app  #创建一个名为app的目录
[root@serverd app]# touch /app/{bule.html,green.html,red.html,.yellow.html}  #在app目录下创建四个文件:bule.html, green.html, red.html, .yellow.html
[root@serverd app]# vim red.html  
# 编辑red.html文件,添加HTML代码
<html>
<head>
<title>red color</title>
</head>
<body style="background-color:red">
<h1>red color!</h1>
</body>
</html>
其余几个文件一样添加,只需修改颜色部分
[root@serverd app]# vim /etc/nginx/conf.d/default.conf 编辑default.conf文件
[root@serverd app]# systemctl restart nginx  # 重启nginx 服务
#访问
[root@serverd app]# curl 192.168.145.132

还可以在浏览器中测试,会显示出随机访问的结果。

第一次访问:

第二次访问:

其余情况不做展示,还会显示出green页面的情况。

6.3替换模块(sub_moddule)

意义:网页内容替换

[root@serverd app]# vim /etc/nginx/conf.d/default.conf 
#将以下内容添加到server下面
server {
    # 使用 sub_filter 将响应内容中的 'nginx' 替换为 'yulang'
    sub_filter nginx 'yulang';
    
    # 设置 sub_filter_once 为 off,允许多次替换
    sub_filter_once off;
}


[root@serverd app]# systemctl restart nginx  #重启服务
[root@serverd app]# curl 192.168.145.132      #访问

访问成功图:

成功将nginx替换成了yulang

6.4文件读取模块(ngx_http_core_module)

主要包含了sendfile()  tcp_nopush()  tcp_nodelay()这三个模块

sendfile:

sendfile:用于发送文件的模块,sendfile系统调用则提供了一种减少拷贝次数,提升文件传输性能的方法,DMA引擎会将数据直接从内核缓冲区拷贝到协议引擎中,从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。该模块默认开启,形式为sendfile on。

tcp_nopush:

tcp_nopush():网络资源在发送时,除了资源本身会占据空间外,包头也会占据一定的空间,这样当大量资源发送时,会对减缓传输速率,以及浪费一定的网络资源,所以我们开启tcp_nopush()来提升网络传输的效率,当包积累到一定数量时再发送。该模块默认关闭,形式为tcp_nopush on,需手动在主配置文件中打开。

tcp_nodelay:

tcp_nodelay():当网络延迟比较长时,tcp_nodelay()会立刻将数据包发送出去,从而避免网络延迟,存在较长的网络延迟时,才会被启用,形式为tcp_nodelay on。

6.5文件压缩模块

文件传输前进行压缩能够提升文件的传输效率

开启关闭状态:

语法:gzip on|off;
默认:gzip off;

压缩等级:
语法:gzip_comp_level level;
默认: gzip_comp_ level 1;(1~9)

压缩协议版本:
语法: gzip_http_version1.0| 1.1;
默认:gzip_http_version 1.1;

6.6页面缓存模块(ngx_http_headers_module)

意义:expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。Nginx(expires缓存减轻服务端压力),开启缓存可以加速浏览网站。

语法:

开启服务器缓存模块:

[root@serverd app]# vim /etc/nginx/conf.d/default.conf 
location/ {
root /usr/share/nginx/html
index index.html index.htm;
#开启服务器缓存模块
expires 24h;
}

6.7防盗链模块(ngx_http_referer_module)

搭建一个a.com网站

[root@serverd a.com]# vim /etc/nginx/conf.d/a.conf # 这是 a.com 网站的 Nginx 配置文件 a.conf
server {
    listen 80;  # 监听端口 80,接受来自客户端的HTTP请求
    server_name a.com;  # 指定服务器名称为 a.com,在客户端请求中匹配此域名
    location / {
        root /a.com;  # 指定根目录为 /a.com,即网站文件的根目录
        index index.html;  # 指定默认显示的文件为 index.html
    }
}
[root@serverd a.com]# mkdir /a.com #创建a.com目录
[root@serverd a.com]# vim /a.com/index.html #创建index.html
<img src="1.jpg" />
[root@serverd a.com]# cd /a.com  #上传图片:1.jpg
[root@serverd a.com]# ll
总用量 36
-rw-r--r--. 1 root root 29978  3月  1 14:27 1.jpg
-rw-r--r--. 1 root root    20  3月  1 14:45 index.html
[root@serverd a.com]# vim /etc/hosts #域名映射
192.168.145.132 a.com b.com
[root@serverd a.com]# systemctl restart nginx #重启服务

虚拟机中的firefox访问:

搭建一个b.com网站(在主页中盗链a网站中的图片)

[root@serverd b.com]# vim /etc/nginx/conf.d/b.conf # 这是 b.com 网站的 Nginx 配置文件 b.conf
server {
    listen 80;  # 监听端口 80,接受来自客户端的HTTP请求
    server_name b.com;  # 指定服务器名称为 b.com,在客户端请求中匹配此域名
    location / {
        root /b.com;  # 指定根目录为 /b.com,即网站文件的根目录
        index index.html;  # 指定默认显示的文件为 index.html
    }
}
[root@serverd b.com]# mkdir /b.com #创建b.com目录
[root@serverd b.com]# vim /b.com/index.html #创建index.html
<img src="http://a.com/1.jpg" /> #此处的图片形式是连接,因此盗链了a网站中的图片
[root@serverd a.com]# vim /etc/hosts #域名映射
192.168.145.132 a.com b.com
[root@serverd a.com]# systemctl restart nginx #重启服务

虚拟机中的firefox访问:

启用a.com防盗链功能:

[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
location / {
                valid_referers none blocked *.a.com; #不可以引用指定的任何区域
                # 检查 Referer 是否有效,如果无效则返回 403 错误
                if($invalid_referer){
                        return 403;
                }
        }

再次访问b网站,发现图片被防盗链了,访问不了:

如果需要某些网站能够使用盗链资源,需要在配置文件中添加白名单:

[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
location / {
# 匹配以.goole.结尾的域名、以.baidu.结尾的域名、b.com、192.168.145.* 和 a.com  
valid_referers none blocked *.a.com server_name ~\.goole\. ~\.baidu\. b.com 192.168.145.* a.com                               
                if($invalid_referer){
                        return 403;
                }
}

再次访问发现能够访问到了

七.Nginx访问限制模块

7.1ngx_http_limit_req_module(请求限制模块)

启动请求频率限制:

0测试未限制的情况下访问
[root@serverd ~]# yum install httpd-tools -y #安装httpd-tools工具
[root@serverd ~]# ab -n 100 -c 10 http://a.com
                    # 使用ab命令对网站进行压力测试
                    # -n 表示请求数,这里设置为100
                    # -c 表示并发数,这里设置为10
                    # http://a.com 是要测试的网站地址
1启动限制
[root@serverd ~]# vim /etc/nginx/nginx.conf
http{ #限制请求速率的配置,使用客户端IP地址作为限制的key,创建名为req_zone的内存区域,大小为10MB, 
       设置请求速率为每秒1个请求
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
}
[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
location / {
                limit_req zone=req_zone;  # 引用名为req_zone的内存区域进行请求限制
}
[root@serverd ~]# systemctl restart nginx
[root@serverd ~]# ab -n 100 -c 10 http://a.com

再次访问时发现,请求的100次,失败了99次:

7.2ngx_http_limit_conn_module(连接限制模块)

意义:通过IP地址限制TCP的连接

八.Nginx访问控制模块

8.1基于IP实现(ngx_http_access_module)

1限制指定的主机访问
[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
server{
        allow 192.168.145.129;
        deny all;
}
[root@serverd ~]# systemctl restart nginx
[root@serverd ~]# curl http://a.com/ #当前服务器对应的IP为192.168.145.132
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
#结果我们通过192.168.145.132访问不了
#开启对192.168.145.132的访问
[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
server{
        allow 192.168.145.132;
        deny all;
}
[root@serverd ~]# systemctl restart nginx
#此时成功访问
[root@serverd ~]# curl http://a.com/
<img src="1.jpg" />


8.2基于用户实现(ngx_http_auth_basic_module)

1建立认证文件
[root@serverd ~]# htpasswd -cm /etc/nginx/conf.d/passwd user1 #在 /etc/nginx/conf.d/下创建一个加密的文件 -c创建文件 -m对文件加密
[root@serverd ~]# htpasswd -m /etc/nginx/conf.d/passwd user2   #再次添加要认证的用户时,不需要加-c参数                                                            
2启动认证
[root@serverd ~]# vim /etc/nginx/conf.d/a.conf
server{
        auth_basic "nginx access test!";                                    #认证提示信息
        auth_basic_user_file /etc/nginx/conf.d/passwd;        #引用创建的加密文件
}
3重启验证
[root@serverd ~]# systemctl restart nginx

浏览器测试:

登陆后成功访问到了页面:

九.Nginx Proxy服务器

9.1代理

正向代理:在客户端部署代理服务器,代替客户端对外部网络发送和接收消息。客户端发送一个指定目标的请求给代理服务器,代理服务器再发送给目标服务器,目标服务器收到请求后,将响应的内容发送给代理服务器,代理服务器发给客户端。

反向代理:在服务器端部署代理服务器(为了区分,将真正响应的服务器成为业务服务器),让代理服务器替业务服务器接收请求或发送响应。客户端发送一个请求给代理服务器,代理服务器接收请求并将请求发送给业务服务器,业务服务器将响应发送给代理服务器,代理服务器再将响应发送给客户端。

正向代理和反向代理的不同点


1、部署的位置不同
正向代理部署在客户端,反向代理部署在服务器端。
2、作用不同
正向代理是客户端的代理,帮助客户端突破访问控制;反向代理是服务器的代理,帮助服务器实现负载均衡,安全防护。
 

9.2Nginx Proxy服务器反向代理实验

详细见链接:http://t.csdnimg.cn/MTQDc

9.3Nginx-proxy缓存(网页缓存)

作用:是将业务服务器中的部分内容存储到代理服务器,客户端发送请求到 Nginx 代理服务器,Nginx 检查缓存中是否有对应的响应内容,如果缓存中存在有效的响应,则直接返回给客户端,不用向后端服务器请求。

 Nginx-proxy缓存指令:

1.proxy_cache_path: 配置缓存路径和相关参数

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
  • /path/to/cache: 缓存文件存放路径
  • levels=1:2: 指定目录结构的级别
  • keys_zone=my_cache:10m: 定义名为 my_cache 的缓存区域,分配的内存大小为 10MB
  • max_size=10g: 设置最大缓存大小为 10GB
  • inactive=60m: 指定缓存文件在闲置指定时间后会被删除

2.proxy_cache: 启用特定的缓存区域

proxy_cache my_cache;

3.proxy_cache_valid: 设置不同状态码的响应的缓存有效时间

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
  • 对状态码为 200 和 302 的响应设置缓存有效时间为 10分钟
  • 对状态码为 404 的响应设置缓存有效时间为 1分钟

4.proxy_cache_use_stale: 定义在更新缓存时是否允许使用过期的缓存内容

proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  • 当请求过程中出现错误、超时或者后端返回特定状态码时,允许使用过期的缓存内容

十.Nginx之location

语法规则:

location优先级:

=        >        ^~        >        ~|~*|!~*        >        /

精准匹配        >        以某个字符开头        >        正则匹配        >        通配符

实验测试优先级:

[root@serverd ~]# vim /etc/nginx/conf.d/level.conf  #自定义一个虚拟主机

server {
    listen 80;  # 监听80端口
    root /abcd;  # 设置根目录为/abcd
    index index.html;  # 设置默认的索引文件为index.html

    location = / {
        index a.html;  # 当访问根路径时,返回a.html页面
    }

    location ~ / {
        index b.html;  # 当访问任意路径时,返回b.html页面
    }

    location / {
        index c.html;  # 对于其他路径的访问,返回c.html页面
    }
}

[root@serverd ~]# mkdir /abcd   #创建/abcd目录
[root@serverd ~]# echo aaa > /abcd/a.html    #向a.html写入aaa
[root@serverd ~]# echo bbb > /abcd/b.html  #向b.html写入bbb
[root@serverd ~]# echo ccc > /abcd/c.html     #向c.html写入ccc
[root@serverd ~]# systemctl restart nginx       #重启服务
[root@serverd conf.d]# curl 192.168.145.132    #测试
aaa

最后我们可以看到location中的=项确实是优先匹配了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

总结 HashTable, HashMap, ConcurrentHashMap 之间的区别

1.多线程环境使用哈希表 HashMap 不行,线程不安全 更靠谱的,Hashtable,在关键方法上加了synchronized 后来标准库又引入了一个更好的解决方案;ConcurrentHashMap 2.HashMap 首先HashMap本身线程不安全其次HashMap的key值可以为空&#xff08;当key为空时&#xff0c;哈希会…

Jenkins的Pipeline概念

文章目录 Pipeline什么是Jenkins Pipeline声明式和脚本式Pipeline语法为何使用PipelinePipeline概念PipelineNodeStageStep Pipeline语法概述声明式Pipeline脚本式Pipeline Pipeline示例 参考 Pipeline 什么是Jenkins Pipeline Jenkins Pipeline是一套插件&#xff0c;它支持…

【精华】麻省理工学院MIT技术双月刊(Bimonthly MIT Technology Review)2024年3/4月刊荐书 Book reviews

本期内容概览见博客&#xff1a;2024年3/4月刊内容概览 Book Reviews 1. Read Write Own: Building the Next Era of the Internet By Chris Dixon (Random House, 2024) With the demise of Twitter, many have advocated for a decentralized alternative for social medi…

浅析this指针

浅析this指针 文章目录 浅析this指针前言this指针作用this指针使用注意事项总结 前言 ​ 在面向对象的编程语言中&#xff0c;this指针是一个自引用指针&#xff0c;通常用于指向对象自身。通过这篇文章&#xff0c;我们将探讨this指针的核心特性、应用场景和相关案例。 this指…

高维中介数据:基于交替方向乘子法(ADMM)的高维度单模态中介模型的参数估计(入门+实操)

全文摘要 用于高维度单模态中介模型的参数估计&#xff0c;采用交替方向乘子法&#xff08;ADMM&#xff09;进行计算。该包提供了确切独立筛选&#xff08;SIS&#xff09;功能来提高中介效应的敏感性和特异性&#xff0c;并支持Lasso、弹性网络、路径Lasso和网络约束惩罚等不…

flynn发布服务小结

背景 flynn是一个基于容器的paas平台&#xff0c;可以快速的发布运行新的应用&#xff0c;用户只需要提交代码到git上&#xff0c;flynn就会基于提交的代码进行发布和部署&#xff0c;本文就简单看下flynn发布部署的流程 flynn发布服务 1.首先flynn会基于用户的web代码构建一…

远程服务器Ubuntu 18.04安装VNC远程桌面

一、安装vnc 1.安装图形化界面工具 # 安装过程中会弹窗让选择配置&#xff0c;选lightdm sudo apt install ubuntu-desktop sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal 2.安装vnc sudo apt-get install x11vnc3.安装LightD…

(面试题)数据结构:链表相交

问题&#xff1a;有两个链表&#xff0c;如何判断是否相交&#xff0c;若相交&#xff0c;找出相交的起始节点 一、介绍 链表相交&#xff1a; 若两个链表相交&#xff0c;则两个链表有共同的节点&#xff0c;那从这个节点之后&#xff0c;后面的节点都会重叠&#xff0c;知道…

推荐五本程序员必看书籍!

昨天推送的是视频&#xff0c;今天给大家推荐基本入门渗透测试的好书&#xff0c;以结合昨天文章一起学习&#xff0c;忘记了的可以回复“学习之路”会自动跳出文章的&#xff0c;好的话不多说&#xff0c;直接上主菜了&#xff01; 第一本当然是我们网络基础的书&#xff0c;…

SpringMVC了解

1.springMVC概述 Spring MVC&#xff08;Model-View-Controller&#xff09;是基于 Java 的 Web 应用程序框架&#xff0c;用于开发 Web 应用程序。它通过将应用程序分为模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&a…

快递平台独立版小程序源码|带cps推广营销流量主+前端

源码介绍&#xff1a; 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&#xff0c;功能成熟 如何收益: 1.对接第三方平台成本大约4元…

备战蓝桥杯---状态压缩DP进阶题1

我们来看一看一道比较难的问题&#xff08;十分十分的巧妙&#xff09;&#xff1a; 显然我们应该一行一行放&#xff0c;又竖的会对下一行产生影响&#xff0c;我们令横着放为0&#xff0c;竖着放的上方为1. 对于下一行&#xff0c;前一行放1的下面为0&#xff0c;但是会出现…

C++指针(三)

个人主页:PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 文章目录 前言 1.字符指针 1.1字符指针的概念 1.2字符指针的用处 1.3字符指针的操作 1.3.1定义 1.3.2初始化 1.4字符指针使用注意事项 2.数组参数&#xff0c;指针参数 2.1数组参数 2.1.1数组参数的概念 2.1…

论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code 中文名称: Code Llama&#xff1a;开放基础代码模型 链接: https://arxiv.org/abs/2308.12950 代码: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

微信小程序云开发教程——墨刀原型工具入门(文件设置+编辑组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

C++STL之vector

vector 1. vector介绍 vector文档vector其实就是一个顺序表&#xff0c;它表示可变大小数组的序列容器。像数组一样&#xff0c;可以使用下标[] 来访问vector的元素&#xff0c;和数组一样高效&#xff1b;甚至&#xff0c;它的大小是可以动态改变的&#xff0c;其大小由容器自…

广和通5G智能模组SC171支持Android、Linux和Windows系统,拓宽智能物联网应用

世界移动通信大会2024期间&#xff0c;广和通宣布&#xff1a;5G智能模组SC171除支持Android操作系统外&#xff0c;还兼容Linux和Windows系统&#xff0c;帮助更多智能终端客户快速迭代产品&#xff0c;拓宽智能化应用覆盖范围。 广和通SC171系列基于高通QCM6490物联网解决方案…

Redis安全加固策略:服务账号管理 开启redis密码认证 开启防护模式

Redis安全加固策略&#xff1a;服务账号管理 & 开启redis密码认证 & 开启防护模式 1.1 服务账号管理1.1.1 检测方法1.1.2 加固参考配置操作 1.2 开启redis密码认证1.2.1 检测方法1.2.2 加固参考配置操作 1.3 开启防护模式1.3.1 检测方法1.3.2 加固参考配置操作 &#x…

图神经网络实战——基于DeepWalk创建节点表示

图神经网络实战——基于DeepWalk创建节点表示 0. 前言1. Word2Vec1.1 CBOW 与 skip-gram1.2 构建 skip-gram 模型1.3 skip-gram 模型1.4 实现 Word2Vec 模型 2. DeepWalk 和随机行走3. 实现 DeepWalk小结系列链接 0. 前言 DeepWalk 是机器学习 (machine learning, ML) 技术在图…

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备&#xff08;UE&#xff09; …