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

Nginx基础概念和常用操作

文章目录

  • 1. 安装、启动、连接
  • 2. 快速尝试部署网站
  • 3. 配置文件
    • 1. nginx.conf
      • 全局配置
      • 事件模块
      • HTTP 模块
      • 性能优化建议
    • 2. default.conf
      • `server` 块
        • 基本设置
        • 日志设置
        • 根路径设置
  • 4. 反向代理
    • 1. 模拟3个Web
    • 2. 链接
  • 5. 负载均衡
    • 1. 加权轮询,Weighted Round Robin
    • 2. 最少连接,Least Connections
    • 3. IP哈希,IP Hash
    • 4. 哈希,Hash
  • 6. HTTPS
  • 7. 虚拟主机

1. 安装、启动、连接

直接拿docker安装,拉取镜像,运行,开放端口。

docker pull nginx:stable-perl

虽然在容器中性能有所损失,但是方便,加快学习进度。

启动后浏览器访问localhost,写着Welcome等欢迎语,就是启动成功了。

在VSCode下载一些Docker常用插件,然后就可以拿VSCode直接连上’正在运行的容器’,和连接Linux服务器一样。

输入nginx -V,查看nginx信息,包括安装目录、编译参数、配置文件位置、日志文件位置等信息。可以看到配置文件位于--conf-path=/etc/nginx/nginx.conf

root@f4f6c922d837:/# nginx -V
nginx version: nginx/1.26.1
built by gcc 12.2.0 (Debian 12.2.0-14) 
built with OpenSSL 3.0.11 19 Sep 2023
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.26.1/debian/debuild-base/nginx-1.26.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

2. 快速尝试部署网站

查看nginx配置文件,可以找到如下部分。

