Nginx快速入门:编译及常用配置

news2024/9/24 3:28:18

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,也是一个 IMAP/POP3 邮件代理服务器。它以其高并发处理能力和低资源消耗而闻名,能够同时处理数千个连接。

Nginx 的主要功能包括:

  1. 静态资源服务器:Nginx 可以担任静态资源服务器的角色,高效地提供静态内容,如 HTML、图片、视频等,因其采用事件驱动架构,能够比传统服务器处理更多的并发请求。

  2. 反向代理和负载均衡:Nginx 可以作为反向代理服务器,将客户端请求分发到后端多个服务器上,从而实现负载均衡。它支持多种负载均衡算法,如轮询、IP 哈希等。

  3. SSL/TLS 支持:Nginx 支持 SSL/TLS 协议,可以用来配置 HTTPS 站点,保证数据传输的安全性。

  4. 动静分离:Nginx 可以根据请求的类型(如静态资源请求或动态应用请求)将它们分发到不同的服务器,这种方式提高了站点的性能。

  5. 模块化架构:Nginx 的功能可以通过各种模块进行扩展,例如 Gzip 压缩、访问控制、日志记录等。

  6. 高可用性和容错性:通过与其他工具(如 Keepalived)结合,Nginx 可以实现高可用性,确保服务的连续性。

Nginx 的设计目标之一是提高服务器的性能和稳定性,同时减少服务器资源的消耗,这使得它成为处理高并发请求的理想选择。Nginx 现已广泛应用于大中型网站和云服务中,成为全球最受欢迎的 Web 服务器之一。

nginx可以直接通过yum install安装,不过这样只能安装基础的nginx,如果引入更多模块的功能,所以手动编译部署,可以使用nginx更多功能,并且自定义其应该具有什么模块和功能。

Nginx编译

nginx是一个高度模块化的中间件,其各个功能分为不同的模块,甚至不同的文件。我们下载的nginx模块,通常只包括核心模块,和一部分可选模块。我们还可以通过下载其他开发者或社区开发的模块,在编译时进行引入,这些由非官方个人或团队开发和维护的模块,叫第三方模块。

核心模块

其中核心模块是编译时必须且自动选择的,其中包含如下模块:

  • ngx_core_module:提供了全局配置选项,如 user、worker_processes、error_log、pid 等。
  • ngx_errlog_module:管理错误日志的记录。
  • ngx_events_module:处理 Nginx 的事件驱动机制,控制服务器的并发处理能力。
  • ngx_http_core_module:用于处理 HTTP 请求的核心模块。
  • ngx_http_log_module:访问日志记录模块。

可选模块

还有一部分模块,虽然是自带于nginx中,不过需要在编译时,通过--with-选项,选择性的进行添加,模块如下:

HTTP 模块:  

  • http_ssl_module:启用 SSL/TLS 支持,用于处理 HTTPS 请求。
  • http_v2_module:启用 HTTP/2 支持,优化网页加载速度。
  • http_gzip_static_module:启用 Gzip 静态文件支持,减少带宽消耗。
  • http_stub_status_module:提供服务器运行状态的监控接口。
  • http_realip_module:处理代理服务器后的真实客户端 IP 地址。
  • http_auth_request_module:通过子请求实现用户身份验证。
  • http_sub_module:在响应内容中替换文本。
  • http_geoip_module:基于 IP 地址提供地理位置信息。

流模块(用于 TCP/UDP 处理):  

  • stream:启用 TCP/UDP 流量处理。  
  • stream_ssl_module:为 TCP/UDP 流量处理启用 SSL 支持。  
  • stream_realip_module:获取真实客户端 IP 地址。

邮件模块(用于邮件代理):  

  • mail:启用邮件代理功能(SMTP/IMAP/POP3)。
  • mail_ssl_module:为邮件代理启用 SSL 支持。

第三方模块

第三方模块由个人或其他社区开发和维护,用来扩展nginx的功能,通过--add-module=path/to/module的形式进行引入。

编译过程

编译过程需要先下载编译所需工具,以及nginx源代码。然后通过configure可执行文件,来启动对应模块,然后在通过make install命令,进行编译。我们这里以引入可选模块http_ssl_module 和with-http_gzip_static_module为例,具体命令如下:

#首先下载编译所需工具
yum groupinstall 'Development Tools'
yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel

