关于Nginx的使用小结

一. 背景说明

Nginx是一个高性能的HTTP和反向代理服务器,自诞生起,以其稳定性、丰富的功能集、示例配置文件和低系统资

的消耗而闻名。在高连并发的情况下,Nginx是Apache服务器不错的替代品:能够支持高达50000个并发连接数的响

应。因此其作为web服务器被广泛应用到大流量的网站上,包括腾讯、新浪、网易等访问量巨大的网站。


二.为什么选择Nginx


(1) 更快

这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的

并发请求),Nginx可以比其他web服务器更快的饿响应请求。


(2)高扩展性

Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对

摸一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。这种低耦合度的优秀设计,早就了Nginx

大的第三方模块。

 

(3)高可靠性

高可靠性是我们选择Nginx的最基本条件,因为Nginx的可靠性是大家有目共睹的,很多家高流量网站都在核心服务

器上大规模使用NginxNginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的

常用模块都非常稳定,每个worker进程相对独立,master进程在1worker进程出错时可以快速“拉起”新的worker

进程提供服务(在后续章节的demo中会演示该过程)。


(4)低内存消耗

一般情况下,10000个非活跃的HTTPKeep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的

基础。

 

(5)单机支持10万以上的并发连接

这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量

并发请求。理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。

 

(6)热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7*24小时不间断服务的前提

下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。


三.关于反向代理


反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网路上

的服务器,并将从服务器得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通俗的说,反向代理方式实际上就是一台负责转发的代理服务器,冒死充当了真正服务器的功能,但实际上并不

是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。例如我们让Nginx监听一个9999端

口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没

直接返回,而是直接给Nginx,由Nginx进行返回,这里,我们会以为是Nginx进程了处理,但实际上进程处理的tomcat。

由于Nginx具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务于,通常

Nginx会被配置为即是静态web服务器也是反向代理服务器,不适合Nginx处理的请求就会直接转发到上游服务器中处

理。因此我们可以用Nginx缓存那个静态文件,比如CSS,JS,HTM,PNG,JPEG等文件。



下面将会用一个例子来演示Nginx的反向代理的配置过程。


(1) 首先我们要先下载软件。可以到官网下载http://nginx.org/en/download.html。由于我的电脑是Mac OS的, 所

以我下载的Mac版本的。但基本的操作在各个系统都类似。直接cd到下载的目录中,然后输入start nginx即可。在浏览

器地址栏中输入http://localhost,如果启动成功的话我们会看到如下界面:



(2) 我们在Nginx的安装目录中找到nginx.conf,可以看到


(mac版本的默认的监听端口是8080,windows版本的默认的监听端口是80).


这是nginx.conf最基础的配置,下面我们来简单介绍一下:

listen:表示当前的代理服务器监听的端口,注意,如果我们配置了多个server,这个listen要设置成不一样(我在这里监

听的9999)。


Server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,也就是Nginx本地的文件夹内。


Location:表示匹配的路径,后面的“/”表示匹配了/的所有请求会被匹配到这里。


Root:root表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对于我们将Nginx作为静态文件

缓存很有作用,我们可以把那些静态的文件都放在一个文件夹里,然后root指向这个路径即可。


Index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找

第二个,依次类推。


