知行合一
Github
顺翔的技术驿站
顺翔的技术驿站
  • README
  • ABOUTME
  • Computer Science
    • 数据结构与算法
      • 位运算以及位图
      • 随机数
      • 递归
      • 经典排序算法
      • 经典查找算法
      • 数组和动态数组
      • 链表
      • 栈和队列
      • 树
      • 哈希表
    • 计算机网络
      • 物理层
      • 数据链路层
      • 网络层
        • TCP
      • 运输层
      • 应用层
      • HTTP
        • HTTPS的原理
        • DNS详解
        • file协议
        • 邮件协议
    • 设计模式
      • 单例模式
      • 建造者模式
      • 原型模式
      • 工厂模式
      • 享元模式
      • 代理模式
      • 装饰者模式
      • 桥接模式
      • 适配器模式
      • 外观模式
      • 组合模式
      • 事件驱动
      • 有限状态机
      • 备忘录模式
      • 模板方法模式
      • 策略模式
      • 迭代器模式
      • 命令模式
      • 解释器模式
    • 加密与解密
      • 数字证书原理
      • cfssl
  • Programming Language
    • 编程语言学习要素
    • Java
      • 集合
        • List
          • ArrayList
          • Vector
          • Stack
          • LinkedList
        • Iterator
        • Set
          • HashSet
          • TreeSet
        • Map
          • HashMap
          • HashTable
          • TreeMap
          • LinkedHashMap
      • 常用API
        • 日期时间处理
        • System
        • Random
        • Arrays
        • Scanner
        • 格式化输出
      • java特性
        • java5特性
        • java8特性
        • java9特性
        • java10特性
        • java11特性
      • 并发编程
        • 线程基础
        • 线程同步:synchronized及其原理
        • 线程同步: volatile
        • 锁机制
        • 锁的分类与对应的Java实现
        • JUC:同步辅助类
        • JUC: AtomicXXX
        • 线程池
        • ThreadLocal详解
      • 测试
        • 使用JMH进行基准测试
      • JVM
        • 强引用、软引用、弱引用、虚引用
        • jvm内存模型
        • jvm优化
        • GC算法与回收器
        • 静态绑定与动态绑定
      • ORM
        • Mybatis
          • IBatis常用操作
      • Web编程
        • Servlet详解(一)
        • Servlet详解(二):request和response对象
        • Servlet详解(三):会话技术与Cookie
        • JSP详解(一):页面构成、EL表达式
        • JSP详解(二):九大内置对象
        • JavaWeb的编码问题
        • Thymeleaf
      • Velocity
      • Java日志框架总结
      • Spring
        • SpringIOC
        • SpringMVC
        • SpringBoot源码
      • 其他
        • Apache Commons Lang使用总结
        • 使用FtpClient进行ftp操作
        • Java PDF操作总结
        • Java使用zip4j进行文件压缩
        • Java解析Excel总结
    • JVM Language
      • Groovy
      • Scala
    • Kotlin
      • 变量和常量
      • 数据类型
        • 基本数据类型
        • 容器类型
        • 函数类型
        • null和null安全
      • 流程控制
      • 包
      • 面向对象
    • Golang
      • 关键字与标识符
      • 变量和常量
      • 数据类型
      • 函数
      • 常用API
        • 时间日期处理
        • 字符串操作
        • 正则表达式
      • 控制语句
      • 包package
      • 面向对象
      • 错误处理
      • 命令行编程
        • Cobra
      • 文件操作
      • 测试
      • 并发编程
        • sync包详解
      • 数据格式与编码
        • 使用encoding包操作xml
        • 使用encoding包操作json
        • 使用magiconair操作properties
        • 使用go-ini操作ini
      • 反射
      • Build Tools
        • Go Module
        • Go Vendor
      • 日志框架
        • zap日志框架
      • Web编程
        • Gin
    • JavaScript
      • 数据类型
      • ECMAScript
        • ECMAScript6
      • NodeJS
    • TypeScript
      • 变量和常量
      • 数据类型
      • 函数
      • 面向对象
      • 泛型
      • Build Tools
        • tsc编译
        • 与webpack整合
    • Python
      • BuildTools
        • requirements.txt
        • Ananconda
    • Swift
      • 变量和常量
    • Script Language
      • Regex
      • BAT
      • Shell
    • Markup Language
      • Markdown
      • Yaml
  • Build Tools
    • CMake
    • Maven
      • 搭建Nexus私服
      • maven使用场景
    • Gradle
  • Version Control
    • Git
      • Git工作流
      • Git分支管理
      • Git Stash
      • Git Commit Message规范
      • .gitttributes文件
    • SVN
  • Distributed
    • 分布式基础理论
      • 互联网架构演变
      • 架构设计思想AKF拆分原则
      • CAP理论
      • BASE理论
    • 一致性
      • 一致性模型
      • 共识算法
        • Paxos
        • Raft
        • ZAB
      • 复制
        • 主从复制
        • Quorum机制
        • Nacos Distro协议
      • 缓存一致性
        • 双写一致性
        • 多级缓存一致性
    • 事务一致性
      • Seata
      • 本地消息表实现方案
      • 关于dpad的事务问题的分析
    • IO
    • RPC协议
    • 序列化
    • Session共享
    • 分布式协调
      • Zookeeper
        • zk集群4节点搭建
    • 服务治理
      • Dubbo分布式治理
    • 分布式ID
      • 分布式ID生成策略总结
    • 分布式锁
    • 应用服务器
      • Tomcat
    • Web服务器
      • Nginx
        • Nginx的基本配置
        • ab接口压力测试工具
        • nginx模块
        • 随机访问页面
        • 替换响应内容
        • 请求限制
        • 访问控制
        • 状态监测
        • nginx应用场景
        • 代理服务
        • 负载均衡
        • 缓存
        • 静态资源服务器和动静分离
        • 附录
      • Kong
    • 缓存中间件
      • Caffeine
      • memcached
      • Redis
        • Centos下安装Redis
        • RatHat下安装Redis
    • 数据库中间件
      • ShardingSphere
      • MyCat2
    • 消息中间件
      • Kafka
      • RocketMQ
  • Microservices
    • 服务发现
      • Nacos注册中心
      • Consul
    • 配置中心
      • Apollo
    • 消息总线
    • 客户端负载均衡
    • 熔断器
    • 服务网关
    • 链路追踪
      • Skywalking
  • Domain-Specific
    • Auth
      • 有关权限设计的思考
      • 认证方式
      • JWT
    • 任务调度
      • QuartzScheduler
      • Elastic-Job
      • XXL-Job
      • PowerJob
    • 工作流
      • BPM
      • Activiti
      • Flowable
    • 规则引擎
      • Drools
  • Architect
    • DDD领域驱动设计
      • 三层架构设计
      • 四层架构设计
    • Cola
    • 代码设计与代码重构
      • 重构改变既有代码设计
      • 枚举规范化
      • 接口幂等
      • 限流
      • 历史与版本
      • 逻辑删除和唯一索引
      • 业务对象设计
    • 单元测试
      • SpringBoot单元测试实践
    • 项目管理
    • APM
      • SkyWalking
      • Arthas
    • 性能优化
      • 接口性能优化
    • 系统设计
      • 流程中台
      • 短信中台
      • 权限中台
        • 智电运维平台组织架构改造二期
  • Database
    • Oracle
      • Docker下安装oracle11g
    • IBM DB2
    • Mysql
      • 安装Mysql
      • 用户与权限管理
      • MySQL的逻辑架构
      • 存储引擎
      • 索引详解
      • MySql的列类型
      • MySql中表和列的设计
      • MySql的SQL详解
      • 锁机制
      • 事务
      • Mysql函数总结
      • MySql存储过程详解
      • MySql触发器详解
      • Mysql视图详解
      • Mysql中Sql语句的执行顺序
      • 配置MySql主从和读写分离
      • MySql的备份策略
      • MySql分库分表解决方案
      • MySql优化总结
      • MySQL实战调优
        • schema与数据类型优化
    • Mongo
  • File System
    • README
    • HDFS
    • FastDFS
    • MinIO
  • Linux
    • 常用的Linux命令
    • vim
    • Linux磁盘管理
    • Linux系统编程
    • RedHat
      • rpm包管理器具体用法
    • Ubuntu
      • Ubuntu下录制屏幕并做成gif图片
      • Ubuntu20.05LiveServe版安装
  • DevOps
    • VM
      • 新建一个新的Linux虚拟机需要配置的东西
      • VMware桥接模式配置centos
      • VMwareFusion配置Nat静态IP
    • Ansible
    • Container
      • Docker
        • Dockerfile详解
        • DockerCompose详解
      • Containerd
    • Kubernetes
      • 安装k8s
        • 使用Minikube安装k8s
        • centos7.x下使用kubeadm安装k8s1.21
        • ubuntu20下使用kubeadm安装k8s1.21
        • centos7.x下使用二进制方式安装k8s1.20
        • 使用DockerDesktop安装K8s(适用M1芯片)
      • 切换容器引擎
      • 使用k8s部署项目的流程
      • 集群维护-备份升级排错
    • Gitlab
      • GitlabCI/CD
    • CI/CD
      • ArgoCD
  • Big-Data
    • Hadoop
    • MapReduce
    • HDFS
  • Front-End
    • Android
      • Log的使用、自定义Log工具类
      • Android倒计时功能实现
      • 解决ViewDrawableLeft左侧图片大小不可控的问题
      • AndroidSQLite基本用法
      • View的生命周期
      • 工具类
      • WebView详解
      • ViewTreeObserver类监听ViewTree
      • 在onCreate中获取控件的宽高等信息的几种方法
      • View的foreground属性
        • MaterialDesign
          • BottomNavigationBar
          • CardView
          • Elevation高度、shadows阴影、clipping裁剪、tint着色
          • TouchFeedbackRipple波纹动画
      • Volley完全解析——使用、源码
      • Android围住神经猫的实现
      • LookLook剖析,架构概述——MVP、Retrofit+RxJava
      • Android性能优化之渲染
    • Browser
      • 浏览器的工作原理
    • HTML
      • DOCTYPE标签、XHTML与HTML的区别
    • CSS
      • CSS的继承性、层叠性、权重
      • CSS浮动float详解(一):标准文档流
      • CSS浮动float详解(二):使用float
      • CSS浮动float详解(三):清除浮动方案
    • Tools Lib
      • JavaScript 文件下载解决方案-download.js
      • js-url 用于url的js开源库
      • jsuri 用于操作url的js开源库
      • window offset
    • React
      • 模块化和组件
      • 组件的三大核心属性
      • 事件处理
      • 表单数据收集
      • 生命周期
      • DOM的diff算法
      • 工程化
        • 脚手架create-react-app
        • 工程结构和模块化
      • 路由
  • Design
    • 产品设计
      • 交互设计
