Nginx动静分离,rewrite规则,HTTPS服务

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;