下面我们将介绍如何进行反向代理,其实很简单,我们只要更改location模块内的配置即可(#代表注释),如下图所示:



因为我的tomcat 7.0.68 是在8080端口的,可以根据自己的需要修改。这里有一个新元素proxy_pass,它表示代理路径,

相当于转发,而不像之前说的root必须指定一个文件夹。

此时我们修改了配置文件,我们需要reload一下nginx。



如果一切顺利,在浏览器地址栏中输入localhost:9999,我们会看到如下界面:




此时我们点击什么链接都是没有问题的,和访问http://localhost:8080一样。

上述小例子讲述了如何进行反向代理的配置,即将Ngnix作为代理服务器,tomcat作为上游服务器。


四. 关于静态服务器

前面的例子让Nginx进行了转发,即所谓的反向代理。但实际上我们的需求不会是这样的,我们需要份文件类型来进

行过滤,比如jsp这种动态请求直接给tomcat处理,如前所述,nginx不适合处理动态的请求。而像html,css,js等一

些静态文件可以直接给nginx进行缓存。此处我们需要用到location已经在过滤时使用正则表达式。修改如下图所示:




我们可以打开root对应的路径看一下,该文件夹放置的静态文件:




该文件夹下主要放置的是tomcat首页的一些图片以及css等静态文件。修改完文件之后,还是需要reload一下。此时

我们在浏览器中输入http://localhost:9999。如下图所示:



当我们不指定jsp页面的时候,它会出现找不到,因为,此时并没有相应的location匹配,所以就会有404错误,这时

就跳到了nginx自定义的error页面了。


而当我们使用http://localhost:9999/index.jsp去访问时,我们看到了熟悉的页面:



而且图片那些都是显示正常,因为图片是png格式的,所以直接在tomcat/webapps/ROOT目录下直接查找,但是,如

果我们点击那些链接,例如Manager Application HOW-TO这个链接,我们发现:


这是因为html结尾的文件会被过滤到ROOT文件夹下,而该文件夹下并没有这个html文件,而是在docs下面的,所以就

会报错了。


五.关于负载均衡

作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平

均的分布到每一台上游服务器上。这里我来介绍下最基本的配置。

我们还是需要修改nginx.conf文件,在http模块里面新添加一个upstream 模块。并修改location中proxy_pass的参

数值。具体修改如下:



可以看见我们在upstream中添加了两台服务器,一台的8080对应的是tomcat7.0,而8088的对应的是tomcat8.5。此时,

我们reload之后,在浏览器地址栏中输入localhost:9999。我们发现页面显示有可能是tomcat7.0的主页,也有可能是

tomcat8.5的主页




此时,如果我们如果强制关掉其中任一个服务器(模拟一台服务器挂了),我们发现Nginx自动连接到另外一个服务器

中去了。

那如果我们只是希望一个服务器访问的机会比另外一个大,我们只需要在server后加上一个weight的权值即可,数字越

大,表面请求到的机会越大。如图所示:



此时我们再次刷新浏览器,我们发现tomcat8.5出现的概率明显大了很多。


六. 关于HTTPS的配置

HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议

封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层

协议。HTTPS使用的默认端口是443。

     而在Nginx中我们也可以进行HTTPS虚拟服务器的搭建,具体如下:




这里我由于本机443端口被占用,这里我监听的4444端口。ssl_certificate 对应的是server.crt证书存放的url,

ssl_certifiate_key是密钥存放的url。此时我们访问https://localhost:4444,我们就又可以看到tomcat8.5的主页了。




然而对于用户而言,很多用户不了解http和https的区别,经常会误输,因此我们希望当用户输入http的,我们的页面还

是可以跳转到https的页面。在Nginx中也是可以做到的,保持上述配置不变,修改http服务器中的重转发地址即可,具

体配置如下:



此时,我们再次在浏览器中输入localhost:9999,我们发现浏览器跳转到了https://localhost:4444 上面。

七. 总结

因为篇幅有限,以上内容只对于Nginx主要的几个功能做了最简单的配置,Nginx还提供很多其他的个性化配置,

除此之外还有第三方的模块可供选择,甚至我们还可以自己编写http模块,为自己订制一个。其他的具体配置可参

考Nginx的wiki。



### Nginx使用方法:配置与基本操作指南 #### 安装 Nginx 在大多数 Linux 发行版上,可以借助包管理工具来安装 Nginx。以下是两种常见的操作系统及其对应的命令: - 对于基于 Debian/Ubuntu 的系统: ```bash sudo apt update sudo apt install nginx ``` - 对于基于 RedHat/CentOS 的系统: ```bash sudo yum install epel-release sudo yum install nginx ``` 上述命令分别适用于不同的 Linux 版本,能够完成 Nginx 的基础安装[^3]。 #### 测试并启动 Nginx 安装完成后,需要验证配置文件的有效性以及服务的状态。通过以下方式可实现 Nginx 的启动和状态检查: - 使用 `nginx -t` 来测试当前配置文件是否有语法错误。 - 如果无误,则可通过以下命令之一启动 Nginx: ```bash sudo systemctl start nginx ``` 或者, ```bash sudo service nginx start ``` 这些步骤确保了服务器上的 Nginx 能够正常运行,并对外提供服务[^1]。 #### 基础配置调整 Nginx 的核心功能依赖其配置文件 `/etc/nginx/nginx.conf` 或者位于子目录下的站点特定配置文件(通常存放在 `/etc/nginx/sites-available/` 和 `/etc/nginx/sites-enabled/` 中)。编辑这些文件时需要注意以下几个方面: - **监听端口**:默认情况下,Nginx 监听的是 HTTP 协议的 80 端口;如果要支持 HTTPS,则需额外设置 SSL/TLS 参数。 - **根路径定义**:指定网页资源所在的物理位置,例如: ```nginx root /var/www/html; ``` - **索引文件名**:告诉 Nginx 默认加载哪个页面作为入口点,默认通常是 `index.html` 文件。 当修改任何配置项之后,务必重新加载 Nginx 配置以使更改生效: ```bash sudo systemctl reload nginx ``` 此过程无需中断现有连接即可应用新设定[^4]。 #### 图形化界面辅助——Nginx-UI 为了简化复杂的配置工作流,部分开发者会选择引入图形化的管理工具如 Nginx-UI 。它提供了直观的操作面板用于监控性能指标、管理虚拟主机以及其他高级特性。不过,在正式环境中部署此类插件前应充分评估安全性风险,并遵循官方文档指导完成初始化安装与调试[^2]。 #### 总结 综上所述,从初始安装到具体参数调节再到可视化解决方案的选择,构成了完整的 Nginx 实践路线图。每一步都紧密关联着最终能否成功搭建高效稳定的 Web 应用环境的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值