当前位置:网站首页 > 技术博客 > 正文

nginx安装在哪



在日常工作中,Nginx 的重要性当然不言而喻。

经常用,但并不意味着精通,还会有很多不清楚的方式和技巧,那么本文就简单汇总下,帮助自己理解。

Nginx(发音为“Engine X”)是一款轻量级和高性能的 Web 服务器、反向代理服务器、电子邮件(IMAP/POP3/SMTP)代理服务器,是带有 BSD-like 协议的开源产品。

另外,关于 BSD-like 协议,它为开发者和企业提供了极大的灵活性,在确保尊重原作者工作的同时,允许代码的自由流通和使用,无论是在开源社区还是商业应用中。

其特点包括:

  • 轻量级:Nginx 以其轻量级和高效性而闻名,对系统资源的占用非常小;
  • 高并发能力:Nginx 能够处理大量的并发连接,这使得它在面对高流量网站时表现出色,在同类 Web 服务器中是领先的;
  • 反向代理功能:作为反向代理服务器,Nginx 可以帮助提高网站的响应速度和可用性,同时隐藏后端服务器的复杂性,这使得 Nginx 在负载均衡和缓存方面非常有用;
  • 社区支持:作为一个开源项目,Nginx 拥有一个活跃的开发者和用户社区,这意味着它经常得到更新和改进,以适应不断变化的网络环境;
  • 安全性:Nginx 提供了多种安全措施,包括 SSL/TLS 加密支持,以及限制请求速率等,帮助网站防御各种网络攻击;
  • 广泛应用:全球范围内,许多知名的大型网站和服务都在使用 Nginx,这证明了它的可靠性和性能。

Nginx 是基于 C 语言开发的,拥有高性能的基本保证。

1.2.1 正向代理和反向代理

正向代理主要是为了客户端服务,而反向代理则是为了服务器端的服务优化和安全考虑,都可以明显提高数据传输的效率。它们的特点如下:

正向代理(Forward Proxy):

  • 位于客户端和目标服务器之间,主要用途是代替客户端访问外部网络,隐藏客户端的真实IP地址,提高访问速度,突破访问控制等。
  • 客户端主动使用代理服务器,服务端不知道实际发起请求的客户端
  • 常用于公司内部网络,通过一个或多个代理服务器访问互联网资源,以节省带宽、提高访问速度或进行内容过滤

  

  由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。

反向代理(Reverse Proxy):

  • 位于服务器端和客户端之间,主要用于服务器端的负载均衡、缓存静态内容、加密和SSL加速、安全防护等。
  • 服务器主动使用代理服务器,客户端不知道实际提供服务的服务端
  • 常用于网站后端,将客户端的请求转发到内部服务器,然后将响应返回给客户端,对外表现为统一的服务地址

  

  当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是无感的。

正向代理和反向代理的关系示意图如下:

无论是正向代理还是反向代理,都适用 Cache(缓存)技术。比如反向代理服务器,可以缓存一些从服务端取到的实时性要求不太高的数据,当客户端访问已缓存的数据且没有过期,就会 Cache 命中,不用再重复去服务端去获取,减少响应等待时间。

详情可参考:https://zhuanlan.zhihu.com/p/

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是达到高性能,解决单点故障(高可用),增加扩展性(水平伸缩)的终极解决方案。

举个事例,在早高峰乘地铁时候,紧挨小区的地铁口人特别多,一般会有限流,还会有个地铁工作人员用大喇叭在喊“着急的人员请走B口,B口人少车空”。那么,地铁工作人员就是负责负载均衡的。

为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,一般网站对外提供的访问入口都是一个。比如 www.taobao.com,当用户在浏览器输入 www.taobao.com 的时候如何将用户的请求分发到集群中不同的机器上呢?这就是负载均衡在做的事情。

如下图中的代理,就可以是 nginx 服务器,接收到请求后,分配给服务集群:

根据负载均衡技术实现在 OSI 七层模型(7应用层、6表示层、5会话层、4传输层、3网络层、2数据链路层、1物理层)的不同层次,可以给负载均衡分类。常见的实现方式中,主要可以在应用层、传输层、网络层和数据传输层做文章。所以,工作在应用层的负载均衡,我们通常称之为七层负载均衡;工作在传输层的我们称之为四层负载均衡

大致可以分为以下几种,其中最常用的是四层和七层负载均衡

  • 二层负载均衡(不同的 MAC)

负载均衡服务器对外依然提供一个 VIP(虚 IP),集群中不同的机器采用相同 IP 地址,但是机器的 MAC 地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标 MAC 地址的方式将请求转发到目标机器实现负载均衡。

  • 三层负载均衡(不同的 IP)

