Nginx 介绍及基础配置
正向代理
如果把局域网外的internet想象成一个巨大的资源库,那么局域网中的客户端要访问internet,则需要通过代理服务器来访问,这种代理服务器就称之为正向代理。
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
反向代理
反向代理,其客户端对这种代理是无感知的,客户端不需要做任何配置就访问服务,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,再返回给客户端。这时反向代理服务器和目标服务器对外就是一个服务器。
客户端去访问www.xxx.com这个网站时,这个反向代理服务器会将你的请求转发给其它的服务器(随机),然后再返回请求。
负载均衡
单个服务器解决不了,就增加服务器的数量,然后将请求分发到各个服务器上,将原来请求集中到单个服务器上的情况改为多个服务器,将负载分发到不同服务器,也就是所谓的负载均衡。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后再将结果返回给客户端,这种情况在处理并发请求较少的情况下是比较合适的,成本也低,但随着数据量不断增加,业务复杂程度增加,就会造成请求变得缓慢。这时我们会选择升级服务器配置,来解决这个问题,但是服务器配置也是有限的。下图看着跟反向代理一样,区别就是负载均衡对反向代理增加了一些策略配置,我客户端15个请求去访问,而代理服务器会根据设定的策略将请求转发给对应的服务器,一个服务器去处理5个请求,对负载进行分流,从而减轻压力。
动静分离
为了加快服务器的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低服务器的压力。
简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格来说就是把动态请求和静态请求分开,可以理解为使用nginx处理静态请求,tomcat处理动态页面。静动分离有两种,一种是把静态文件独立成单独域名放在独立服务器上,另一种是动态和静态文件混合在一起,使用nginx来分开。
Nginx环境搭建
参考链接
Nginx配置文件
第一部分:全局块
主要设置一些影响nginx服务器整体运行的命令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
1 | #user nobody; |
worker_processes是nginx服务器并发处理服务的关键配置,其值越大,处理并发量也越多,但是会受到设备限制。
第二部分:events块
主要影响nginx服务器与用户的网络连接
1 | events { |
最大连接数1024,此配置对nginx性能影响较大,根据实际情况灵活配置。
第三部分:http块
nginx配置最频繁的部分。代理、缓存、日志定义等大部分功能和第三方模块都在此配置。
http块也包括http全局块、server块。
- http全局块
htpp全局配置包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
1 | http { |
- sever块
和虚拟主机有密切关系,每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机,而每个server块也分为全局server块,以及可以同时包含多个location块。
- 全局sever块
本虚拟主机监听配置和主机的名称或IP配置
location块
基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配(/uri_string),对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,许多的第三方模块的配置也在这里进行。
1 | server { |
location通过一些正则来进行匹配。
匹配机制链接
实验环境准备
- java
- tomcat
下载链接
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
访问过程
配置反向代理
在windows系统的host文件进行域名和ip对应关系的配置
访问成功
nginx配置反向代理(一)
1 | server { |
proxy_pass
这个参数就是做代理转发。
这里重新加载报错
解决方案
1 | /usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf |
然后在重新reload。。。
最后的效果图
nginx配置反向代理(二)
使用nginx反向代理,通过路径跳转到不同端口的服务中去,比如访问 http://127.0.0.1:9001/test1/ 直接跳转到127.0.0.1:8080,访问 http://127.0.0.1:9001/test2/ 直接跳转到127.0.0.1:8081。
在Linux复制tomcat,修改conf配置文件server.xml,更改端口号,然后再启动tomcat,注意防火墙的端口配置规则。
为了区别两个tomcat,分别在tomcat的webapps中创建目录并写入内容
nginx具体配置
测试
负载均衡配置
1 | http{ |
- 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器关闭,能自动剔除。
1 | upstream myserver{ |
- weight(权重)
weight代表权,默认为1,权重越高分配越多
1 | upstream myserver{ |
- ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定一个后端服务器,可以解决session问题。
1 | upstream myserver{ |
- fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1 | upstream myserver{ |
eg.
静动分离配置
通过location指定不同的后缀名实现不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量,Expires定义:是给一个资源设定一个过期时间。
例如设置 expires 3d,表示在三天之内访问URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则之间从服务器下载,返回状态码200,如果有经常更新的文件,不建议使用expires来缓存。
root 指定资源文件夹
autoindex on 参数列出文件
nginx高可用
当只有一台nginx服务器的时候,如果这台服务器宕机,那么所有业务服务都将终止。使用两台nginx服务器,一台当备用,当主服务器出现问题,就会转到备用服务器。
准备:
- 两台服务器192.168.73.11和192.168.73.10
- 两台服务器装nginx
- 两台服务器装keepalived
1 | yum install keepalived -y |
安装完成之后在etc里有keepalived目录,里面就是配置文件。
keepalived配置
1 | #全局定义 |
router_id LVS_DEVEL 唯一标识
检查脚本nginx_check.sh
1 | #!/bin/bash |
systemctl start keepalived
启动nginx/keepalived
ps -ef | grep keepalived
查看虚拟IP
关闭nginx服务