前言:
本文是在Linux下具体使用和重新了解一下Nginx。前提,先有,如果没有环境,可以先参考网上的相关配置哈。如果,新接手了一台服务器,可直接先检查是否已配置nginx环境。游览器直接访问服务器的ip,nginx默认端口是80,出现以下页面则证明nginx安装成功。
Nginx是什么?
Nginx是一个高性能的HTTP和反向代理服务器,处理高并发能力非常强大,能经受高负载的考验,有报告表明它能支持高达50,000个并发连接数。
Nginx能做什么?
由于Nginx的特性,它经常有如下的使用场景:①正向代理;②反向代理;③负载均衡;④动静分离;⑤高可用集群。
文章目录
- 一、何为反向代理
- 二、Nginx配置文件
- 2.1 第一部分:全局块
- 2.2 第二部分:events块
- 2.3 第三部分:http块
- 2.3.1 全局server块
- 2.3.2 location块
- 三、反向代理如何配置
- 3.1 反向代理实例一
- 3.2 反向代理实例二
- 3.3 反向代理实例三
- 3.3.1 nginx代理流程
- 3.3.2 配置ip和域名的绑定关系
- 3.3.3 在配置nginx配置请求转发
- 四、nginx常用的命令
在反向代理之前,需要先了解一下正向代理。
正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理,下面是正向代理的原理图。
比如,有的公司,日常工作职能局限于单位的局域网,如果想要访问互联网,怎么帮呢?就可以使用正向代理。
又比如,梯子就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里的客户端是要进行一些正向代理的设置的。(PS:梯子通俗的讲就是一种中转服务,当我们的电脑接入梯子后,我们对外IP地址就会变成梯子服务器的公网IP,我们请求或接受数据都会通过这个梯子服务器,然后传入到我们本机。) 反向代理:看下图,就能很清楚的明白。其实,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时,反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
**总结:**如果是我们客户端自己用,就是正向代理,正向代理代理客户端;如果是服务器再用,用户无感知,就是反向代理,反向代理代理服务器。
在学习Nginx之前,要熟知它的配置文件,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。
nginx的配置文件在 中的。(PS:如果修改过nginx.conf配置文件,记得要重启Nginx服务,很重要!)
配置文件中有很多号,该符号表示注释内容,去掉所有以开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):
举个例子,新部署一个前端项目:
①进入nginx.conf配置文件, ,修改location下的root对应的 doorlock;
②/usr/local/nginx下新建,用来存放打包后的前端静态文件;
③修改配置文件之后,要运行命令测试一下,进入目录目录下,运行 https://blog.51cto.com/u_16099315/nginx -t;
④如果显示没有错误,就执行 https://blog.51cto.com/u_16099315/nginx -s reload,;
⑤通过服务器的IP加端口号,即可访问新部署的项目,如http://139.xxx.211. xxx:8001/cloudBuy/cloudService/。
如果想把部署项目的IP访问地址,和域名匹配上,可以在server_name项进行配置( 注意:nginx要求 server_name 不能包含“/” ,所以,可以把http:/去掉即可),不然,可能会报错 。配置如下:
去掉注释信息后,可以将配置文件分为三部分:
举第二个例子,公司旧项目迁移,如何部署一个前端node项目 ():
背景介绍:公司之前的老项目,因更换服务器的原因,需要迁移。项目是前后端分离的,分为nodego 和webgo文件夹,nodego文件主要是做node接口转发请求,实际项目开发主要在webgo文件夹里面。目录结构如下:
操作流程如下:(前提条件:服务器安装node,npm,pm2)
①拷贝node文件夹到服务器指定文件夹,除了node_modules文件夹外,并创建public文件(存放打包之后的前端项目包,public文件夹已在程序中定义好,具体可查看nodego文件夹下的app.js文件) ;
②cd 到当前node文件夹下npm install ;
③利用pm2来创建任务;
测试环境启动命令: (sgnodeh5是项目文件夹的名称)
生产环境启动命令:(生产环境可以通过配置node环境来更改服务器配置,具体可查看config配置)
利用pm2来创建任务:当前默认为config-prod (启动时,可选择相关的启动配置文件config-prod)
在服务器上的文件夹路径为/opt/smartgo_erm,文件夹结构如下:
node配置的请求文件config文件夹如下:
以上步骤操作完毕,就可以查看对应的访问ip地址了,项目可以正常访问了。
项目在初始化的时候,一般会有配置项目访问默认的端口号,如何更改项目的端口号呢?
可以在nodego文件夹下bin文件中的里面进行修改:
2.1 第一部分:全局块
从配置文件开始到块之间的内容,主要会设置一些影响服务器整体运行的配置指令,主要包括:配置运行服务器的用户组,允许生成的数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等。
上面这行配置,是服务器并发进行处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。
2.2 第二部分:events块
块涉及的指令,主要影响服务器与用户的网络连接,常用的设置包括:是否开启对多下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种时间驱动模型来处理连接请求,每个可以同时支持的最大连接数等。
上述例子就表示每个支持的最大连接数为1024。这部分的配置对的性能影响较大,在实际中应该灵活配置。
2.3 第三部分:http块
这部分是服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:。下面的。
- 全局块:http全局块配置的指令包括:文件引入、定义、日志定义、连接超时时间、单链接请求数上限等;
-
块:这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
2.3.1 全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或配置。
2.3.2 location块
一个块可以配置多个块。
这块的主要作用是:基于服务器接收到的请求字符串(例如),对虚拟主机名称(也可以是别名)之外的字符串(例如:前面的/)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
3.1 反向代理实例一
实现效果:使用反向代理,访问直接跳转到注意:此处如果想要从跳转到本机指定的,需要修改本机的。此处略过。
配置代码:
如上配置,监听,访问域名(不加端口号时默认为80端口),故访问该域名时会跳转到路径上。
此处意思为:反向代理服务监听的80端口,如果有请求过来,则转到配置的对应服务器上,仅此而已;
在下,同时配置和选项时,两个选项只会二选一执行;
此处不能配置https反向代理。
实现效果:
3.2 反向代理实例二
实现效果:使用反向代理,根据访问的路径跳转到不同端口的服务中,监听端口为;
访问直接跳转到 访问直接跳转到 第一步:需要准备两个,一个端口,一个端口,并准备好测试的页面;
第二步:修改的配置文件,在块中配置
根据上面的配置,当请求到达Nginx反向代理服务器时,会根据请求路径不同进行分发到不同的服务器上。
实现效果:
Nginx完整配置文件:
3.3 反向代理实例三
3.3.1 nginx代理流程
本地游览器访问服务器,服务器反向代理服务器,当我们请求的时候直接访问到。这里将和安装在了同一台服务器上。
3.3.2 配置ip和域名的绑定关系
由于我们的没有域名,为了演示,因此在本地文件中配置服务器ip和域名进行绑定。这个文件的具体位置在 。在host文件中增加一句配置:
前面的ip是服务器的ip地址,后面的域名是随手起的用于绑定这个ip的一个域名。配置好之后,使用域名访问一下tomcat,如果能请求到默认页面,则配置成功。
3.3.3 在配置nginx配置请求转发
在默认的配置文件中做个修改:
以上这段配置的意思,就是请求47.104.xxx.xxx:80,都会转发至47.104.xxx.xxx:8080 。
现在游览器访问javatrip.com ,发现直接转发到了tomcat上了,这样简单的反向代理就完成了。