和二层负载均衡类似,负载均衡服务器对外依然提供一个 VIP(虚 IP),但是集群中不同的机器采用不同的 IP 地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过 IP 将请求转发至不同的真实服务器。

  • 四层负载均衡(IP + Port 组合)

四层负载均衡工作在 OSI 模型的传输层,由于在传输层,只有 TCP/UDP 协议,这两种协议中除了包含源 IP、目标 IP 以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器

  • 七层负载均衡

七层负载均衡工作在 OSI 模型的应用层,应用层协议较多,常用 http、radius、dns 等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个 Web 服务器的负载均衡,除了根据 IP 加端口进行负载外,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。

Nginx:主要用来做七层负载均衡。Nginx 是一个网页服务器,它能反向代理 HTTP, HTTPS, SMTP, POP3, IMAP 的协议链接,以及一个负载均衡器和一 个HTTP 缓存。

详细可参考:https://www.cnblogs.com/fanBlog/p/10936190.html

官网下载页:nginx: download

可下载稳定版:

另外 Mainline version 主线版本为最新版本的,Legacy version 历史版本,可按需下载。

安装包中的目录与对应功能:

Nginx 默认监听当前服务器的 80 端口,如下图:(配置文件路径示例:C: ginx-1.24.0conf ginx.conf)

因此可先看下 80 端口有没有被占用。方法是打开 cmd 窗口,用命令(...>netstat -ano)来查看当前端口使用情况,最后一列为 PID。使用命令(...>taskkill /f /t /pid PID编号)结束对应的进程。如果占用 80 端口的是一个关键进程关不掉,那么就是惹不起得躲,将 Nginx 配置文件中的 80 端口改掉。

  • 开启服务

可以通过双击 nginx.exe,也可以通过命令的方式,如下在 Nginx 的主目录地址栏输入 cmd,并回车:

打开命令行窗口,路径是在当前文件夹,如下图,然后输入命令:nginx 或者 start nginx 开启服务:

然后在地址栏输入:http://localhost:80,查看服务是否启动成功。

  • 关闭服务

需要另开一个命令窗口通过命令(...>nginx -s stop)进行关闭。

参考:https://blog.csdn.net/weixin_/article/details/

  • 初始化和安装

编译安装完成后,在 /usr/local/ 目录下会自动生成一个 nginx 目录,代表安装成功。

  • 开启服务

浏览器输入服务 IP,默认 80 端口:

在执行命令来配置 nginx 编辑环境时,如下异常提示:

如何解决:

gcc 的全称是 GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始 gcc 是作为 C 语言的编译器(GNU C Compiler),现在除了 C 语言,还支持 C++、java、Pascal 等语言,gcc 还支持多种硬件平台。

在执行命令来配置 nginx 编辑环境时,如下异常提示:

PCRE 库(Perl Compatible Regular Expressions Library)是一个正则表达式库,提供了与 Perl 语言兼容的正则表达式功能。它被广泛用于各种编程语言和软件中,用于处理字符串匹配、搜索、替换等操作。

如何解决:

openssl 命令是强大的安全套接字层密码库。OpenSSL 是一种开源命令行工具,通常用于生成私钥,创建 CSR,安装 SSL / TLS 证书以及标识证书信息等等。通过使用 OpenSSL,用户可以保护自己的数据不受未授权访问,并确保通信的安全性。

参考:https://www.cnblogs.com/orangebooks/p/12058830.html https://blog.csdn.net/memory6364/article/details/87258101

  • 检查配置文件是否配置成功,再开启服务前执行
  • 开启服务
  • 停止服务
  • 重启服务
  • 查看版本
  • 查看 nginx 进程,以及关闭指定进程
  • reopen 重新打开日志文件

当 nginx 日志文件内容较多时,一般需要按天切割文件,每天的日志放在一个文件中,并用日期命名,方便日后查找。但是简单的把文件移动并重新命名是无法及时生效的,因为在 linux 下的文件句柄,文件在被打开的情况下 mv 移走文件,操作这个文件的进程还是有这个文件的信息,原进程还是读写原来的文件。因此简单的 mv 无法生效也就无法完成我们想要的文件分割

此时就需要根据以下步骤:先移走文件并重命名;再利用 nginx 的 reopen 功能,完成新日志文件的生成。

Nginx 的主配置文件是 nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events 块和 http 块

在 http 块中,又包含 http 全局块、多个 server 块。每个 server 块中,可以包含 server 全局块和多个 location 块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中,其作用域也不同。

一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级块中的配置为准。比如,某指令同时出现在 http 全局块中和 server 块中,并且配置不同,则应该以 server 块中的配置为准。

全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。

通常包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数、Nginx 进程 PID 存放路径、日志的存放路径和类型以及配置文件引入等。

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接

