nginx配置文件介绍

news2025/1/23 11:17:58

nginx配置文件介绍

nginx默认的配置文件是在安装目录下的 conf目录下,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。

配置文件中用#符号表示注释内容。

配置文件主要包括三部分,maineventshttp

main

用于进行nginx全局信息的配置。

user

定义 nginx 运行的用户和用户组,默认由 nobody 账号运行。

worker_processes

指定nginx要开启的子进程数量,通常数量是CPU内核数量的整数倍。该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的影响。

如果是在本地运行nginx可以通过任务管理器中的性能选项中查看电脑cpu核数。

在这里插入图片描述

error_log

定义错误日志文件的位置及输出级别(debug / info / notice / warn / error / crit)。

pid

用来指定进程id的存储文件的位置(windows下可以注释掉)。

worker_rlimit_nofile

用于指定一个进程可以打开最多文件数量的描述。理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

events

针对nginx服务器的工作模式的一些操作配置。

worker_connections

指定单个进程最大连接数(最大连接数=连接数*进程数)。该值受系统进程最大打开文件数限制,需要使用命令ulimit -n 查看当前设置。

multi_accept

配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接

use epoll

配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSDMac请使用Kqueue

http

作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的(比如代理,日志,缓存、第三方模块等等),项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置。不过常规情况下,使用默认配置即可!

http {
    #文件扩展名与文件类型映射表
    #include 是个主模块指令,可以将配置文件拆分并引用,可以减少主配置文件的复杂度
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    #charset utf-8; #默认编码
 
    #定义虚拟主机日志的格式
    #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;
 
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile        on;
    #autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
 
    #防止网络阻塞
    #tcp_nopush     on;
 
    #长连接超时时间,单位是秒,默认为0
    keepalive_timeout  65;
 
    # gzip压缩功能设置
    gzip on; #开启gzip压缩输出
    gzip_min_length 1k; #最小压缩文件大小
    gzip_buffers    4 16k; #压缩缓冲区
    gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_comp_level 6; #压缩等级
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on; //和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
    #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
 
    # http_proxy服务全局设置
    client_max_body_size   10m;
    client_body_buffer_size   128k;
    proxy_connect_timeout   75;
    proxy_send_timeout   75;
    proxy_read_timeout   75;
    proxy_buffer_size   4k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size   64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path   /usr/local/nginx/proxy_temp 1 2;
 
}

server

配置http模块中的一个子模块,用来定义一个虚拟访问主机,也就是一个虚拟服务器的配置信息。这部分是 nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

一个http块可以包含多个server块。

核心配置如下:

  • listen:监听端口
  • server_name:指定ip地址或者域名(可以有多个),多个配置之间用空格分隔
  • root:表示整个server虚拟主机内的根目录,所有当前主机中web项目的根目录
  • index:用户访问web网站时的全局首页
  • charset:用于设置www/路径中配置的网页的默认编码格式
  • access_log:用于指定该虚拟主机服务器中的访问记录日志存放路径
  • error_log:用于指定该虚拟主机服务器中访问错误日志的存放路径
  • error_page:指定遇到错误状态码时应展示的页面
  • location:是nginx配置中出现最多的一个配置,主要用于配置路由访问信息。在路由访问信息配置中关联到反向代理、负载均衡等等各项功能。

location

语法:location [=|~|~*|^~] /uri/ { … }

  • =: 开头表示精确匹配
  • ~: 开头表示区分大小写的正则匹配
  • ~*: 开头表示不区分大小写的正则匹配
  • !~!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
  • ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url 路径即可。nginx不对url进行编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  • /: 通用匹配,可以匹配任何请求

可以配置多个location,不过请求的匹配也是有一定的顺序的:

  1. 匹配 =
  2. 匹配^~,
  3. 按文件中顺序的正则匹配
  4. / 通用匹配。

当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

假设配置如下:

location = / {
   #规则1
}
location = /api {
   #规则2
}
location ^~ /static/ {
   #规则3
}
location ~ \.(gif|jpg|png|js|css)$ {
   #规则4
}
location ~* \.png$ {
   #规则5
}
location !~ \.xhtml$ {
   #规则6
}
location !~* \.xhtml$ {
   #规则7
}
location / {
   #规则8
}
  1. 当访问根目录 http://localhost/,匹配规则1
  2. 当访问http://localhost/api,匹配规则2
  3. 当访问http://localhost/static/1.png^~会优先匹配规则3
  4. 当访问http://localhost/1.png,匹配规则4,规则5不生效
  5. 当访问http://localhost/1.PNG,匹配规则5,不会匹配规则4,规则5不区分大小写
  6. 当访问http://localhost/a.xhtml 不会匹配规则6和规则7,http://localhost/a.XHTML不会匹配规则7,因为不区分大小写。规则6,规则7属于排除法,符合匹配规则但是不会匹配到
