nginx 资料整理(一)

news2025/4/19 18:21:10

nginx

    • 1. 简介
    • 2. web服务器
      • 2.1 相关文件
      • 2.2 主配置文件
        • 1. 全局块(events之前的部分)
        • 2. events块(events{...})
        • 3. http块(http{...})
      • 2.3 子配置文件

在这里插入图片描述

官网 https://nginx.org/

1. 简介

nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,Nginx 的首个公开版本是在2004年10月4日发布的0.1.0,这个版本是Nginx历史上的一个重要里程碑,标志着Nginx正式进入了公开发行的历史舞台。

目前,Nginx 的主流版本包括 1.181.211.26等,这些版本提供了稳定和安全的功能,是大多数生产部署的首选。

Nginx 以其出色的性能高效的内存使用简单的配置低成本的维护著称。它在高并发连接下表现优秀,可以处理数以百万计的静态文件请求,并且可以配置为提供反向代理服务,负载平衡和缓存功能。

作为web服务器,nginx的全球市场占有率逐渐上升,可以看到最新的统计报告,nginx已经遥遥领先
在这里插入图片描述
各版本使用占比
在这里插入图片描述

统计来自 https://w3techs.com

那么nginx可以做什么呢?

  • 简单的网站示意图
    在这里插入图片描述

nginx主要功能包括

  • web服务器
  • 反向代理
  • 负载均衡
  • 前置缓存服务器等

下面我们将对部分功能进行详细介绍

2. web服务器

nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。nginx的并发能力确实在同类型的网页服务器中表现较好。

从严格意义上讲,nginx 主要作为静态页面的 web 服务器,同时支持 CGI 协议的动态语言,比如 perl、php 等,这也就组成了常说的LNMP网络架构模型。虽然不支持Java 程序,但能通过与 tomcat 配合完成,这个也就是LNMT网络架构模型。nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

衍生产品Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。在大部分情况下,Tengine和nginx的命令,参数及配置文件是通用的。

2.1 相关文件

笔者服务器系统是Centos 7.9epel源中nginx版本是1.20.1

[root@backup-svr-01 share]# yum list nginx
nginx.x86_64                                                               1:1.20.1-10.el7                                                               @epel

如果需要其他版本的nginx,可以在官网下载安装

yum安装中nginx的相关文件

[root@backup-svr-01 share]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.20.1
/usr/share/doc/nginx-1.20.1/CHANGES
/usr/share/doc/nginx-1.20.1/README
/usr/share/doc/nginx-1.20.1/README.dynamic
/usr/share/doc/nginx-1.20.1/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.20.1
/usr/share/licenses/nginx-1.20.1/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/en-US
/usr/share/nginx/html/icons
/usr/share/nginx/html/icons/poweredby.png
/usr/share/nginx/html/img
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/nginx/modules
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
/var/log/nginx/access.log
/var/log/nginx/error.log

ngx核心目录及文件