#下载nginx源码并解压
cd /
wget https://nginx.org/download/nginx-1.26.1.tar.gz
tar -xf /nginx-1.26.1.tar.gz

#编译nginx
./configure --prefix=/nginx --with-http_ssl_module --with-http_gzip_static_module
make
make install

下载完成后可以如下命令,来验证nginx是否安装成功,以及安装模块内容:

/nginx/sbin/nginx -V #注意v是大写,小写不会打印模块信息

得到如下结果,证明nginx安装成功,并且可以查看到我们刚刚的模块信息。

 除了这些可选模块外,我们还可以通过实际需求,引入第三方模块,这里就不举例了。

常用配置项

完成nginx编译后,我们可以在之前编译指定的目录,也就是/nginx目录下,看到四个文件夹,分别是conf,html,logs以及sbin。其中sbin内部保存了我们编译后的nginx可执行文件,我们对于nginx服务的一切操作都要使用这个nginx可执行文件。

conf目录下有一个nginx.conf,我们就需要在这里对nginx进行配置,里面的初始内容如下:

可以看到,nginx的配置也是基于模块的,从上至下,分别可以看到全局配置项,events模块,以及http模块。

http模块内部还要定义虚拟主机的配置,也就是server,虚拟主机可以有多个。server下配置了监听端口,域名,以及访问路径映射规则(location)。

我们直接通过/nginx/sbin/nginx,执行nginx可执行文件,启动nginx,然后直接通过http协议访问主机ip(不需要端口),看到如下页面,证明访问nginx成功。

 必须通过http访问,因为https写一下需要对数据进行加密传输,nginx默认没有开启ssl对数据加密,会导致三次握手失败,可以在server的listen配置端口后面加一个ssl启用ssl加密,不过还需要获取证书,过程繁琐,这里主要演示nginx的基本使用,不做过多说明。

http协议下默认访问80端口,所以通过http访问nginx所在地址时,不需要加端口。https默认访问443端口

server_name

通过配置server_name可以对访问客户端的域名进行限制。

精确匹配

通过指定明确的域名,来对域名进行限制,只有指定域名才能匹配到当前的虚拟主机。

server_name test.com www.test.com;

前置通配符匹配

server_name *.test.com;

后置通配符匹配

server_name www.test.*

 正则表达式匹配

server_name ~^www\.(.+)\.com$;

默认服务器

默认服务器通过在listen配置的末尾添加default_server实现,当所有服务器都匹配失败时,则会由默认服务器处理。

listen 80 default_server;

从上至下优先级以此递减,当相同类型的匹配都匹配成功时,会选择固定部分最多的那个服务器,比如前置通配符匹配,*.test.com和*.com都匹配到www.test.com时,*.test.com服务器生效。

localtion

匹配URI

location配置URI匹配大致有五种方式,如下:

1. 精确匹配

通过 localtion = URI 来实现对URI的精确匹配。精确匹配下,URI必须相同,并且这种方式的优先级最高,优先进行匹配。

location = /test {
    # 精确匹配 /
}
2. 前缀通配符

通过 location ^~ /test 方式,可以匹配以/test开头的URI,匹配优先级第二。

location ^~ /test {
    # 直接匹配以 /test 开头的 URI
}
3. 正则表达式匹配

可以通过正则表达式,以location ~ \.test$的形式来匹配以.test结尾的URI,~*为不区分大小写。匹配优先级第三。

location ~ \.test$ {
    # 匹配所有以 .test 结尾的 URI,区分大小写
}

location ~* \.TeSt$ {
    # 匹配所有以 .test 结尾的 URI,不区分大小写
}
4. 前缀匹配

通过location /test,中间不加任何修饰符,代表怕匹配所有以/test开头的URI,虽然和前缀通配符匹配功能相同,不过前缀匹配优先级低于正则表达式,可以看实际情况选择使用。匹配优先级第四。