由 GitBook 提供支持
在本页
  • 默认的Nginx配置文件
  • 配置块说明
  • 日志配置
  • 日志切割
  • 虚拟主机配置
  • location匹配规则
  • 常用的匹配规则
  • 配置文件详解

这有帮助吗?

在GitHub上编辑
  1. Distributed
  2. Web服务器
  3. Nginx

Nginx的基本配置

默认的Nginx配置文件

核心配置文件: ${JAVA_HOME}/conf/nginx.conf,如果使用yum安装,则位于/etc/nginx/nginx.conf,下面是nginx默认的配置文件:

# 全局块
user  nginx; # 设置用户以及用户组
worker_processes  1; # 工作进程的数量

error_log  /var/log/nginx/error.log warn; # 错误日志
pid        /var/run/nginx.pid; # pid文件位置

# events块
events {
    worker_connections  1024; # 每个进程允许的最大连接数
}

# 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 零拷贝机制开关
    sendfile        on;
    #tcp_nopush     on;
	# 客户端与服务端的超时时间,单位s
    keepalive_timeout  65;

    #gzip  on;
    
 	# 这里,导入了conf.d中所有的配置, 默认包含一个default.conf文件
    include /etc/nginx/conf.d/*.conf;
}
# default.conf
server {
    # 虚拟主机监听的端口
    listen       80;
    # 虚拟主机名称,可用于配置域名
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
	# 路径匹配
    location / {
        # 此路径代表静态文件的根路径
        root   /usr/share/nginx/html;
        # 默认的index页面
        index  index.html index.htm;
    }
	# 当出现状态404时,跳转到指定的页面页面
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    # 当发生500 502 503 504 状态时,重定向到/50x.html页面
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

配置块说明

Nginx的配置文件分为多个块组成,主要由三个大块组成:

  • 全局快

  • events

  • http块

...              #全局块

events {         #events块
   ...
}
 
http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

各个块的作用如下:

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

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

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

  • server块:配置虚拟主机的相关参数,一个http中可以有多个server, 比如tomcat服务就是一个server。

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

日志配置

注意,Nginx有两个日志文件,一个为error_log,另一个为access_log。前者用于记录服务器错误日志(启动时发现配置文件出错),而后者则是记录访问日志(包含访问地址、响应状态等,可配置)。

# 配置全局日志文件位置, 位于全局块中
# 指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别有:debug|info|notice|warn|error|crit|alert|emerg
error_log log/all.log;
error_log log/debug.log debug;
error_log log/error.log error;

http {
    include       mime.types;
    default_type  application/octet-stream;
    # nginx中记录了很多信息,每个信息就是一个变量,log_format就是将变量组织到一起记录到access_log中
    # 配置日志格式,声明一个main格式,其中$xx代表nginx变量,变量参见附录一
    # 注意,只可以配置到这里,如果需要不同的server进行不同日志格式,可以定义多个格式,并指定
    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指定访问日志的路径,并指定main格式
    access_log  logs/access.log  main;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

日志切割

mv access.log access.log.20180101
kill -USR1 Nginx 主进程号 # 让nginx重新生成一个日志文件
# 可以写一个定时执行的脚本,进行每日的日志切割

虚拟主机配置

什么是虚拟主机?

虚拟主机是使用特殊的软硬技术,将一台计算机主机分成一台台“虚拟”的主机。每一台虚拟主机都具有的独立的域名和IP地址(或者共享ip地址),并具有完整的Internet服务器功能。虚拟主机完全独立,在外界看来,每台虚拟主机和一台独主机的表现完全相同。

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    # 配置一台虚拟主机,所有www.test.com:80的请求都会被此虚拟机处理(可以通过修改host文件模拟)
    server {
        # 监听端口
        listen 80;
        # 配置域名
        server_name www.test.com;
        # 路径匹配
        location / {
            # 根路径
            root html;
            index index.html index.htm;
        }
    }
    
    # 针对8080端口监听的虚拟主机,所有localhost:8080的请求都会被此虚拟主机处理
    server {
        listen 8080;
        server_name localhost;
        location /{
            root html/port;
            index index.html;
        }
    }
}

location匹配规则

location就是对请求URL路径的匹配,他共有以下几种匹配规则:

匹配符号
含义

=

精准匹配

^~

表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)

~

开头表示区分大小写的正则匹配

~*

开头表示不区分大小写的正则匹配

/

通用匹配,任何请求都会匹配到

匹配规则:

  • 首先进行精准匹配:=

  • 其次进行一般匹配: ^~,如果有多个url符合,优先匹配较长的路径,比如/po与/po/jo,后者优先于前者

  • 按照文件顺序进行正则匹配

  • 最后交给/通用匹配

  • 当匹配成功时,停止匹配,按照匹配的配置规则处理请求

location = / {
   #规则A
}
location = /login {
   #规则B
}
location ^~ /static/ {
   #规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
   #规则D
}
location ~* \.png$ {
   #规则E
}
location / {
   #规则F
}
访问根目录 /, 比如 http://localhost/ 将匹配规则 A 
访问 http://localhost/login 将匹配规则 B,http://localhost/register 则匹配规则 F
访问 http://localhost/static/a.html 将匹配规则 C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则 D和规则 E,但是规则 D 顺序优先,规则 E不起作用,而 http://localhost/static/c.png则优先匹配到规则 C
访问 http://localhost/a.PNG 则匹配规则 E,而不会匹配规则 D,因为规则 E 不区分大小写
访问 http://localhost/category/id/1111 则最终匹配到规则 F,因为以上规则都不匹配,这个时候应该是 nginx 转发请求给后端应用服务器,比如 FastCGI(PHP),tomcat(jsp),nginx 作为反向代理服务器存在

常用的匹配规则

# 静态资源文件文件夹匹配
location ^~ /static/ {
    root html/static;
}

# 静态资源后缀名匹配
location ~* \.(gif|jpg|css)$ {
    root html/static;
}

配置文件详解

########### 每个指令必须有分号结束。#################

###全局块开始###
# 配置用户或者组,默认为nobody nobody。
# user administrator administrators; 
# 指定nginx的工作进程的数量,nginx的进程分为master进程与worker进程
# worker_processes 2; 
# 指定nginx进程运行文件存放地址
# pid /nginx/pid/nginx.pid;   
# 指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
error_log log/error.log debug;
###全局块结束###
 
###event块开始###
events {
    # 设置使用的网络io模型
    use epoll;
    # 设置网路连接序列化,防止惊群现象发生,默认为on
    accept_mutex on; 
    # 设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on;  
    #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #use epoll;      
    # #最大连接数,默认为 512
    worker_connections  1024;    
}
###event块结束###
 
###http块开始###
http {
    #文件扩展名与文件类型映射表,minme.types是一个文件,与配置文件位于同一目录下
    include       mime.types;   
    # 默认文件类型,默认为text/plain
    default_type  application/octet-stream;  
    # 取消服务日志   
    # access_log off;  
    # 定义日志格式
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; 
    #  设置日志格式,combined为日志格式的默认值
    access_log log/access.log myFormat; 
    # 允许sendfile方式传输文件,默认为off,可以在http块,server块,locati
    sendfile on; 
    # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    sendfile_max_chunk 100k;
    # 连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout 65;  
    
    # 公开的服务
    upstream mysvr {   
      # 配置多态服务器,默认使用轮询负载均衡
      # 加上此句,则会使用ip_hash策略
      # ip_hash; 
      server 127.0.0.1:7878;  
      server 127.0.0.2:7878; 
      server 127.0.0.3:7878; 
      # 热备
      server 192.168.10.121:3333 backup;
    }
    # 错误页
    error_page 404 https://www.baidu.com;
    
    # 虚拟主机
    server {
        # 单连接请求上限次数。
        keepalive_requests 120;  
        # 监听端口
        listen  4545;   
        # 监听地址 
        server_name  127.0.0.1;     
        # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
        # 如果设置为 / 则代表根路径
        location  ~*^.+$ {
            #根目录·
           # root path; 
           #设置默认页
           # index vv.txt;  
           # 请求转向mysvr 定义的服务器列表
           proxy_pass  http://mysvr;  
           # 拒绝的ip
           deny 127.0.0.1;   
           # 允许的ip   
           allow 172.18.5.54;          
        } 
    }
} 
###http块结束###
上一页Nginx下一页ab接口压力测试工具

最后更新于1年前

这有帮助吗?