0%

Nginx动静分离

通过中间件将动态请求和静态请求分离,对于服务端而言,减少不必要的请求消耗,减少请求延时

配置示例:
打开Tomcat的8080端口作为动态请求,Nginx中存储静态资源文件

# 注意路径不能使用下划线,tomcat无法识别
upstream java-api{
        server 127.0.0.1:8080;
}
server {
        listen       80;
      server_name  localhost;
        # 对于指定路径的请求跳转到tomcat服务器
      location ~ \.jsp$ {                 
                proxy_pass http://java-api;
                index index.html index.htm;
        }
}

rewrite规则

Nginxrewire规则用于url重写以及重定向,主要是使用正则表达式
使用场景:

  • URL访问跳转,支持开发设计(页面跳转,兼容性支持,展示效果等)
  • SEO优化
  • 维护(后台维护,流量转发)
  • 安全(实现伪静态)

配置语法

# 配置在server,location,if中
# regex:需要改写的内容的正则表达式
# replacement: 要替换成哪一个url或者路径等
# flag:标识
rewrite regex replacement [flag];

标识flag的值

  • last:停止rewrite检测
  • break:停止rewrite检测
  • redirect:返回302临时重定向,地址栏会显示跳转后的地址
  • permanent:返回301永久重定向,除非客户端清除缓存,否则不需要在经过服务器就可以直接重定向,地址栏会显示跳转后的地址

last和break区别:

break在匹配到rewrite规则后,不会向下去查看是否有location匹配,而是直接到root目录下查看相应的路径下是否存在文件链接
last在配置到rewrite规则后,会重新对服务端发起一次请求,此时请求路径变为rewrite后的路径地址,所以能够匹配到下一个lication

示例:

server {
        listen 80 default_server; 
        server_name rewrite-test.com; 
        root html; 
        location ~ ^/break {
                # 无法访问到下一个location,所以访问会报404错误
                rewrite ^/break /test/ break; 
        } 
        location ~ ^/last {
                # 可以访问到
                rewrite ^/last /test/ last; 
        } 
        location /test/ {
                default_type application/json; 
                return 200 '{"status":success"}'; 
        } 
}

rewrite规则优先级:最先匹配server块的rewrite,再匹配lication

HTTPS服务

HTTPS对传输内容进行了加密,默认使用443端口

配置语法

# 默认off,配置在http,server
ssl on|off
# ssl的证书文件
ssl_certificate file;
# ssl证书的密码文件
ssl_certificate_key file;

HTTPS服务优化

  1. 激活keepalive长连接,一次连接处理更多请求,减少握手次数
  2. 设置ssl session缓存
ssl_session_timeout 5m;

Nginx主要是在客户端和服务端之间提供缓存服务,作为代理缓存

阅读全文 »

负载均衡:将客户端的请求通过调度单元分摊到多个操作单元上进行执行,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优。

阅读全文 »

正向代理和反向代理的区别:
正向代理代理的对象是客户端,如翻墙
反向代理代理的对象是服务端,客户端访问代理,代理根据情况连接到不同的服务器,客户端不关心请求到的是哪一台服务器

阅读全文 »

静态文件存储

静态资源即非服务器动态运行生成的文件:浏览器端渲染(HTML,CSS,JS),图片,视频,文件等

静态资源服务场景:CDN
将每个Nginx当成一个节点,其中有一个作为资源存储中心,其他节点通过动态资源回源获取资源,客户端请求静态资源时可以通过就近的服务器进行获取

阅读全文 »

Nginx基本配置

#user  nobody;	 #设置nginx服务的系统使用用户
worker_processes  1; 	#工作进程数,一般跟电脑cpu保持一致

#error_log  logs/error.log; 	#nginx错误日志
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info; #错误日志级别

#pid        logs/nginx.pid; 	#nginx服务启动的pid


events {
    worker_connections  1024; 	#每个进程允许最大连接数
    #use;	#工作进程数
}


http {
    include       mime.types;
    default_type  application/octet-stream;

      #日志语法,main表示格式名称
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main; #日志位置,与上面的main对应

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; #连接超时时间

    #gzip  on;
    # 每个服务配置一个server
    server {
        listen       8080; 	#监听端口
        server_name  localhost;	#服务器名称

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
    
    #路径控制(加“/”表示控制首页路径)
        location / {
            root   html;	#首页文件路径
            index  index.html index.htm;
        }

        #error_page  404              /404.html; #统一错误页面,指定错误码定位到错误路径

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;

    # 将上面指定的错误路径指定到特定的路径页面
        location = /50x.html {
            root   html;
        } 
    }
    include servers/*; #导入其他子配置文件
}
阅读全文 »

入门示例

配置maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>xm</groupId>
    <artifactId>springbootTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 从Spring Boot继承默认值 -->
    <parent>
        <groupId> org.springframework.boot </groupId>
        <artifactId> spring-boot-starter-parent </artifactId>
        <version> 2.1.6.RELEASE </version>
    </parent>

    <!--添加Web应用程序的典型依赖项 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>
阅读全文 »

数据分布

分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。

常见的分区规则有顺序分区和哈希分区:

  • 哈希分区:离散度好,数据分布业务无关,无法顺序访问
  • 顺序分区:离散度易倾斜,数据分布业务相关,可以顺序访问
阅读全文 »

基本概念

Redis哨兵(Sentinel)是Redis提供的一种高可用实现方案,Redis在主从复制下,一旦主节点出现问题,需要人工干预,手动将一个从节点更新为主节点(slaveof no one),同时还要通知应用方新的主节点,让其他从节点去复制新的从节点。这种方式存在弊端大,Redis Sentinel高可用方案就是为了解决这种问题

阅读全文 »

配置方式

建立复制

  1. 先再复制一个配置文件,更改端口号,启动redis-server并指定到该配置(实际应用一般主从节点部署在不同机器上)
  2. 建立主从节点复制
    1)在配置文件中加入slaveof {masterHost} {masterPort},随Redis启动生效
    2)在redis-server启动命令后加入 --slaveof {masterHost} {masterPort}生效
    3)直接使用命令:slaveof {masterHost} {masterPort}生效

    slaveof命令指定祝节点,并将当前节点设置为从节点,建立成功后,从节点会复制主节点的数据

阅读全文 »