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

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

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

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

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include"CommunityToolkit.Mvvm" Version"8.2.2" /><PackageReference Include"Microsoft.Extensions.Hosting" Version"8.0.0" /><PackageReference Include&q…

一张顶20张H100,速度10倍于B200:史上最快AI芯片,华人制造

在谈到 AI、大模型、算力等关键词时&#xff0c;如果要提及硬件产品&#xff0c;很多人应该会不假思索的说出英伟达。的确&#xff0c;在全球都缺算力的环境下&#xff0c;英伟达的地位是独特又难以撼动的。然而就在近日&#xff0c;有一家公司带着自己的 AI 芯片来叫板了。昨天…

吴恩达机器学习 第三课 week1 无监督学习算法(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 &#xff08;1&#xff09;理解异常检测算法&#xff08;Anomaly Det…

lvgl v8.3 windows仿真

1&#xff0c;下载安装codeblocks20.03 https://zenlayer.dl.sourceforge.net/project/codeblocks/Binaries/20.03/Windows/codeblocks-20.03mingw-setup.exe?viasf1 2&#xff0c;下载代码 git clone --recurse-submodules https://github.com/lvgl/lv_port_win_codeblock…

双指针算法——滑动窗口

前言&#xff1a; 滑动窗口本质上也是利用双指针来解决特定情况下的问题。滑动窗口算法思想是通过俩个指针&#xff0c;定义在左边和右边&#xff0c;俩指针同向运动&#xff0c;保持着一个像“窗口”一样的双指针来不停的压缩或者扩展来移动“窗口”&#xff0c;从而找到特定…

DigitalOcean Droplet 云主机新增内置第五代 Xeon CPU 机型

DigitalOcean 近期宣布&#xff0c;在其高级 CPU 服务器&#xff08;Premium CPU-Optimized Droplet&#xff09;队列中引入英特尔第五代Xeon可扩展处理器&#xff08;代号为 Emerald Rapids&#xff09;。作为英特尔产品线中的最新一代用于数据中心工作负载的处理器&#xff0…

LangCell:用于细胞注释的语言-细胞预训练模型

细胞身份包括细胞的各种语义&#xff0c;包括细胞类型、pathway信息、疾病信息等。从转录组数据中了解细胞身份&#xff0c;例如注释细胞类型&#xff0c;是一项基础任务。由于语义是由人类赋予的&#xff0c;如果没有cell-label pair提供监督信号&#xff0c;AI模型很难有效地…

小项目——MySQL集训(学生成绩录入)

ddl语句 -- 创建学生信息表 CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 学生ID,name VARCHAR(50) NOT NULL COMMENT 学生姓名,gender ENUM(男, 女) NOT NULL COMMENT 性别,class VARCHAR(50) NOT NULL COMMENT 班级,registration_date DATE CO…

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统&#xff0c;该系统通过DHT11温湿度传感器采集环境中的温湿度数据&#xff0c;并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示&#xff0c;通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

png格式快速压缩该怎么做?在电脑压缩png图片的方法

png格式的图片如何快速压缩变小呢&#xff1f;现在网络的不断发展&#xff0c;图片是日常用来分享展示内容的一种常用手段&#xff0c;其中使用最多的一种图片格式就是png&#xff0c;png格式具有无损压缩支持透明底的特性&#xff0c;在很多的场景下都会使用。 现在图片的清晰…

Arduino - 线性执行器(支撑或滑杆)

Arduino - 线性执行器(支撑或滑杆) Arduino - 执行器 In this tutorial, we are going to learn: 在本教程中&#xff0c;我们将学习&#xff1a; How linear actuator works 线性执行器的工作原理How to make linear actuator extend or retract. 如何使线性执行器伸展或缩…

百元蓝牙耳机哪款性价比高?盘点性价比高的百元蓝牙耳机品牌

在如今快节奏的生活中&#xff0c;蓝牙耳机已经成为人们日常生活中不可或缺的配件。然而&#xff0c;市面上百元左右性价比高的蓝牙耳机琳琅满目&#xff0c;消费者往往难以选择到一款质量好、耐用的产品。我们希望可以为广大消费者提供一些参考和建议&#xff0c;接下来&#…

基于51单片机电子称—串口显示

基于51单片机电子称设计 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.矩阵键盘组成按键&#xff0c;输入价格结算、打印&#xff1b; 2.用滑动变阻器和ADC0832模拟称重&#xff1b; 3.LCD1602可以显示重量、单价和总价&#xff1b; 4.…

家用洗地机十大品牌什么牌子好用?2024十大爆款洗地机分享

在快节奏的生活中&#xff0c;清洁家居成为了一项繁琐却必不可少的任务。而洗地机的出现&#xff0c;无疑给忙碌的都市人带来了福音。选择一款优质的洗地机可以大大提升我们清洁的效率&#xff0c;改善我们的生活品质。那么&#xff0c;哪家洗地机清洁力最强&#xff0c;更适合…

ONLYOFFICE 桌面编辑器 8.1 版发布:全面提升文档处理效率的新体验

文章目录 什么是ONLYOFFICE &#xff1f;ONLYOFFICE 桌面编辑器 8.1 发布&#xff1a;新功能和改进功能强大的 PDF 编辑器幻灯片版式功能从右至左语言支持多媒体功能增强无缝切换工作模式其他改进和优化总结 什么是ONLYOFFICE &#xff1f; https://www.onlyoffice.com/zh/off…

JavaScript的学习之图片的切换

目录 一、寻找素材 二、编写简单的静态html页面 代码示例 效果展示 三、JS功能的实现 JS代码 完整代码 效果展示 一、寻找素材 随便去网上找几张图片素材 二、编写简单的静态html页面 代码示例 <!doctype html> <html><head><meta charset"…

svn明明都在环境变量中添加了,但还是无法在cmd中生效

svn明明都在环境变量中添加了&#xff0c;但还是无法在cmd中生效 cmd显示原因问题解决 cmd显示 svn不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 原因 安装svn一直点下一步下一步…&#xff0c;没有勾选command line client。 问题解决 1.按下winx&…

如何加密电脑文件?电脑重要文件怎么加密?

在电脑中&#xff0c;我们会存储很多重要文件&#xff0c;包括个人隐私视频、照片&#xff0c;企业机密数据&#xff0c;工作数据等。为了避免重要文件泄露&#xff0c;我们需要加密保护电脑文件。下面我们就来了解一下电脑文件怎么加密&#xff1f; 超级加密3000 当需要加密电…

vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图&#xff1a; 问题描述&#xff1a;一般情况下使用iframe标签就可以实现文件预览&#xff0c;但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件&#xff08;vue-office/docx&#xff09;来实现预览了。下面介绍使用方法。 安装插件&#xff1a;n…