location /test {
    # 匹配 /test 开头的路径
5. 通用匹配

location /匹配所有,优先级最低。

精确匹配

upstream

nginx作为反向代理服务器,提供了多种负载均衡的策略,可以通过在http模块配置下的upsteam配置项,配置所有服务地址的列表,然后在location内部通过porxy_pass配置这个服务器列表来开启负载均衡,其中默认为轮询。

轮询

沦胥为默认的负载均衡策略,无需配置。

权重

权重通过在upsteam中配置的地址列表后面,通过weight=n来给对应服务设置权重,nginx就会根据内置的权重算法进行负载均衡。

upstream myapp {
        server ip1:port weight=3;
        server ip2:port weight=2;
        server ip3:port weight=1;
    }

最少连接

选择连接数最少的服务进行负载均衡,可以防止某些连接时间过长导致服务器压力过大。可以通过在upsteam下添加least_conn开启。

upstream myapp {
    least_conn;
    server ip1;port;
    server ip1;port;
    server ip1;port;
}

IP哈希

通过IP哈,可以保证一个ip固定被分配相同的服务器,可以用需要保持会话的需求。通过在upsteam下添加ip_hash开启;

upstream myapp {
    ip_hash;
    server ip1;port;
    server ip1;port;
    server ip1;port;
}

upsteam还可以在服务地址后面添加down代表服务不可用,以及添加backup代表服务为备用服务,其他服务都不可用时才开启。

除此之外,还有大量的模块配置,没有办法一一全部说明,可以在实际生产中用到哪个,搜索哪个。

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

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

相关文章

【Python零基础】Python测试

文章目录 前言一、使用pip安装pytest1.1 更新pip1.2 安装pytest 二、测试函数2.1 编写测试文件2.2 运行测试2.3 测试不通过2.4 测试不通过2.4 增加新测试 三、测试类3.1 断言3.2 夹具 总结 前言 代码测试是程序开发中极其重要的一环,任何代码都应该经过测试才能上生…

sqli-labs靶场通关攻略(五十一到五十六关)

sqli-labs-master靶场第五十一关 步骤一,尝试输入?sort1 我们发现这关可以报错注入 步骤二,爆库名 ?sort1 and updatexml(1,concat(0x7e,database(),0x7e),1)-- 步骤三,爆表名 ?sort1 and updatexml(1,concat(0x7e,(select group_conc…

数据结构:树形结构(树、堆)详解

数据结构:树形结构(树、堆)详解 一、树(一)树的性质(二)树的种类二叉树多叉树满N叉树完全N叉树 (三)二叉树的实现1、二叉树结构定义2、二叉树功能实现(1&…

数字化转型中的数据应用:挑战、机遇与追赶之路

在数字化时代的大潮中,数据已悄然从企业的边缘资源跃升为最宝贵的核心资产。然而,这场数据盛宴并未带来普遍的数据应用成熟,反而揭示了企业在数据利用上的巨大鸿沟。即便是全球500强企业,在数据应用的征途上,也仅仅是比…

秋招突击——笔试总结——8/31——京东笔试

文章目录 引言正文第一题——下一个字典序的字符个人实现 第二题——冒泡排序的变种个人实现空间复杂度比较低的版本 第三题——两人走路个人实现 总结 引言 今天京东笔试做的并不好,有很多问题的关窍都没有找到,所以在很多问题上都浪费了大量的时间&am…

JVM下篇:性能监控与调优篇-04-JVM运行时参数

文章目录 4. JVM 运行时参数4.1. JVM 参数选项4.1.1. 类型一:标准参数选项4.1.2. 类型二:-X 参数选项4.1.3. 类型三:-XX 参数选项 4.2. 添加 JVM 参数选项4.3. 常用的 JVM 参数选项4.3.1. 打印设置的 XX 选项及值4.3.2. 堆、栈、方法区等内存…

Java多线程(二)线程同步

1、线程同步问题 当多个线程同时操作同一个数据时,就会产生线程同步问题。 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“同步”。当一个线程运行到需要同步的语句后,CPU不去执行其他线程中的、可能影响当前线程中的下一句代…

记一次学习--webshell绕过(动态检测)

目录 第一种样本 代码分析 第二种样本 代码分析 题目分析 结果 不断学习&#xff0c;不断进步 快就是慢&#xff0c;慢就是快。审视自身 第一种样本 <?php class xxxd implements IteratorAggregate {public $xxx "system";public function __construct(…

C++ | Leetcode C++题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; class Solution { public:int lengthLongestPath(string input) {int n input.size();int pos 0;int ans 0;vector<int> level(n 1);while (pos < n) {/* 检测当前文件的深度 */int depth 1;while (pos < n && in…

R语言统计分析——单因素协方差分析

参考资料&#xff1a;R语言实战【第2版】 单因素协方差分析&#xff08;ANCONA&#xff09;扩展了单因素方差分析&#xff08;ANOVA&#xff09;&#xff0c;包含一个或多个定量的协变量。下面使用multcomp包中的litter数据集进行操作&#xff1a; # 加载数据集 data(litter,p…

0-HDMI高速接口协议基础介绍

高清多媒体接口(HDMI&#xff0c;High Definition Multimedia Interface)是一种数字化视频/音频接 口技术&#xff0c;是适合影像传输的专用型数字化接口&#xff0c;其可同时传送音频和视频信号&#xff0c;同时无需在 信号传送前进行数/模或者模/数转换。从2002年HDMI发布最初…

Windows 环境nginx安装使用及目录结构详解

一、 Windows 环境nginx安装及基本使用 1、下载 nginx-1.27.1 最新的主线版本 安装 nginx/Windows&#xff0c;请下载1.27.1最新的主线版本&#xff0c; nginx 的主线分支包含所有已知的修复程序。 2、 解压缩 nginx-1.27.1 版本 nginx/Windows 作为标准控制台应用程序&#x…

YOLO | YOLO目标检测算法(分类、检测、分割)

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 分类、检测、分割 思考&#xff1a;计算机视觉能够解决哪些问题&#xff1f;&#xff1f;&#xff1f;&#xff1f;分类、检测、分割 分割&#xff1a;语义分割和实例分…

SOMYO™——将“照片”转为“手绘素描”的专业级软件

一定要往下看&#xff0c;最精彩的在最后哦&#xff01; 1 关于素描的几句话 素描是西方美术的灵魂。值得为自己、亲人与好友留下一张别致的素描。 素描的定义&#xff1a;艺术家通过线条的粗细、浓淡、疏密等变化&#xff0c;试图精准地再现形态的体感、质感和动感的艺术…

轻量级进程(LWP)和线程

线程是CPU调度的基本单位 进程是承担系统资源的基本实体(进程是资源分配的基本单位) 线程并不拥有系统资源,而是共享使用进程的资源,进程的资源由系统进行分配 任何一个线程都可以创建或撤销另一个线程 多进程里&#xff0c;子进程可复制父进程的所有堆和栈的数据&#xff1b…

黑神话悟空-提高画质、防卡顿、修复等各种功能、各种CT表、各种存档、武器包、人物、装备替换等193+MOD合集

193MOD合集&#xff0c;提高画质&#xff0c;减少卡顿、修复等功能MOD各种CT表各种存档武器包、物品、人物、装备、造型替换等 具体MOD可在文件内查看 特别说明&#xff1a;3款珍品大圣套装替换初始套装MOD是不同的&#xff0c;&#xff08;其中全装备珍品大圣套装是不可以跳出…

笔记 12 : 彭老师课本第 6 章, PWM ,代码实践

&#xff08;85&#xff09; 驱动写多了&#xff0c;会发现&#xff0c;首先就是硬件的初始化&#xff0c;配置硬件。 &#xff08;86&#xff09;查看源代码组织&#xff1a; &#xff08;87&#xff09; 编译过程不变&#xff1a; &#xff08;88&#xff09; 运行同以前的步…

2024年8月总结及随笔之逝

1. 回头看 日更坚持了609天。 读《零信任网络&#xff1a;在不可信网络中构建安全系统》更新完成读《软件开发安全之道&#xff1a;概率、设计与实施》开更并持续更新 2023年至2024年8月底累计码字1463007字&#xff0c;累计日均码字2402字。 2024年8月码字109278字&#x…

全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型

全网最适合入门的面向对象编程教程&#xff1a;42 Python 常用复合数据类型-collections 容器数据类型 摘要&#xff1a; 在 Python 中&#xff0c;collections 模块提供了一组高效、功能强大的容器数据类型&#xff0c;扩展了内置的基础数据类型&#xff08;如 list、tuple、…

ubuntu14.04.5出现配环境后重启进不了图形化界面解决记录

前言 这段时间给公司接了一个需要使用到linux环境进行交叉编译的工程&#xff0c;就采用了简单易操作的图形化ubuntu系统。 镜像采用的是&#xff1a;ubuntu14.04.5-desktop-amd64.iso(官网下载的&#xff09; 配置环境的过程下载了众多依赖包&#xff0c;总之就是缺啥下载啥…