常用到的设置包括:

  • 是否开启对多 worker process 下的网络连接进行序列化;
  • 是否允许同时接收多个网络连接;
  • 选取哪种事件驱动模型处理连接请求;
  • 每个worker process可以同时支持的最大连接数等。

关于全局和单进程最大打开文件数:

http 块是 Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。

http 块中可以包含自己的全局块,其中配置的指令包括文件引入、MIME-Type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数上限等。

log_fomat 变量值定义:

参数名 参数意义 $remote_addr 客户端 IP $remote_user 远程客户端用户名,一般为:‘-’ $time_local 时间和时区 $request 请求的 url 以及 method $status 响应状态码 $body_bytes_send 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳转过来的 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的 IP

server 块和“虚拟主机”的概念有密切联系。

虚拟主机,又称虚拟服务器、主机空间或是网页空间,该技术是为了节省互联网服务器硬件成本而出现。这里的“主机”或“空间”是由实体的服务器延伸而来,硬件系统可以基于服务器群,或者单个服务器等。虚拟主机技术主要应用于 HTTP、FTP 及 EMAIL 等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。从用户角度来看,一台虚拟主机和一台独立的硬件主机是完全一样的。

在使用 Nginx 服务器提供 Web 服务时,利用虚拟主机的技术,就可以在同一台服务器上只运行一组 Nginx 进程,来对应运行多个网站

每一个 http 块都可以包含多个 server 块,而每个 server 块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供一组逻辑上关系密切的服务(或网站)。

和 http 块相同,server 块也可以包含自己的全局块,同时可以包含多个 location 块。在 server 全局块中,最常见的两个配置项是本虚拟主机的监听配置本虚拟主机的名称或 IP 配置

5.4.1 listen 指令

server 块中最重要的指令就是 listen 指令,这个指令有三种配置语法。这个指令默认的配置值是:listen *:80 | *:8000;只能在server块种配置这个指令。

部分参数说明:

  • address:监听的 IP 地址(请求来源的 IP 地址),如果是 IPv6 的地址,需要使用中括号“[]”括起来,比如 [fe80::1] 等;
  • port:端口号,为空时默认 80 端口。若未配置 listen 指令,那么如果 Nginx 以超级用户权限运行,则使用 *:80,否则使用 *:8000。多个虚拟主机可以同时监听同一个端口,但是 server_name 需要设置成不一样;
  • default_server:假如通过 Host 没匹配到对应的虚拟主机,则通过这台虚拟主机处理;
  • backlog=number:设置监听函数 listen() 最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -1,其他平台默认为 511;
  • accept_filter=filter:设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。本指令只在 FreeBSD 和 NetBSD 5.0+ 平台下有效。filter 可以设置为 dataready 或 httpready,详情可参阅 Nginx 的官方文档;
  • bind:标识符,使用独立的 bind() 处理此 address:port;一般情况下,对于端口相同而 IP 地址不同的多个连接,Nginx 服务器将只使用一个监听命令,并使用 bind() 处理端口相同的所有连接;
  • ssl:标识符,设置会话连接使用 SSL 模式进行,此标识符和 Nginx 服务器提供的 HTTPS 服务有关

listen 指令的格式看起来比较复杂,但在实际应用中并不会进行太复杂的配置。

如下几个简单的配置,可以单独制定 IP,单独指定端口或者同时指定 IP 和端口:

5.4.2 server_name 指令

用于指定虚拟主机的域名,它决定了请求将被路由到哪个服务器块处理。语法是:

关于优先级和匹配顺序:

  当有多个 server_name 配置时,Nginx 会根据配置文件中的顺序以及域名匹配的优先级来决定使用哪个 server_name。

  匹配顺序:准确匹配 > 通配符在开头匹配成功 > 通配符在结尾时匹配server_name成功 > 正则表达式匹配成功。

 在以上四种匹配方式中,如果 server_name 被处于同一优先级的匹配方式多次匹配成功,则首次匹配成功的虚拟主机处理请求。

若未配置 server_name:

  就默认为空字符串 "",这意味着它不会匹配任何基于域名的请求

  如果没有其他 server 块匹配请求,那么请求将被这个默认 server 块处理。

HTTPS 配置:

  当配置 HTTPS 时,通常需要为 server_name 指定相应的 SSL 证书。

  例如:表示监听 443 端口(HTTPS)并为 abc.com 提供 SSL 加密。

重定向配置:

  有时需要将 HTTP 请求重定向到 HTTPS,可以通过 rewrite 指令实现,例如:表示将所有 HTTP 请求永久重定向到 HTTPS。

怎样使用基于 IP 地址的虚拟主机配置?比如访问 192.168.1.31 由虚拟主机一处理,访问 192.168.1.32 由虚拟主机二处理。