proxy_pass

用于配置反向代理

server {
	listen       80;
	server_name  localhost;

	location / {
		root   html;
		index  index.html index.htm;
		proxy_pass  http://test.com:8080
	}
}

nginx监听 80端口,访问localhost(不加端口号时默认为 80端口)时会跳转到 test.com:8080(本地的话可以通过在host文件上设置ip域名映射) 路径上。

location下,同时配置rootproxy_pass选项时,两个选项只会二选一执行。

uwsgi_pass

wsgi模式下的服务器配置访问方式

location / {
    include uwsgi_params;
    uwsgi_pass localhost:8888
}

upstream

负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器。

核心配置信息如下:

  • server host:port:分发服务器的列表配置
  • -- down:表示该主机暂停服务
  • -- max_fails:表示失败最大次数,超过失败最大次数暂停服务
  • -- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求

nginx的负载均衡模块目前支持4种调度算法:

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

    按请求时间逐一分配,如果某个服务器挂了,就自动剔除:

    # myserver为自定义的名称
    upstream myserver{
      server 192.168.1.1:80; 
      server 192.168.1.12:8080 max_fails=3 fail_timeout=20s;
      server 192.168.1.123:8080 down;
    }
    

    使用权重:

    upstream myserver{
      server 192.168.1.1:80 weight=5; 
      server 192.168.1.12:8080 weight=10;
    }
    
  • ip_hash:每个请求按访问IPhash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。

    比如说用户A固定ip,第一次访问到192.168.1.1:80,那么后面就都是访问到这台机器

    upstream myserver{
      ip_hash;
      server 192.168.1.1:80; 
      server 192.168.1.12:8080;
    }
    
  • fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载nginxupstream_fair模块。

    upstream myserver{
      server 192.168.1.1:80; 
      server 192.168.1.12:8080;
      fair;
    }
    
  • url_hash:此方法按访问urlhash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率(同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取)。nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装nginxhash软件包。

    upstream myserver{
      server 192.168.1.1:80; 
      server 192.168.1.12:8080;
      hash $request_uri;
    }
    
    server {
        listen 8083;
        server_name localhost;
        location /{
      	  proxy_pass http://myserver;
        }
    }
    

注,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weightbackup

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

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

相关文章

Netty应用篇

