Nginx 配置文件结构解析

2023-10-26

nginx配置文件路径


不同安装方式,nginx的文件存放路径也有所不同。

源码安装配置文件路径:在安装目录下的conf目录下,比如我的安装目录是/usr/local/nginx,那么他的配置文件就在/usr/local/nginx/conf目录下。

yum安装配置文件路径:在/etc/nginx/目录(主配置文件)与/etc/nginx/conf.d目录下。

nginx配置文件的结构


通常源码安装的nginx的配置文件,会是下面这种结构,yum安装的有细微差异(大致是一样的,只是server是通过include引用的独立配置文件)

                                             

http{

upstream{
 
}

server{
 location xxx{
    if(xxx){
  }
}

location xxx{
 ........
  }

}

server {
......
 }

}

location里面还有if块,一般if块不会出现的太多,它是会在比较复杂配置当中做一些条件的判断。

 一个server可以存在多个location,同样一个http可以存在多个server,一个server里面可以包含多个location。一般只配置一个http,这样就一个实例

对于HTTP块来说里面可能有多个server块。对于每个server块来说,里面可能有多个location块。 

1、main全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server

5、location块:配置请求的路由,以及各种页面的处理情况

 

 

NginX HTTP核心模块配置说明


 nginx.conf

HTTP 的配置项必须直属于 http 块、 server 块、 location 块、 upstream 块或 if
server可以写在其他文件当中,通过include指令,将其他文件当中的配置包含到nginx.conf当中,使其生效。
当然了你也可以使用其他的配置文件,你启动nginx的时候配置一下。

 

 

 

虚拟主机与请求的分发 :监听端口、主机名称、location设定


文件路径的定义:设置资源路径、设置访问首页、重定向
内存与磁盘资源的分配:包体只存储在磁盘、存储 HTTP 头的内存大小
网络连接的设置:读取 HTTP 头部的超时时间、读取 HTTP 包体的超时时间
MIME 类型的设置:默认 MIME type MIME type 文件扩展映射
对客户端请求的限制:按 HTTP 方法名限制请求、 HTTP 请求包体的最大值
文件操作的优化: sendfile 系统调用、打开文件缓存
对客户端请求的特殊处理:忽略不合法的 HTTP 头部、 DNS 解析地址

 

 

 

解析配置文件


全局配置(设置的指令将影响其他所有设置,一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等)

  • user  nginx;

指定nginx的工作进程的用户及用户组,默认是nobody用户。

[root@localhost ~]# ps -ef | grep nginx
nobody    14303  14302  0 16:01 ?        00:00:00 nginx: worker process

通常而言,会给其定义一个用户。如user nginx,那么nginx就有权限来管理其发布目录。这个用户必须存在

  • worker_processes  8;  --指定工作进程的个数,默认是1个。具体可以根据服务器cpu数量进行设置,比如cpu有4个,可以设置为4。一般来说,worker_processes会设置成CPU个数,如果不知道cpu的数量,可以设置为auto。nginx会自动判断服务器的cpu个数,并设置相应的进程数。(使用lscpu来查看你的cpu的个数)
  • worker_cpu_affinity:为每个进程分配CPU,将八个进程分配给8个CPU,当然也可以写多个,或者将一个进程分配给多个CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
  • worker_rlimit_nofile 65535; 进程的最大打开文件数限制。这样nginx就不会有“too many open files”问题了,最好与ulimit -n的值保持一致。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload  --重新加载配置文件可以看到效果,worker进程由nginx来管理,不是由原来的nobody来管理,而且有两个worker进程在工作

[root@localhost ~]# ps -ef | grep nginx
root      14302      1  0 16:01 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     14444  14302  0 17:55 ?        00:00:00 nginx: worker process
nginx     14445  14302  0 17:55 ?        00:00:00 nginx: worker process

master进程和worker进程的关系:master进程是nginx最主要的一个进程。主要是用来接收管理员给其发出的信号。Master下面可以由多个worker进程,可以根据其配置文件生成多个worker进程。worker进程就是用来接收用户的请求,所有进程都可以去抢用户的请求,没有互斥锁。如果多个worker的其中一个进程挂掉了,那么master进程会回收该进程,并生成新的worker进程,是永远保持你配置文件里指定的worker进程数进行工作的。

[root@localhost ~]# ps -ef | grep nginx
root      14302      1  0 16:01 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     14444  14302  0 17:55 ?        00:00:00 nginx: worker process
nginx     14445  14302  0 17:55 ?        00:00:00 nginx: worker process
root      14465  14400  0 18:09 pts/0    00:00:00 grep --color=auto nginx

