Loading

Nginx 入门

什么是Nginx

Nginx (“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

Nginx能做什么

  • 反向代理
    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址

正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问(我的理解是类似FQ的VPN)

  • 负载均衡
    单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
  • 动静分离
    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

Linux下的Nginx安装

使用Centos 7系统

  • 安装nginx相关依赖
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
  • 安装Nginx

下载完成后使用如下命令解压

tar -zxvf nginx-1.19.1.tar.gz

切换到解压后的Nginx目录

cd nginx-1.19.1

输入如下命令使用默认配置

./configure

编译安装

make && make install

完成之后在usr/local 下会出现nginx目录说明已经安装成功,如果没有出现,使用如下命令查看目录在哪

whereis nginx

进入usr/local/nginx目录下,进入其中的sbin目录输入如下命令

./nginx 

此时用如下命令查看Nginx进程是否存在

ps -ef | grep nginx

打开浏览器,输入虚拟机的IP地址+80端口访问,出现如下页面则Nginx已启动
在这里插入图片描述
如果进程中有Nginx,但是无法访问,可尝试如下方式解决。

1.开启 web 端口

 firewall-cmd --permanent --add-port=80/tcp

2.重启 firewall 

 firewall-cmd --reload

Nginx常用命令

使用Nginx操作命令前提条件:必须进入Nginx的目录 /usr/local/nginx/sbin

  • 查看Nginx版本号
./nginx -v
  • 启动Nginx
./nginx
  • 关闭Nginx
./nginx -s stop(快速关闭,不管有没有正在处理的请求)
./nginx -s quit(优雅的关闭方式,Nginx在退出前完成已经接受的连接请求)
  • 重新加载Nginx
./nginx -s reload

Nginx的配置文件

配置文件的位置:/usr/local/nginx/conf/nginx.conf

Nginx的配置文件由三部分组成

  1. 全局块在这里插入图片描述

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如第二行配置的:worker_processes 1;

  1. events块在这里插入图片描述

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process
下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。 上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

  1. http块在这里插入图片描述

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 需要注意的是:http 块也可以包括 http 全局块、server 块。

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
节省互联网服务器硬件成本。 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

1、全局 server 块 最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

2、location 块 一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

配置反向代理实例一

下面实例中的地址为我本地虚拟机的地址,请按照实际情况修改
每个实例之后建议重新使用默认的nginx.conf进行修改,以免出错看不到效果

准备工作

在linux系统中安装tomcat,使用默认端口8080

需要Java环境

将tomcat放到linux系统中,解压后进入tomcat目录下的bin目录。输入以下命令启动tomcat

sh startup.sh

对外开放8080端口

firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

修改Nginx配置文件
将server块下的server_name 的localhost改成当前虚拟机的IP地址
在这里插入图片描述
在location下直接加入如下的一段,将访问转发到linux上8080端口的tomcat

proxy_pass http://127.0.0.1:8080;

在这里插入图片描述
保存退出

启动Nginx

在Windows下浏览器输入虚拟机的IP地址加80端口,出现的是8080端口的tomcat页面则说明成功
在这里插入图片描述

配置反向代理实例二

准备两个tomcat
可以直接复制上面那个8080端口的tomcat,再进行修改端口号为8081
复制完成后,进入需要修改成8081端口的tomcat,进入其中的conf目录,修改其中的server.xml文件

先将shutdown的端口修改,我这里修改成8015
在这里插入图片描述
再到下面将端口修改为8081
在这里插入图片描述
再下面修改为8019
在这里插入图片描述
按照上面的开放端口的方法开放8081端口和9001端口

将8080端口的tomcat和8081端口的tomcat都启动

创建一些简单页面和文件夹以便测试效果
在8080端口的tomcat的webapps文件夹下创建文件夹first,并将如下内容的html写入

<h1>first</h1>
<p>8080</p>

同样的在8081端口tomcat下创建文件夹

配置Nginx
在nginx.conf 文件中加入如下的配置

server {
        listen       9001;
        server_name  192.168.47.100;

        location ~ /first/ {
           proxy_pass http://127.0.0.1:8080;
        }

        location ~ /second/ {
           proxy_pass http://127.0.0.1:8081;
        }
    }

重新加载nginx配置

在windows下浏览器访问 http://192.168.47.100:9001/first/a.html
看到的效果和8080端口一致

location指令说明
语法如下:

location [ = | ~ | ~* | ^~] uri {

}

1、=: 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,
就停止继续向下搜索并立即处理该请求
2、~: 用于表示uri包含正则表达式,并且区分大小写
3、~*: 用于表示uri包含正则表达式,并且不区分大小写
4、^~: 用于不含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字
符串匹配度最高的location后,立即使用此location处理请求,而不再使用location
块中的正则uri和请求字符串做匹配

注意: 如果uri包含正则表达式,则必须要有或者标识。

配置负载均衡实例

在8081端口的tomcat的webapps下创建first文件夹,并创建如下内容的html页面
(为了查看到负载均衡的效果)

<h1>first</h1>
<p>8081</p>

修改nginx配置
在http块内加入如下内容

upstream myserver{
        server 192.168.47.100:8080;
        server 192.168.47.100:8081;
    }

再在location下加入如下内容

proxy_pass http://myserver;

在这里插入图片描述
输入http://192.168.47.100/first/a.html 测试发现8080和8081 轮流出现,说明负载均衡配置完成

在linux下有Nginx、LVS、 Haproxy 等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略):。

1、轮询(默认)

每个请求按时间顺序逐一分配到不 同的后端服务器,如果后端服务器down掉,能自动剔除

2、weight

weight代表权重默认为1,权重越高被分配的客户端越多。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
在这里插入图片描述
3、ip hash

每个请求按访问ip的hash结果分配, 这样每个访客固定访问一个后端服务器,可以解诀session的问题。例如:
upstream server pool{
ip_ hash
server 192.168.5.21:80
server 192.168.5.22:80
}

4、fair (第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool {
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}

配置动静分离实例

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种, 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案; 另外一种方法就是动态跟静态文件混合在一起发布,通过 Nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使 浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资 源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存),设置 3d,表示在这 3 天之内访问这个 URL,发送 一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

准备工作

  • 在Linux中准备静态资源,用于访问
    在usr/local下创建static-data文件夹,再在这个文件夹下创建两个名为www和image的文件夹

在html文件夹创建一个html文件内容如下

<h1>This is a test page</h1>

再在image文件夹中准备一张图片

  • 配置Nginx
    修改Nginx的配置文件
    在配置文件中加入如下的配置
		location /www/ {
            root  /usr/local/static-data/;
        }
        location /image/ {
            root  /usr/local/static-data/;
            autoindex on;
        }

启动Nginx
访问 http://192.168.47.100/image/
可以看到
在这里插入图片描述
这是我们开启了autoindex的效果

想要查看那张图片,只要加上文件名就可以了

效果如下
在这里插入图片描述
同样的,可以访问我们设置的那个测试页面

posted @ 2020-07-21 15:36  Xianhao  阅读(63)  评论(0编辑  收藏  举报