Netty应用 粘包和半包 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyServer.class);void start() {NioEventLoopGroup boss new NioEventLoopGroup(1);NioEventLoopGroup worker new NioEventLoopGroup();try {ServerBoo…

【WebRTC技术专题】未来可期,WebRTC的诞生发展的概述介绍(1)

近几年实时音视频通信应用呈现出了大爆发的趋势。在这些实时通信技术的背后,有一项不得不提的技术 ——WebRTC。 前言背景 2021年1月26日,W3C(万维网联盟) 和 IETF (互联网工程任务组) 同时宣布 WebRTC&…

企业办公WLAN覆盖方案的设计与实现_kaic

企业办公WLAN覆盖方案的设计与实现 摘要: 无线LAN技术的快速发展已经使它在当今的数字通讯行业中变得越来越重要。它的优点包括易于部署、灵活操作、价格实惠,使它能够在不同的场景中提供支持。无线LAN技术已经被许多不同类型的人所接受,并且…

linux下使用lftp的小结

lftp的功能比较强大,相比原来用ftp,方便了很多。 1、登陆: lftp ftp://yournamesite pwd:***** 或 open ftp://yournamesite 2、基本操作(转) lftp使用介绍 lftp 是一个功能强大的下载工具,它支持访问…

React-Native 创建App项目

# React-Native 创建App项目 环境搭建 概述 RN的官方网站百度谷歌 安装环境介绍 操作系统:win10系统手机:安卓手机真机一部或夜神模拟器必须安装的依赖有:Node,JDK,Yarn,Android SDK,Python2 Node的安装 先到官网去下载node版本&#…

Cypress触摸芯片自己做的demo 代码

1.前言 (1)cyprees芯片主要是可以做一些触摸的检测并实现一些IO输出,使用的工具psoc creater (2)psoc creater 可以i直接通过GUI的方式配置一些GPIO的状态以及集成的功能模块,编译后,我们可直接…

基于深度学习的花卉识别

1、数据集 春天来了,我在公园的小道漫步,看着公园遍野的花朵,看起来真让人心旷神怡,一周工作带来的疲惫感顿时一扫而光。难得一个糙汉子有闲情逸致俯身欣赏这些花朵儿,然而令人尴尬的是,我一朵都也不认识。…

2022蓝桥杯省赛——砍竹子

问题描述 这天, 小明在砍竹子, 他面前有 n 棵竹子排成一排,一开始第 i 棵竹子的 高度为 hi​。 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为 H&#xff0…

UNIX环境高级编程——系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,这些文件都是ASCII文本文件,并且使用标准I/O库读这些文件。 6.2 口令文件 UNIX口令文件是/etc/passwd,每一行包含下图中的各字段,字段之间用冒号分隔&#xff0c…

除了Jira、禅道还有哪些更好的敏捷开发过程管理平台?

无论是从国内的敏捷调研开发调研报告还是从国外的敏捷状态调查,工具支持一直是决定敏捷成功的关键因素之一,它们可以帮助团队提高软件开发的效率、质量、协作和满意度。选择合适的敏捷开发管理工具,并正确地使用它们,是每个敏捷团…

JAVA SMART系统-系统框架设计与开发

SMART系统是一个新型智能在线考试信息管理系统,该系统主要实现了学生在线考试与评估以及教师对学生在线考试信息的管理和维护。本文按照SMART系统的非功能性需求,基于Struts、Spring、Hibernate三种开源技术,构建了一个具有良好的可扩展性、可…

英文译中文翻译-中文英文翻译在线翻译

如果您需要在线翻译英文文本为汉字,您可以使用各种在线翻译服务或应用程序。以下是一些您可以尝试的在线翻译服务: Google翻译: Google翻译是一款广受欢迎的在线翻译服务,可将英语文本翻译成汉字。只需将需要翻译的英文文本复制粘…

MFC动态库封装

1.MVC的设计模式的使用 经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就…

自动化面试题4

1、工业中常见的通信方式都有哪些,各自特点是什么? 2、对于一台新的伺服驱动器来说,需要设置哪几个方面的参数? (1)参数初始化 (2)点动测试电机旋转方向 (3)惯…

神经网络/深度学习(二)

Seq2Seq 模型 Encoder-Decoder Attention 机制 Self-Attention 自注意力机制 Transformer 摘文不一定和目录相关,但是取自该链接 1. Seq2Seq 模型详解 https://baijiahao.baidu.com/s?id1650496167914890612&wfrspider&forpc Seq2Seq 是一种循环神经网…

云原生——容器技术docker基础命令

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏云原生专栏 📧如果文章知识点有错误的地方,请指正&…

d2l语言模型--生成小批量序列

对语言模型的数据集处理做以下汇总与总结 目录 1.k元语法 1.1一元 1.2 二元 1.3 三元 2.随机抽样 2.1各bs之间随机 2.2各bs之间连续 3.封装 1.k元语法 1.1一元 tokens d2l.tokenize(d2l.read_time_machine()) # 因为每个⽂本⾏不⼀定是⼀个句⼦或⼀个段落&#xff0…

认识C++指针

目录 前言: 1.指针未初始化的危险性 2.指针与十六进制数字 3.使用new分配内存空间 4.使用delete释放内存 5.使用new来创建动态数组 6.使用动态数组 7.指针运算 前言: 期待已久的指针篇来啦,这篇全都是有关指针的知识,喜欢…

【Matlab算法】粒子群算法求解二维线性优化问题(附MATLAB代码)

MATLAB求解二维线性优化问题前言正文函数实现可视化结果前言 二维线性优化问题指的是在二维空间中,对于一个由线性函数构成的目标函数,通过限制自变量的范围或满足特定的约束条件,寻找一个最优解(最小值或最大值)。这…

【精华】表格结构识别模型研究进展

表格结构识别模型研究进展 合合信息:表格识别与内容提炼技术理解及研发趋势 OCR之表格结构识别综述 表格识别技术综述 用于表检测和结构识别的深度学习:综述 (1)PP-Structure 速度提升11倍,一键PDF转Word PP-St…