[root@localhost ~]# kill -9 14444   --可以看到杀死其中的一个worker进程,那么master立马就生成新的worker进程

[root@localhost ~]# ps -ef | grep nginx
root      14302      1  0 16:01 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     14445  14302  0 17:55 ?        00:00:00 nginx: worker process
nginx     14466  14302  0 18:10 ?        00:00:00 nginx: worker process
  • error_log  logs/error.log;   --默认使用这个
#error_log  logs/error.log  notice;  
#error_log  logs/error.log  info;  

设置nginx的错误日志路径,并设置相应的输出级别。如果编译时没有指定编译调试模块,那么 info就是最详细的输出模式了。

如果有编译debug模块,那么debug时最为详细的输出模式。这里设置为默认就好了。

pid        logs/nginx.pid;

指定nginx进程pid的文件路径 ,Nginx进程是作为系统守护进程在进行,需要在某个文件中保存当前运行程序的主进程号,

events {
use epoll;
worker_connections  1024;
multi_accept on
}

multi_acceptoff – A worker process accepts one new connection at a time (the default). If enabled, a worker process accepts all new connections at once.We recommend keeping the default value (off), unless you’re sure there’s a benefit to changing it. Start performance testing with the default value to better measure predictable scale.

multi_accept on:设置是否允许同时接受多个网络连接,只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。

events :这个指令块用来设置工作进程的工作模式以及每个进程的连接上限。

use :用来指定nginx的工作模式,通常选择epoll,除了epoll,还有select,poll。

worker_connections :定义每个工作进程的最大连接数,默认是1024。

http指令块,即web服务器的相关配置


include: include是一个引用函数   mime.types; 定义数据类型

如果用户请求lutixia.png,服务器上有lutixia.png这个文件,后缀名是png,根据mime.types,这个文件的数据类型应该是image/png,将Content-Type的值设置为image/png,然后发送给客户端

  • default_type application/octet-stream:设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的。此时,用浏览器访问PHP文件就会出现下载窗口。

  •  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  logs/access.log  main;

定义日志文件格式,并默认取名为main,可以自定义该名字。也可以通过添加,删除变量来自定义日志文件的格式,main后面的内容定义了日志的格式。

  • access_log :定义访问日志的存放路径,并且通过引用log_format所定义的main名称引用其输出格式,如果定义了多个日志格式,可以来引用其中一种格式