这时要先在网卡绑定别名,比如说网卡之前绑定的 IP 是 192.168.1.30,现在将 192.168.1.31 和 192.168.1.32 这两个 IP 都绑定到这个网卡上,那么请求这个两个 IP 的请求才会到达这台物理主机,然后再通过 Nginx 路由转发到指定的虚拟主机。

绑定别名后进行以下配置即可:

5.4.3 location 块

用于匹配不同的 uri 请求,并对这些请求执行特定的操作。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在 location 块中提供功能。

在 Nginx 的官方文档中定义的 location 的语法结构为:

其中,uri 变量是待匹配的请求字符串,可以是不含正则表达的字符串,如 /myserver.php 等;也可以是包含有正则表达的字符串,如 .php$(表示以.php结尾的URL)等。

方括号里的部分,是可选项,用来改变请求字符串与 uri 的匹配方式。在不添加此选项时,Nginx 服务器首先在 server 块的多个 location 块中搜索是否有【 uri 】和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,服务器再用 location 块中的【正则 uri 】和请求字符串匹配,当第一个正则 uri 匹配成功,结束搜索,并使用这个 location 块处理此请求;如果正则匹配全部失败,就使用刚才记录的匹配度最高的 location 块处理此请求

下边看下可选项的具体意义:

  • =:用于 uri 前,要求请求字符串与 uri 完全一样。如果已经匹配成功,就停止继续向下搜索并立即处理此请求
  • ^~:用于 uri 前,直接使用匹配度最高的 location 处理请求,不再使用正则 uri 和请求字符串做匹配;
  • ~:用于表示 uri 包含正则表达式,并且区分大小写
  • ~*:用于表示 uri 包含正则表达式,并且不区分大小写

注意:如果 uri 包含正则表达式,就必须要使用“~”或者“~*”标识

另外,经过 URL 编码的 uri 也是可以匹配成功的。比如空格被编码为“%20”,问号被编码为“%3f”等。选项“~”自动对 uri 中的这些符号将会进行编码处理。比如,如果 location 块收到的 uri 为“/html/%20/data”,则当 Nginx 服务器搜索到配置为“~ /html/ /data”的 location 时,可以匹配成功。

  • root 指令

用于设置请求寻找资源的跟目录。当浏览器请求某个资源时,Nginx 会根据 root 指令指定的路径和 location 匹配的路径组合成完整的文件路径,以此来查找并返回对应的静态资源。

此指令可以在 http 块、server 块或者 location 块中配置。

由于使用 Nginx 服务器多数情况下要配置多个 location 块对不同的请求分别做出处理,因此该指令通常在 location 块中进行设置。

root 指令通常与 location 指令配合使用。例如,配置如下 location:

如果 location 块指定为 location /flv/ { root /data/web; },那么当请求的 URL 为 /flv/example.txt 时,Nginx 会在 /data/web/flv/example.txt 的位置查找文件。

那么当请求的 URL 为 时,Nginx 会在的位置查找文件。

  • alias 指令

与 root 指令类似,但 alias 不会将 location 的值添加到文件路径的末尾,而是直接使用 alias 指定的路径作为文件路径。

  • index 指令

定义请求 uri 指向的默认文件名。如果请求的是一个目录,Nginx 会尝试寻找此目录下的 index 文件中的文件并将其作为响应返回。

  • return 指令

根据条件返回指定的HTTP状态码。例如,如果请求的资源不存在,可以返回404状态码。

http 块中的 error_page 允许你指定一个特定的页面作为错误响应,而 location快中的 return 则只能返回标准的错误响应代码和消息。

单击打开 配置示例和简介

配置详解参考:https://www.cnblogs.com/54chensongxia/p/12938929.html

大佬文章推荐:https://zhuanlan.zhihu.com/p/34943332 https://www.cnblogs.com/48xz/p/15781821.html https://zhuanlan.zhihu.com/p/   https://kb.cnblogs.com/page//

  • 上一篇: 驼峰命名什么意思
  • 下一篇: jrebel setup guide
  • 版权声明


    相关文章:

  • 驼峰命名什么意思2025-03-18 16:01:04
  • geohash java2025-03-18 16:01:04
  • linux lib是什么2025-03-18 16:01:04
  • c++ tr12025-03-18 16:01:04
  • 本地进程间通信2025-03-18 16:01:04
  • jrebel setup guide2025-03-18 16:01:04
  • visual studio2012怎么卸载2025-03-18 16:01:04
  • 数据库压测报告2025-03-18 16:01:04
  • 编程实现基于udp的ping2025-03-18 16:01:04
  • 基于图搜索的路径规划算法2025-03-18 16:01:04