server {listen       80;listen  [::]:80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

这意味着,nginx 把所有对服务器根路径的请求,代理到 /usr/share/nginx/html 目录下,并且把 index.html 或 index.htm 作为默认页面。

如果你使用Vue或者Hex开发网站,它们的打包输出目录,大致结构分别如下

dist/
├── css/
│   └── app.12345.css
├── js/
│   └── app.12345.js
├── index.html
└── favicon.ico
public/
├── css/
│   └── style.css
├── js/
│   └── script.js
├── index.html
├── about/
│   └── index.html
└── archives/└── index.html

你只需要把dist或者public下的所有文件,直接复制到/usr/share/nginx/html目录下,重启nginx即可。

3. 配置文件

这个版本的nginx自带2个配置文件,首先是nginx.conf。

如果你修改了配置文件,可以用nginx -t来校验配置是否合法。然后使用nginx -s reload来重新加载配置文件。

1. nginx.conf

全局配置

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
  1. user 指令:

    • 用法:user <username>;
    • 描述:指定 Nginx 运行时使用的系统用户。
    • 示例:user nginx; 表示使用 nginx 用户。
  2. worker_processes 指令:

    • 用法:worker_processes <number|auto>;
    • 描述:设置工作进程数,auto 会自动根据 CPU 核心数设置。
    • 示例:worker_processes 4; 表示使用 4 个工作进程。
  3. error_log 指令:

    • 用法:error_log <file> <level>;
    • 描述:设置错误日志的路径和日志级别。
    • 日志级别选项:
      • debug:调试信息
      • info:一般信息
      • notice:通知信息(默认)
      • warn:警告信息
      • error:错误信息
      • crit:严重错误信息
      • alert:需要立即处理的问题
      • emerg:紧急情况
    • 示例:error_log /var/log/nginx/error.log notice; 表示记录通知级别及以上的日志。
  4. pid 指令:

    • 用法:pid <file>;
    • 描述:指定存储 Nginx 进程 ID 的文件路径。
    • 示例:pid /var/run/nginx.pid; 表示将 PID 存储在 /var/run/nginx.pid 文件中。

可能改动的部分:

  1. worker_processes auto;

    • 自动设置为 CPU 核心数,适用于大多数情况。

    • 可以手动设置为特定的进程数以微调性能,但一般不需要。

事件模块

events {worker_connections  1024;
}
  1. worker_connections 指令:
    • 用法:worker_connections <number>;
    • 描述:设置每个工作进程允许的最大连接数。
    • 示例:worker_connections 1024; 表示每个工作进程允许最多 1024 个连接。

可能改动的部分:

  1. worker_connections 1024;

    • 默认设置为 1024,适用于大多数小到中型网站。

    • 对于高流量网站,可以增加连接数,以提高并发处理能力。

    • 需要根据系统的 ulimit 设置进行调整,确保系统支持更多的连接。

HTTP 模块

http {include       /etc/nginx/mime.types;default_type  application/octet-stream;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;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}
  1. include 指令:

    • 用法:include <file|directory>;
    • 描述:包含指定的文件或目录下的所有配置文件。
    • 示例:include /etc/nginx/mime.types; 包含 MIME 类型配置文件。
  2. default_type 指令:

    • 用法:default_type <MIME-type>;
    • 描述:设置默认的 MIME 类型。
    • 示例:default_type application/octet-stream; 表示未能确定文件类型时使用 application/octet-stream
  3. log_format 指令:

    • 用法:log_format <name> <format>;

    • 描述:定义日志格式。

    • 示例:

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

      定义名为 main 的日志格式。

  4. access_log 指令:

    • 用法:access_log <file> <format>;
    • 描述:设置访问日志的路径和日志格式。
    • 示例:access_log /var/log/nginx/access.log main; 使用 main 格式记录访问日志。
  5. sendfile 指令:

    • 用法:sendfile <on|off>;
    • 描述:启用或禁用 sendfile 选项,用于提高文件传输效率。
    • 示例:sendfile on; 启用 sendfile
  6. tcp_nopush 指令:

    • 用法:tcp_nopush <on|off>;
    • 描述:用于优化传输数据时的 TCP 性能,通常与 sendfile 一起使用。
    • 示例:#tcp_nopush on; 默认注释掉。
  7. keepalive_timeout 指令:

    • 用法:keepalive_timeout <timeout>;
    • 描述:设置保持客户端连接的超时时间,单位是秒。
    • 示例:keepalive_timeout 65; 设置超时时间为 65 秒。
  8. gzip 指令:

    • 用法:gzip <on|off>;
    • 描述:启用或禁用 gzip 压缩。
    • 示例:#gzip on; 默认注释掉。
  9. include指令

    • 用法:include <file|directory>;
    • 描述:include 指令用于包含其他配置文件或目录中的所有配置文件。这可以帮助将配置文件分割成更小的部分,以便于管理和维护。
    • 示例:
      include /etc/nginx/mime.types;:包含 MIME 类型配置文件。
      include /etc/nginx/conf.d/*.conf;:包含 /etc/nginx/conf.d/ 目录下的所有以 .conf 结尾的配置文件。

可能改动的部分:

  1. keepalive_timeout 65;

    • 默认设置为 65 秒,适用于大多数情况。

    • 对于高并发的场景,可以适当调低以减少资源占用。

  2. tcp_nopush on;

    • 通常注释掉,如果启用,可以优化数据传输,尤其是在发送大文件时。

    • 启用 tcp_nopush 后,Nginx 会尝试将数据块一次性发送到网络,而不是逐个包地发送,从而减少包的数量,提高传输效率。

    • 通常与sendfile on;一起使用。启用 sendfile 后,数据在内核空间中直接从一个文件描述符传输到另一个文件描述符,避免了在用户空间和内核空间之间的多次拷贝,从而提高了传输效率。

  3. gzip on;

    • 通常开启后,可以启用 gzip 压缩以减少传输数据量,提高传输速度。

    • 启用后还需配置 gzip_types 和其他参数,以确保正确压缩所需的文件类型。如

      http {gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
      }
      
    • 其他 gzip 配置选项

      • gzip_min_length:设置压缩的最小文件大小。
      • gzip_comp_level:设置压缩级别(1-9),级别越高压缩率越大,但消耗的 CPU 资源更多。
      • gzip_buffers:设置用于存储压缩结果的缓冲区大小。
      • gzip_vary:设置 Vary: Accept-Encoding 响应头,指示代理服务器和浏览器缓存可以根据请求的 Accept-Encoding 头进行不同的缓存。
    • Gzip 压缩是通过压缩算法(如 DEFLATE)将 HTTP 响应内容压缩成更小的体积,然后再发送给客户端。解压缩的过程是nginx和浏览器自动完成的。

性能优化建议

  • 增加 worker_connections

    • 提高每个工作进程的最大连接数可以显著提升 Nginx 的并发处理能力。
    • 需要确保系统的文件描述符限制足够高。
  • 启用 gzip 压缩

    • 减少传输数据量,尤其适用于文本类型的资源(如 HTML、CSS、JavaScript)。

    • 配置示例:
      nginx
      复制代码
      gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  • 优化 keepalive_timeout

    • 在高并发情况下,适当调低 keepalive 超时时间以减少长时间占用连接资源。
  • 使用 tcp_nopushtcp_nodelay

    • 对于需要优化数据传输性能的场景,可以启用 tcp_nopushtcp_nodelay

2. default.conf

好的,让我们对 default.conf 文件的每一行进行解析:

server

server {listen       80;listen  [::]:80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
基本设置
  1. server { ... }

    • 定义一个虚拟服务器块,包含服务器的配置。
  2. listen 80;

    • 监听 IPv4 的 80 端口,用于处理 HTTP 请求。
  3. listen [::]:80;

    • 监听 IPv6 的 80 端口,用于处理 HTTP 请求。
  4. server_name localhost;

    • 定义服务器的名称为 localhost,用于匹配请求的 Host 头。
日志设置
  1. #access_log /var/log/nginx/host.access.log main;
    • 配置访问日志的路径和格式,此处被注释掉。如果启用,将使用 main 日志格式记录访问日志。
根路径设置
  1. location / { ... }

    • 配置根路径(即所有请求)的处理方式。
  2. root /usr/share/nginx/html;

    • 指定请求的根目录为 /usr/share/nginx/html
  3. index index.html index.htm;

    • 指定默认的索引文件为 index.htmlindex.htm

4. 反向代理

正向代理是代理客户端,客户端对于服务端来说是不可见的。

反向代理是代理服务端,服务端对于客户端来说是不可见的。

1. 模拟3个Web

docker pull python:3.9-slim

在桌面或任意地方新建app.py,内容为

from flask import Flask
import osapp = Flask(__name__)@app.route('/')
def hello():return f"Hello from the backend server running on port {os.environ.get('PORT')}!"if __name__ == "__main__":app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))

启动3个python容器,模拟3个web服务。

C:\Users\mumu\Desktop>docker run --name web1 -d -e PORT=8081 -p 8081:8081 -v /c/Users/mumu/Desktop/app.py:/app/app.py python:3.9-slim sh -c "pip install flask && python /app/app.py"
ab2ded77eafa82fbf4027f5714e5cb71bcb9775696f0e8c5423a70a7916a80acC:\Users\mumu\Desktop>docker run --name web2 -d -e PORT=8082 -p 8082:8082 -v /c/Users/mumu/Desktop/app.py:/app/app.py python:3.9-slim sh -c "pip install flask && python /app/app.py"
e6c5321ea3926157dc2f2d9ed38df53c715da51c496c5ff0e7ff0c4e68c85696C:\Users\mumu\Desktop>docker run --name web3 -d -e PORT=8083 -p 8083:8083 -v /c/Users/mumu/Desktop/app.py:/app/app.py python:3.9-slim sh -c "pip install flask && python /app/app.py"
f0bea8ac956af515fe35159fe94c86e919dfd566b782d06641472621a6299e26

需要保证nginx和3个python在同一个docker网络中,默认应该都是bridge。

2. 链接

使用docker inspect bridge查看刚才3个容器的ip。然后修改nginx的default.conf文件。

upstream backend {server 172.17.0.3:8081;server 172.17.0.4:8082;server 172.17.0.5:8083;
}server {listen       80;listen  [::]:80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}location /app {proxy_pass http://backend/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
  • upstream backend:定义了一个名为 backend 的上游服务器组。

  • location /app { ... }:配置如何处理以 /app 开头的所有请求。

  • proxy_pass http://backend/;:将这些请求代理到上游服务器组 backend。请求的路径 /app 的前缀将被去除,然后传递给上游服务器。例如,/app/foo 将被代理为 /foo

重启服务。

访问localhost/app并多次刷新试试。

5. 负载均衡

在不断刷新页面会发现,反向代理是以“轮询”的方式,将请求分发到3个web服务之一的。

除了轮询之外,还有以下方式。

1. 加权轮询,Weighted Round Robin

可以为不同的服务器设置权重,权重越高,服务器被请求的概率越大。

upstream backend {server 172.17.0.3:8081 weight=3;server 172.17.0.4:8082 weight=2;server 172.17.0.5:8083 weight=1;
}

weight默认为1 。

2. 最少连接,Least Connections

将请求分发给当前连接数最少的服务器,适用于处理时间长、连接占用多的请求。

upstream backend {least_conn;server 172.17.0.3:8081;server 172.17.0.4:8082;server 172.17.0.5:8083;
}

3. IP哈希,IP Hash

根据客户端 IP 地址进行哈希计算,保证同一客户端的请求总是转发到同一台服务器,适用于会话保持。

upstream backend {ip_hash;server 172.17.0.3:8081;server 172.17.0.4:8082;server 172.17.0.5:8083;
}

4. 哈希,Hash

根据自定义的键值进行哈希计算来分发请求。

upstream backend {hash $request_uri;server 172.17.0.3:8081;server 172.17.0.4:8082;server 172.17.0.5:8083;
}

可以使用以下变量作为键值:

  • $remote_addr:客户端 IP 地址
  • $request_uri:请求的 URI
  • $http_cookie:请求的 Cookie

ip_hashhash $remote_addr一样都可以实现同一个客户端的请求分配到同一个后端服务器。但是一般这种情况使用前者更多。

6. HTTPS

首先要安装有openssl,然后创建一个存放证书和私钥的文件夹,比如mkdir C:\nginx\ssl

执行

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout C:\nginx\ssl\nginx-selfsigned.key -out C:\nginx\ssl\nginx-selfsigned.crt

按问题填写信息,就可以。

得到2个文件后,复制到容器中,比如/etc/nginx/ssl目录下,然后再default.conf中添加一个server块,如下

server {listen 443 ssl;listen [::]:443 ssl;server_name localhost;ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;location / {root   /usr/share/nginx/html;index  index.html index.htm;}location /app {proxy_pass http://backend/;}error_page  500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

打开浏览器访问https://localhost

在这里插入图片描述

7. 虚拟主机

一个server块就是一个虚拟主机。

新建一个conf文件和default.conf同一目录。

upstream backend2 {server 172.17.0.3:8081 weight=2;server 172.17.0.4:8082 weight=2;server 172.17.0.5:8083 weight=6;
}server {listen       81;listen  [::]:81;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}location /app {proxy_pass http://backend2/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

重启服务,浏览器访问http://localhost:81/app

利用这种方式,我们可以在同一台机器上部署多个网站。

相关文章:

Nginx基础概念和常用操作

文章目录 1. 安装、启动、连接2. 快速尝试部署网站3. 配置文件1. nginx.conf全局配置事件模块HTTP 模块性能优化建议 2. default.confserver 块基本设置日志设置根路径设置 4. 反向代理1. 模拟3个Web2. 链接 5. 负载均衡1. 加权轮询&#xff0c;Weighted Round Robin2. 最少连接…...

圈复杂度是什么?go语言调整圈复杂度举例

圈复杂度&#xff08;也称为循环复杂度或McCabe复杂度&#xff09;是衡量程序复杂性的一个指标&#xff0c;它通常与代码中的控制流结构&#xff08;如条件语句、循环和函数调用&#xff09;的数量相关。在Go语言中&#xff0c;你可以通过重构代码来降低圈复杂度&#xff0c;从…...

设计模式4-模版方法

设计模式 重构获得模式重构的关键技法1. 静态转动态2. 早绑定转晚绑定3. 继承转组合4. 编译时依赖转运行时依赖5. 紧耦合转松耦合 组件协助动机模式定义结构 要点总结。 例子示例解释&#xff1a; 重构获得模式 设计模式的目的是应对变化&#xff0c;提高复用 设计模式的要点…...

yii2 ActiveForm使用技巧

持续更新&#xff1a; 1、搜索输入框&#xff1a;form-inline <?php $form ActiveForm::begin([action > [index],method > get,options > [class > form-inline] &#xff08;增加此行代码&#xff09; ]); ?>...

【面试】基本数据类型的包装类缓存

目录 1. 说明2. Integer类分析2.1 代码块2.2 字节码2.3 分析2.4 valueOf方法 1. 说明 1.在java中&#xff0c;基本数据类型的包装类&#xff08;Integer、Byte、Character、Short、Long、Boolean&#xff09;的某些值会被缓存。2.以提高性能并减少内存使用。3.这种缓存机制是自…...

6月20日(周四)A股行情总结:A股险守3000点,恒生科技指数跌1.6%

A股三大股指走弱&#xff0c;科创板逆势上扬&#xff0c;半导体板块走强&#xff0c;多股20CM涨停。中芯国际港股涨超1%。恒生科技指数跌超1%。离岸人民币对美元汇率小幅走低&#xff0c;20日盘中最低跌至7.2874&#xff0c;创下2023年11月中旬以来的新低&#xff0c;随后收复部…...

Parallels Desktop 19 for mac破解版安装激活使用指南

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …...

JExcel API使用笔记

JExcel API使用笔记 JExcel是一个开源的支持excel的java类库&#xff0c;广泛利用其api来生成excel报表 API基本使用 1.创建excel文件 workbook Workbook.createWorkbook(file);//传入file文件2.创建sheet页 WritableSheet sheet workbook.createSheet("记录表&quo…...

springCloudAlibaba之分布式网关组件---gateway

gateway-网关 网关spring cloud gatewaygateway初体验gateway整合nacos简写方式 内置路由断言工厂内置断言工厂 自定义路由断言工厂自定义路由工厂 内置/自定义过滤器典型内置过滤器自定义过滤器 全局过滤器自定义全局过滤器 请求日志记录&跨域处理Gateway跨域配置&#xf…...

Springboot项目jar加密

部署的程序进行加密&#xff0c;防止第三方非法拷贝走项目进行二次开发或部署。我们知道java代码编译后生成的以.class结尾的字节码文件或者.jar/.war结尾的可执行文件都是可以反编译生成.java文件的&#xff0c;虽然反编译后生成的.java文件和原本的.java文件有些微差别&#…...

【React】高阶组件

概述 高阶组件并非一个组件&#xff0c;而是增强组件功能的一个函数。 高阶组件的作用是对多个组件公共逻辑进行横向抽离。 高阶组件 – React (reactjs.org) 示例 ChildCom1.jsx import React from react;function ChildCom1(props) {return (<div>这是子组件1<d…...

全面理解-Flutter(万字长文,深度解析)

1、Web 性能差&#xff0c;跟原生 App 存在肉眼可见的差距&#xff1b; 2、React Native 跟 Web 相比&#xff0c;支持的能力非常有限&#xff0c;特定长场景问题&#xff0c;需要三端团队一个一个处理&#xff1b; 3、Web 浏览器的安卓碎片化严重&#xff08;感谢 X5&#x…...

RabbitMQ实战宝典:从新手到专家的全面探索

前言 在当今分布式系统架构中&#xff0c;消息队列已成为不可或缺的一部分&#xff0c;而RabbitMQ作为其中的佼佼者&#xff0c;凭借其强大的功能和灵活性&#xff0c;广泛应用于各种规模的应用场景中。本文将带你从基础概念出发&#xff0c;深入探讨RabbitMQ的核心特性&#…...

6月21日(周五)AH股总结:沪指失守3000点,恒生科技指数跌近2%,多只沪深300ETF午后量能显著放大

内容提要 沪指全天围绕3000点关口来回拉锯&#xff0c;收盘跌破3000点。白酒及光刻机概念集体走低&#xff0c;中芯国际港股跌超2%。CRO医药概念及水利股逆势走强。 A股低开低走 沪指全天围绕3000点关口来回拉锯&#xff0c;收盘跌破3000点&#xff0c;跌0.24%。深成指跌0.04…...

双非本,3年时间从外包到阿里P6(Android岗),看我是怎么逆袭成功的?

而在小公司&#xff0c;因为我也在小公司呆过&#xff0c;所以我有最直接的感受。整个部门技术人员没几个&#xff0c;我又大学刚毕业&#xff0c;带我的人&#xff0c;问啥啥不会&#xff0c;只有一个大佬&#xff0c;跳槽来的&#xff0c;是我们技术总监&#xff0c;有问题谁…...

前端面试题(基础篇七)

一、谈谈你对webpack的看法 webpack是一个模块打包工具&#xff0c;我们可以使用webpack管理我们的模块依赖&#xff0c;编译输出模块所需的静态文件。它可以很好的管理、打包web开发中所需的html、css、JavaScript以及其他各种静态文件&#xff08;使用的图片、字体图标等&am…...

ARM架构简明教程

目录 一、ARM架构 1、RISC指令集 2、ARM架构数据类型的约定 2.1 ARM-v7架构数据类型的约定 2.2 ARM-v8架构数据类型的约定 3、CPU内部寄存器 4、特殊寄存器 4.1 SP寄存器 4.2 LR寄存器 4.3 PC寄存器 二、汇编 1、汇编指令&#xff08;常用&#xff09; 2、C函数的…...

DWG转PDF字体研究记录

1.前言 最近需要对PDF中的符合业务规则的文字进行提取&#xff0c;发现有些文字不是文字信息形式存储&#xff0c;而是polyline形式表达&#xff0c;意味着仅仅有形体上的表达&#xff0c;丢失了原本的文字信息。 经过沟通得知&#xff0c;这些PDF是AutoCAD软件导出的&#xf…...

Java中如何处理日期和时间?

Java中如何处理日期和时间&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Java中处理日期和时间&#xff0c;这是开发中非常常…...

Kubernetes之Pod详解

如何更好的使用好Pod&#xff1f;本文尝试从Pod组成、Namespace共享、控制器实现原理及Pod设计原则4个方面对Pod的使用进行详细阐述&#xff0c;希望对您 一、 Kubernetes Pod介绍 在 Kubernetes 中&#xff0c;Pod 是最小的可部署单元&#xff0c;包含一个或多个容器。Pod 提…...

长亭谛听教程部署和详细教程

PPT 图片先挂着 挺概念的 谛听的能力 hw的时候可能会问你用过的安全产品能力能加分挺重要 溯源反制 反制很重要感觉很厉害 取证分析 诱捕牵制 其实就是蜜罐 有模板直接爬取某些网页模板进行伪装 部署要求 挺低的 对linux内核版本有要求 需要root 还有系统配置也要修改 …...

修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

修复漏洞 漏洞风险等级评定标准主机风险等级评定标准漏洞概括利用注册表修复漏洞查看修复后的漏洞漏洞风险等级评定标准 危险程度危险值区域危险程度说明高7 <=漏洞风险值<= 10攻击者可以远程执行任意命令或者代码,或对系统进行远程拒绝服务攻击。中4 <=漏洞风险值&l…...

Linux的基本指令第二篇

1.cat - 查看文件 语法&#xff1a;cat [选项] [文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …...

php百度云账户余额查询API示例

1、官方文档地址&#xff1a;账户余额查询 请求结构 POST /v{version}/finance/cash/balance HTTP/1.1 Host: billing.baidubce.com ContentType: application/json; charsetutf-8 Content-Length: <Content_Length> Authorization: authorization string 响应参数 …...

自动化开发任务:在PHP框架中实现自定义命令

在现代Web开发中&#xff0c;自动化是提高开发效率和减少重复工作的关键。PHP框架&#xff0c;如Laravel、Symfony等&#xff0c;提供了强大的自定义命令功能&#xff0c;允许开发者创建自己的artisan命令来执行各种自动化任务。本文将详细介绍如何在PHP框架中实现自定义命令&a…...

如何在Java中实现数据加密与解密?

如何在Java中实现数据加密与解密&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Java中实现数据加密与解密&#xff0c;这是保…...

Nginx日志管理之日志分析

Nginx 通常被置于服务器访问的入口&#xff0c;其访问日志可以全局记录用户访问的来源、响应时间&#xff0c;以及用户行为热点等数据&#xff0c;通过对访问日志的分析&#xff0c;可以清晰地了解用户来源、用户行为习惯及自身服务器性能等情况。借助 ELK 的高性能处理能力&am…...

利用 Microsoft ChatGPT 和 OPC UA 改变工业格局

在本文中&#xff0c;我们将探讨开放性在工业物联网中的作用&#xff0c;以及Microsoft为创建基于OPC UA的开放平台所做的努力。我们将讨论 Microsoft 开放战略的四大支柱&#xff0c;以及标准化信息模型以实现互操作性的重要性。此外&#xff0c;我们将深入探讨传统接口和数据…...

力扣-两数之和

文章目录 题目题解方法1-暴力方法2-哈希 题目 原题链接&#xff1a;两数之和 题解 方法1-暴力 我最先想到的方法就是暴力&#xff0c;两层for循环&#xff0c;也能通过。&#xff08;拿到算法题在没有思路的时候暴力就是思路&#xff0c;哈哈哈&#xff09; public class T…...

基于CDMA的多用户水下无线光通信(3)——解相关多用户检测

继续上一篇博文&#xff0c;本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点&#xff0c;本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特…...