[root@localhost conf]# tail -f /usr/local/nginx/logs/access.log
192.168.179.99 - - [07/Mar/2020:20:51:30 +0800] "GET /index.html HTTP/1.0" 200 612 "-" "ApacheBench/2.3"
127.0.0.1 - - [07/Mar/2020:21:35:29 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0"
  • sendfile on :用于开启高效文件传输模式。直接将数据包封装在内核缓冲区,然后返给客户,将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞。

tcp_nopush on;

tcp_nodelay on;

  • keepalive_timeout 65 :设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接。

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

提示:可以用netstat -ntlpa |grep 80 查看链接状态

[root@localhost ~]# netstat -ntplna | grep 80  --使用浏览器浏览nginx门户网站,然后看到建立连接了

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14875/nginx: master
tcp        0      0 192.168.179.99:80       192.168.179.4:62065     ESTABLISHED 15340/nginx: worker
[root@localhost ~]# netstat -ntplna | grep 80  --65秒之后再看看,可以看到断开连接了

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14875/nginx: master
tcp        0      0 192.168.179.99:80       192.168.179.4:62065     TIME_WAIT   -    

  • keepalive_requests 100; 设置nginx在保持连接状态最多能处理的请求数,到达请求数,即使还在保持连接状态时间内,也需要重新连接。

这个值根据生存环境而设定,比如京东的网页,访问首页的请求就100多次了,比如每个图片都是一个资源,都需要请求,所以要根据网页的文件个数来设定。(对于爬虫的程序65秒足够将官网的数据爬完,所以除了定义keepalive_timeout的值之外还可以限制在65秒内可以访问多少次)

  • gzip on :开启压缩功能,减少文件传输大小,节省带宽。
  • gzip_min_length:设置最小的压缩长度,官方设置1K,如果文件大小小于1K,不进行压缩,大于1K就需要压缩gzip_min_length 1k;(当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。)
  • gzip_types:压缩的类型,设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩。图片视频一般是已经压缩了的,再压缩效果也不是很大,所以需要压缩的格式为XML格式。gizp_types text/plain text/xml;(将普通文件和XML文件进行压缩)
[root@localhost epel-source]# ls -lh /var/cache/yum/x86_64/7/epel/metalink.xml -rw-r--r-- 1 root root 8.8K Mar  8 10:48 /var/cache/yum/x86_64/7/epel/metalink.xml   --将.xm文件拷贝到nginx的发布目录下面去,大小为8.8K
[root@localhost epel-source]# cp /var/cache/yum/x86_64/7/epel/metalink.xml /usr/local/nginx/html/

然后打开浏览器去访问.xml文件,可以看到压缩后只有2.1K,可以看到压缩了四分之一

  • gzip_comp_level 3; 压缩级别,默认是1,一般设置为3

 

server指令块:用于定义虚拟主机的,指令主要用于指定主机和端口


一个server表示一个网站

  • server :用来定义虚拟主机
  • listen :设置监听端口,默认为80端口,端口可以根据需要修改为8080
  • server_name :网站域名,多个域名通过逗号隔开,默认是localhost,可以修改为www.lutixia.com;
[root@localhost ~]# netstat -tpln | grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      14875/nginx: master

测试一下(端口8080 域名 www.lutixia.com)

修改windows C:\Windows\System32\drivers\etc下的hosts文件,用来解析域名

加上这一行   192.168.179.99  www.lutixia.com  

如果要解析多个域名 192.168.179.99  www.lutixia1.com  www.lutixia2.com  www.lutixia3.com

可以看到访问成功了!

  • charset :设置网页的默认编码格式,一般设置为charset utf-8;
  • access_log :指定该虚拟主机的独立访问日志,会覆盖前面的全局配置日志文件。如果有有多个虚拟主机,那么每个虚拟主机都需要配置自己的access_log
  • access_log  logs/lutixia.access.log  main;  --如果这样配置,那么就会覆盖全局的日志文件,这个引用main是前面定义的日志格式
[root@www ~]# ls /usr/local/nginx/logs/
access.log  error.log  lutixia.access.log  nginx.pid


[root@www logs]# tail -1f /usr/local/nginx/logs/lutixia.access.log
192.168.179.4 - - [08/Mar/2020:20:08:58 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36" "-"

location指令块:配置请求的路由,以及各种页面的处理情况


location / {
            root   html;
            index  index.html index.htm;

        }

location:来定义资源路径,默认是直接给一个/根目录,所有资源都从根目录下去找,这个根目录就是发布目录

  • index :设置默认的索引文件
  • error_page :定义访问错误返回的页面,凡是状态码是500 502 503 504 都会返回这个页面。

[root@www html]# vim /usr/local/nginx/html/404.html  --这个error page得自己去定义

[root@www html]# cat /usr/local/nginx/html/404.html

"this is error page,file not found!"

error_page  404     =200              /404.html; --定义返回的状态码为200

error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;           }

这是第二种定义找不到页面的方法,其实和上面的error_page  404     =200              /404.html是一样的,上面可以写成

 error_page  404     =200              /404.html;

   location=/404.html{

      root html;  --这里的root html代表根目录是html,这里的root不是root用户,是代表根目录符号/

}

error_page  404     =200              /404.html;

   location=/404.html{

      root  /data/;  --root /data/表示根目录为绝对路径/data/,那么必须保证/data/下有404.html

}

root /data/表示根目录为绝对路径/data/

还是使用第一种最直观 error_page  404     =200              /404.html; 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 配置文件结构解析 的相关文章

  • nginx 代理到子目录中的远程 Node.js Express 应用程序

    我完全陷入了这样一种情况 我想在一台服务器上拥有多个节点应用程序 通过让应用程序在不同的端口上运行 我可以正常工作 我可以通过输入 IP 地址和端口来访问应用程序 我想通过使用不同的子目录来代理来自 nginx 服务器的应用程序 如下所示
  • uwsgi协议比http协议快吗?

    我正在尝试部署 django 应用程序的各种设置 我的第一选择是使用带有 mod wsgi 的简单 apache 服务器 我之前已经实现了该服务器供私人使用 由于当前的部署是供公众使用的 因此我正在考虑各种选择 根据网上提供的信息 使用 n
  • 禁用 Kubernetes NGINX 入口的 SSL 重定向

    默认情况下 在 Kubernetes NGINX 入口中启用 SSL 重定向 如何禁用此功能 目前的实施如下 apiVersion extensions v1beta1 kind Ingress metadata name project
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • Docker 网络 - nginx:[emerg] 在上游找不到主机

    我最近开始迁移到 Docker 1 9 和 Docker Compose 1 5 的网络功能来取代使用链接 到目前为止 通过链接 nginx 通过 docker compose 连接到位于一组中不同服务器中的 php5 fpm fastcg
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • nginx - 使用 ssl 支持设置多个 server_name

    我很想使用 nginx 来为具有多个域名和 SSL 的网站提供服务 webmail example com webmail beispiel de 两者都使用相同的虚拟主机 因此我只设置 server name 两次 问题是 我需要 ngi
  • nginx proxy_pass 省略路径

    我已经配置了 nginx 反向代理 location root var www html index index html location login proxy pass http 127 0 0 1 9080 proxy set he
  • 构建具有“RUN apt-get update”的 Dockerfile 给我“rootfs 内的监狱进程导致‘权限被拒绝’”

    我的 Docker 主机是 Ubuntu 19 04 我使用 snap 安装了 docker 我创建了一个 Dockerfile 如下所示 FROM ubuntu 18 04 USER root RUN apt get update RUN
  • 设置 nginx 具有多个 IP

    我的 nginx 配置文件位于 etc nginx sites available 下 有两个上游说 upstream test1 server 1 1 1 1 50 server 1 1 1 2 50 upstream test2 ser
  • 生产中的静态文件出现 Django 301 和 403 禁止错误

    我正在尝试使用 nginx 和 Gunicorn 在 ubuntu 14 04 vps 上部署 django 网站 但是我的 css 文件和 js 文件没有加载 我在默认的 django 开发服务器上开发了它 它运行得很好 但是当我部署我的
  • 部署解耦的前端+后端应用程序

    我使用两个完全解耦的组件编写了一个网络应用程序 一个基于 Place Framework 并服务以下请求的 API 类型 api 任何客户 基于解耦的前端AngularJS建造使用grunt build 现在 前端与API但我希望这两个单元
  • 将虚拟主机分配给 Docker 端口

    我设置了通配符 DNS 以便对自定义域 foo 的所有 Web 请求都映射到 Docker 主机的 IP 地址 如果我有多个运行 Apache 或 Nginx 实例的容器 每个容器都会将 Apache 端口 80 映射到某个外部入站端口 我
  • 静态资源和非静态资源有什么区别?

    我主要是一名前端开发人员 设计师 但最近我一直在探索端到端解决方案 昨天 我使用平均堆栈完成了一个 TODO 应用程序 并想开始探索我的 VPS 的部署选项 话虽这么说 有人建议我使用 nginx 作为反向代理来提供静态资源 不幸的是 我陷
  • 使用 nginx 将 PATCH 请求代理为 POST

    我尝试使用 nginx 将 HTTP PATCH 请求重定向到 HTTP POST 请求 我还尝试了以下配置 但它不起作用 我收到 400 错误请求 http map request method my method default req
  • nginx 代理重定向,带有来自 uri 的端口

    我正在尝试使用 nginx 进行重定向 这个想法是将某些端口的 uri id 1234 重定向到 localhost 1234 固定端口的重定向 location id 1234 rewrite id 1234 1 break proxy
  • 当 ssl 和 http2 打开时,Nginx 似乎忽略 server_name

    我有这个 nginx 配置 server listen 80 default server listen 80 default server server name www example com return 301 https www
  • NGINX 返回 405 不允许使用 POST 方法

    我有这个default conf server listen 443 ssl root etc nginx json server name myserver com ssl certificate etc ssl certs server
  • 如何使用 Nginx 将下划线替换为破折号

    我第一次使用Nginx 对它基本上一无所知 我需要将 100 多个 URL 中的 替换为 我想一定有一种简单的方法可以用 Nginx 来做到这一点 但在 Google 上找不到任何东西 Thanks Edit 我的网址例如 http www
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这

随机推荐

  • 因误删文件导致CentOS7开机卡死无法进入图形登录界面

    目录 1 背景 2 解决步骤 1 背景 这几天在清理电脑 需要删除虚拟机 为此写下了Linux系统下卸载VMware Workstation软件 nanke yh的博客 CSDN博客 但是同时怕有残留 自己全局搜索了vm 删除了部分带有vm
  • SpringBoot之整合Shiro(最详细)

    1 SpringBoot整合Shiro思路 2 环境搭建 2 1 创建项目 2 2 引入依赖 pom xml
  • 微信小程序html2canvas,微信小程序之Canvas填坑

    1用能境战求道 重件开又是正易里是了些之框 WXML CANVAS隐藏问求圈分件圈浏第用代是水刚道 的它还题 2需朋者说上事是础一发一开程和开数的目前间 JS CANVAS 新直能分支调二浏页器朋代说 事刚绘制图片 这里要注意的遇新是直朋能
  • [npm] npx 介绍与使用说明

    npm npx 介绍与使用说明 npm 的由来 npx 是什么 npx 特点 npx 的特点 项目安装包的使用 全局安装包的避免 指定工具包版本 no install 参数和 ignore existing 参数 使用不同版本的 node
  • linux开启vt虚拟化,VT虚拟化如何开启

    VT虚拟化如何开启 VT是什么意思 VT虚拟化怎么开启呢 下面小编为大家分享VT虚拟化开启技巧 欢迎大家参考 VT是什么意思 VT是英文virtualizationtechnology的缩写 其意思是CPU虚拟化技术 我们安装的手游助手就是
  • 【机器学习】如何根据数据集选择适合的模型

    Is it because we have many features in our data sheet 因为我们的数据表中有很多特征吗 Or is it because the feature list does not only co
  • SpringBoot(四)SpringBoot搭建简单服务端

    通过之前的几篇文章相信大家已经对SpringBoot项目开发有了一个基本的了解 本篇 介绍下如何使用SpringBoot搭建一个简单的服务端 实现一个新用户注册的场景 供前端和移动端去使用 本篇需要你对SpringBoot的starter
  • Windows常用命令整理

    之前写了一篇关于Windows快速打开服务 陌客依天涯的博客 CSDN博客 服务快捷键 的文章 有表示windows还有很多常用的 那就整理一下 分享跟多点 希望对大家有用 1 mstsc 快速开启远程连接客户端 2 regedit 快速打
  • 节流防抖详解及代码实现

    防抖 原理 在事件被触发n秒后再执行回调 如果在这n秒内又被触发 则重新计时 适用场景 按钮提交 防止多次提交按钮 只执行最后提交的一次 搜索框联想 防止联想发送请求 只发送最后一次输入 防抖小例子
  • C++打开特定编码格式的文件(utf-8)

    FileEncoding cpp 定义控制台应用程序的入口点 include stdafx h include
  • 具身智能综述和应用(Embodied AI)

    什么是具身智能 目前人工智能的进展 在诸多数据源和数据集 Youtube Flickr Facebook 机器计算能力 CPU GPU TPU 的加持下 已经在CV NLP上取得了许多任务 如目标检测 语义分割等 的重大进展 但目前大部分深
  • 一定要先看!Kubernetes+KubeSphere+DevOps的安装与踩坑

    1 安装 本人于2020 9安装的k8s 不同时间段的官方资料会有变动 从而使初学者很抓狂 比如链接404等 所以一定要先看我这篇 尽量一次全部安装成功 不然重装又会出现许多疑难杂症 官方安装文档 首先 我按照文档一步一步操作 前面都没有问
  • 一手好SQL是如何练成的

    一手好SQL是如何练成的 一 Mysql性能 1 1 最大数据量 1 2 最大并发数 1 3 查询耗时0 5秒 1 4 实施原则 二 数据表设计 2 1 数据类型 2 1 避免空值 2 2 text类型优化 三 索引优化 3 1 索引分类
  • 怎么解决java.lang.NoClassDefFoundError错误

    怎么解决java lang NoClassDefFoundError错误 ClassNotfoundException VS NoClassDefFoundError ClassNotfoundException时在编译时JVM加载不到类或
  • Revit API 开发 (2): 显示选中的图元(element)

    如何创建一个Revit AddIn 项目参考 Revit API 开发 1 Hello World 重载IExternalCommand的Execute方法 通过UIApplication ActiveUIDocument Selectio
  • 连接数据库时,出现报错pymysql.err.OperationalError: (2003,“Can‘t connect to MySQL server

    问题 连接数据库时 出现报错pymysql err OperationalError 2003 Can t connect to MySQL server on mtisp m dbsit sfcloud local Errno 10109
  • python读写复制文件

    python读写复制文件 1 读取文件 打开文件 fo open D LPE E python python index txt r print 文件名为 fo name line fo read print 读取的内容 s line 关闭
  • Hudi:初识Hudi

    是什么 Hudi是什么 可以说Hudi是一个数据湖或是数据库 但它又不是数据湖或是数据库 笔者理解为Hudi是除开计算引擎的Hive 众所周知 Hive是一个计算框架 但是现在我们更多的是使用Spark基于Hive对HDFS中文件提供的Sc
  • C++实现在文件中输入26个英文字母

    步骤一 检查文件是否存在 如果不存在就创建文件 步骤二 在文件中输入26个英文字母 首先要了解如何输出26个英文字母 方法如下 include
  • Nginx 配置文件结构解析

    nginx配置文件路径 不同安装方式 nginx的文件存放路径也有所不同 源码安装配置文件路径 在安装目录下的conf目录下 比如我的安装目录是 usr local nginx 那么他的配置文件就在 usr local nginx conf