Skip to content

nginx 相关

概述

本文介绍了 nginx 的一些常用命令和配置

常用命令

sh
# 启动 nginx
sudo systemctl start nginx

# 验证配置是否正确
nginx -t

# 重启 nginx
nginx -s reload

# 退出 nginx
nginx -s quit

# 关闭 nginx
nginx -s stop

常用配置

TIP

以下内容是 nginx 配置的一部分

反向代理、负载均衡、接口重写

nginx
# 定义负载均衡上游服务器组
upstream backend_nodes {
  # 默认轮询策略
  server server1_ip:port;
  server server1_ip:port;
}

server {
  listen 80;
  # 设置 ip 或者域名
  server_name your_ip_or_domain_name;

  # 开启 gzip 压缩,提升前端性能
  gzip on;

  # 反向代理 & 负载均衡
  location /api {
    # 接口重写(将前端 /api/xxx 形式的接口请求转发到后端 /xxx)
    rewrite ^/api/(.*) /$1 break;
    # 将请求转发到上游服务器组
    proxy_pass http://backend_nodes;

    # 传递必要的头部信息
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # 超时设置
    proxy_connect_timeout 5s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;

    # 禁用缓存
    proxy_buffering off;
  }

  # 日志配置
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
}

SPA 页面配置

TIP

nginx 默认会开启协商缓存

nginx
location / {
  # 打包产物存放路径
  root dist_path;
  # 默认访问目录下的 index.html
  index index.html;
  # 尝试访问路径下的资源文件、资源目录,如果都不存在则返回 index.html
  # index.html 兜底是为了使页面打开页面时,SPA 能正确获取入口,后续页面路由变化不会发起请求
  try_files $uri $uri/ /index.html;

  # 开启 gzip
  gzip on;

  # 缓存配置
  add_header Cache-Control "no-cache, no-store, must-revalidate";
  # http 1.0 兼容的 Cache-Control
  add_header Pragma "no-cache";
  # expires 指令可以同时设置 Cache-Control 和 Expires
  expires 0;
}

# 为资源文件配置缓存,优先级更高
location ~* \.(?:css|js|jpg|jpeg|png|svg|gif|ico|gif|woff|woff2|ttf|eot)$ {
  # 打包产物存放路径(必须配置),资源文件只能命中一个 location 进行处理
  root dist_path;

  # 设置缓存一年(因为打包产物有 hash 后缀,不用担心新改动不生效)
  expires 1y;
  add_header Cache-Control "public, immutable";
  access_log off;
}

微前端配置

TIP

主应用会加载微应用资源,所以微应用部署需要配置跨域 Header

nginx
location xxx {
  // others...

  # 设置跨域
  add_header Access-Control-Allow-Origin "main_app_origin";
  add_header Access-Control-Allow-Methods "GET";
  add_header Access-Control-Allow-Headers "*";
}

参考链接

基于 MIT 许可发布