文件或目录说明
/etc/nginx/ngx的配置文件目录
/etc/nginx/nginx.confngx主配置文件
/etc/nginx/conf.d/子配置文件目录
/etc/nginx/conf.d/*.conf子配置文件
/usr/sbin/nginxngx管理命令,大多使用nginx -t进行配置文件语法检查
/usr/share/nginx/htmlngx默认的站点目录
/var/log/nginxngx日志存放目录
/var/log/nginx/access.logngx默认的访问日志
/var/log/nginx/error.logngx默认的错误日志

ngx其他目录及文件

文件或目录说明
/etc/logrotate.d/nginxngx日志切割的配置文件(使用默认即可)
/etc/nginx/fastcgi_params包含了FastCGI应用程序所需的最基本参数,大多用于和php连接使用
/etc/nginx/fastcgi.conf包含了更高级的FastCGI参数,可以用于优化FastCGI应用程序的性能
/etc/nginx/uwsgi_params用于和python连接使用
/etc/nginx/mime.types媒体类型,http协议中的文件类型
/usr/lib/systemd/system/nginx.servicesystemctl管理nginx的配置文件
/usr/lib64/nginx/modules模块目录,用于存放 Nginx 的第三方模块。这些模块可以扩展 Nginx 的功能

2.2 主配置文件

########### 每个指令必须有分号(;)结束。#################
######################### 全局块 ###############################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
######################### 全局块 ###############################

######################### events块 ###############################
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
######################### events块 ###############################

######################### http块 ###############################
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #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'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1: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;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}
######################### http块 ###############################

nginx的主配置文件由三部分组成

  1. 全局块(events之前的部分)
  2. events块(events{…})
  3. http块(http{…})
1. 全局块(events之前的部分)
######################### 全局块 ###############################
#user nginx nginx;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
######################### 全局块 ###############################

从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令,主要包括:

1)运行Nginx服务器的用户(组);
2)允许生成的Worker进程数;worker_processes 2;这是Nginx并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。
3)进程PID存放路径;
4)日志存放路径和类型;
5)配置文件的引入等

2. events块(events{…})

nginx采用的异步非阻塞的事件驱动机制。

######################### events块 ###############################
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
######################### events块 ###############################

events块涉及的是Nginx服务器与用户的网络连接,常用的设置包括:

1)是否开启对多worker进程下的网络连接进行序列化;
2)是否允许同时接收多个网络连接;
3)选取哪种事件驱动模型来处理连接请求;
4)每个worker进程可以同时支持的最大连接数(即上文的worker_connections);

该部分对Nginx性能影响较大,在实际中应该灵活配置。

3. http块(http{…})

定义HTTP协议的处理行为。

######################### http块 ###############################
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #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'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1: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;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}
######################### http块 ###############################

这部分是nginx服务器配置中最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块配置都放在这里。

http块又包括:

  1. http全局块
  2. server块

一个http块可以嵌套多个server块,一个server就代表一个虚拟主机或host(Web服务器),例如www.cnblogs.com(一个host是指一个完整IP或三级、四级域名组)

  1. http全局块server块以外部分),全局块配置的指令包括:
  1. 文件引入(include)
  2. MIME-TYPE定义
  3. 日志自定义
  4. 连接超时时间
  5. 单链接请求数上限等
  1. server块(server{…})
    该块与虚拟主机有密切联系,从逻辑上看,虚拟主机与一台独立的硬件主机没什么区别(访问一个主机的两种方式:IP、域名)。每个http块可以包括多个server块,而每个server块就相当于一个WEB服务器。每个server块分为全局server块、location块。
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;                       
        }
    }

server块又包括

  • server全局块
  • location块

server全局块
最常见的配置是

1)本虚拟机的监听配置(listen项)
2)本虚拟机的名称或IP配置(server_name项)。

location块
一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器收到的请求字符串(如server_name/url-string),对server_name之外的字符串(如url-string)进行匹配,对匹配到的请求进行处理。地址定向、数据缓存、应答控制等功能。还有许多第三方模块的配置也在该处进行。

各大块简单介绍完,nginx的主配置文件看起来应该是这样的

全局块

events块 {
  ...
}


http块 {
    http全局块

    server块 {
        server全局块
        location块  {
          ...
        }

        location块  {
          ...
        }
        ...
    }

    server块 {
        server全局块
        location块  {
          ...
        }

        location块  {
          ...
        }
        ...
    }
    ...
}

2.3 子配置文件

在生产环境中,我们的一台服务器可能配置多个虚拟主机,也就是多个网站。这时,我们把虚拟主机(也就是server块)从主配置文件中移出到/etc/nginx/conf.d/目录中,并且指定*.confconf结尾的文件为子配置文件。这样做的好处就是很清晰,每个配置文件对应一个虚拟主机,也就是一个网站。

主配置文件中,我们在http全局块中加入include语句

http {
...
    include /etc/nginx/conf.d/*.conf;
...
}

子配置文件中,我们主要配置server块

[root@web-svr-01 conf.d]# cat /etc/nginx/conf.d/www.test.cn.conf
server {
        listen       80;
        server_name  localhost;

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

        }

检查语法,重新加载nginx

[root@web-svr-01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web-svr-01 conf.d]# systemctl reload nginx

写个简单的首页文件,并进行测试

[root@web-svr-01 conf.d]# cat /data/html/index.html
hello, this is test rsync
[root@web-svr-01 conf.d]# curl -H Host:www.test.cn.conf 192.168.202.131
hello, this is test rsync

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

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

相关文章

DeerPlus 2.85| 外语学习利器,趣味闯关学习外语

DeerPlus 是一款非常专业的外语学习应用,支持多种语言的学习,如汉语、英语、日语、韩语、法语、西班牙语、德语等,从单词、发音、语法等各个方面全面系统地教你学习,让你快速掌握多种语言。特点:- 10多种游戏模式- 100…

计算机毕业设计 基于Python音乐平台的设计与实现 Python毕业设计 Python毕业设计选题 Vue 前后端分离【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

C++核心编程和桌面应用开发 第九天(静态多态 动态多态 纯虚函数 抽象类 虚析构 纯虚析构 向上向下类型转换 重载重写重定义)

目录 1.1静态多态 1.2动态多态 1.2.1满足条件 1.2.2动态多态的使用条件 1.3纯虚函数和抽象类 1.3.1纯虚函数 1.3.2抽象类 1.4虚析构/纯虚析构 1.5向上向下类型转换 1.5.1向下类型转换 1.5.2向上类型转换 1.5.3多态中的类型转换 1.6重载重写重定义 1.6.1重载 1.6…

中国工业大模型行业发展研究报告

**工业大模型伴随着大模型技术的发展,逐渐渗透至工业,处于萌芽阶段。**就大模型的本质而言,是由一系列参数化的数学函数组成的计算系统,且是一个概率模型,其工作机制是基于概率和统计推动进行的,而非真正的…

leetcode 93.复原ip地址

1.题目要求&#xff1a; 2.题目代码: class Solution { public:vector<string> result;// 记录结果// startIndex: 搜索的起始位置&#xff0c;pointNum:添加逗点的数量void backtracking(string& s, int startIndex, int pointNum) {if (pointNum 3) { // 逗点数…

线性回归逻辑回归-笔记

一、线性回归&#xff08;Linear Regression&#xff09; 1. 定义 线性回归是一种用于回归问题的算法&#xff0c;旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量&#xff08;输…

Vue3浮动按钮(FloatButton)

效果如下图&#xff1a;在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距&#xff0c;单位 pxnumber | stringundefinedright按钮定位的右边距&#xff0c;单位 pxnumber | string24top按钮定位的上边距&#xff0c;单位 pxnumber | stringundefinedbottom…

优惠点餐api接口对接的具体步骤是什么?

优惠点餐API接口对接的具体步骤通常包括以下几个阶段&#xff1a; 需求分析&#xff1a;明确对接的目标和需求&#xff0c;例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商&#xff1a;根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥&#xff1a;…

channel是pypi与 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f的区别。

pypi.org 是 PyPI 的默认源https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f 是清华大学开源软件镜像站提供的 Anaconda 镜像源之一。 pypi.org&#xff1a;通常通过 pip 工具来使用。 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f&#xff1a;…

力扣HOT100合集

力扣HOT100 - 1. 两数之和 解题思路&#xff1a; 解法一&#xff1a;暴力 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i)for (int j i 1; j < n; j) {if (target nums[i] nums[j])return new int[] …

docker compose一键部署容器监控 CAdvisor+InfluxDB+Granfana

docker compose一键部署容器监控 CAdvisorInfluxDBGranfana CAdvisor监控收集InfluxDB存储数据Granfana展示图表 1、原生命令 通过docker stats 命令可以查看当前宿主机上所有创建的容器的CPU,内存和网络流量等信息 docker stats 缺点&#xff1a;只能查看当前宿主机的全部…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

革新锂电池PACK线:重塑生产效能新高度

背景&#xff1a; 在新能源产业的浪潮中&#xff0c;锂电池作为电动汽车、储能系统的核心部件&#xff0c;其生产效率与质量直接关系到整个产业链的竞争力。然而&#xff0c;在锂电池PACK线的生产、运输、检测这一完整流程中&#xff0c;运输环节往往面临着诸多挑战&#xff0…

探索多模态大模型的最佳技术路线

视觉-语言模型&#xff08;Vision-Language Models, VLMs&#xff09;领域正迅速发展&#xff0c;但在数据、架构和训练方法等关键方面还未达成共识。本文旨在为构建VLM提供指南&#xff0c;概述当前的最先进方法&#xff0c;指出各自的优缺点&#xff0c;解决该领域的主要挑战…

AD的多边形覆铜挖空

针对多层板中没有网络的焊盘&#xff0c;需要覆铜挖空&#xff0c;避免与GND连接。同时&#xff0c;大多数情况下&#xff0c;我们的板子上都有定位孔&#xff0c;如果覆铜边界和定位孔边界距离过近&#xff0c;当拧螺丝时&#xff0c;螺丝会压在覆铜上&#xff0c;甚至在螺丝旋…

漫途以产品为导向,为集成商客户提供稳定、可靠的物联网终端设备!

无锡漫途科技有限公司成立于2014年8月至今已经十年有余&#xff0c;在这期间公司始终把“1344”战略作为核心指导方向。 “1”代表只做一件事&#xff0c;即以“物联网基础大数据服务商”为主要业务定位&#xff0c;围绕中国制造 2025&#xff0c;推动中国工业智能化转型升级&…

安卓投屏工具:QtScrapy

QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备&#xff0c;并进行显示和控制。不需要root权限。   项目地址https://gitee.com/leihongping/QtScrcpy

Onebound代购系统丨系统建站丨返海淘系统用途

Onebound代购系统、系统建站以及返海淘系统的用途&#xff0c;可以详细阐述如下&#xff1a; Onebound代购系统 Onebound代购系统主要用于连接海外消费者与中国电商平台&#xff08;如1688、淘宝、天猫、京东等&#xff09;&#xff0c;为消费者提供商品搜索、下单、支付、物…

学习threejs,网格深度材质MeshDepthMaterial

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️网格深度材质MeshDepthMate…

Vert.x,Web - Router

Vert.x-Web简介 Vert.x-Web是用于构建Web应用程序的一系列模块&#xff0c;可以用来构建经典的服务端Web应用&#xff0c; RESTful应用&#xff0c; 实时的(服务端推送)Web应用&#xff0c;或任何您所能想到的Web应用类型。Vert.x Web的设计是强大的&#xff0c;非侵入式的&am…