nginx https 一个端口代理多个前端项目

打包修改
!!!注意:第一个location root 调用的项目不用修改 打包路径,直接用 '/',其他项目或者需加 /mobile 路径

javascript 复制代码
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
//后端接口
    upstream backServer {
        server 10.0.0.249:8001  max_fails=5 fail_timeout=15s weight=1;
        keepalive 256;
     }
    server {
        listen       8004 ssl;
        server_name  localhost;
        ssl_certificate      /usr/local/nginx/conf/cert/lingyiitech.com.pem;
        ssl_certificate_key  /usr/local/nginx/conf/cert/lingyiitech.com.key;
        ssl_session_timeout 5m;
         ssl_protocols TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        charset utf-8;
//PC主项目
        location / {
            root    /www/ck-study/pc/dist;
            index   index.html index.htm;
        } 
//移动端副项目
	location /mobile {
            alias  /www/ck-study/mobile/dist/;
            try_files $uri $uri/ /dist/index.html/;
            index index.html index.htm;
        }
//文件代理
        location /file/ {
            alias  /www/ck-study/ck-file/;
            autoindex on;                         # 启用自动首页功能
            autoindex_format html;                # 首页格式为HTML
            autoindex_exact_size off;             # 文件大小自动换算
            autoindex_localtime on;               # 按照服务器时间显示文件时间
            default_type application/octet-stream;  # 将当前目录中所有文件的默认MIME类型设置为
            sendfile on;                          # 开启零复制文件传输功能
            sendfile_max_chunk 1m;                # 每个sendfile调用的最大传输量为1MB
            tcp_nopush on;                        # 启用最小传输限制功能
            directio 5m;                          # 当文件大于5MB时以直接读取磁盘的方式读取文件
            directio_alignment 4096;              # 与磁盘的文件系统对齐
            output_buffers 4 32k;                 # 文件输出的缓冲区大小为128KB
            max_ranges 4096;                      # 客户端执行范围读取的最大值是4096B
            send_timeout 20s;                     # 客户端引发传输超时时间为20s
            postpone_output 2048;                 # 当缓冲区的数据达到2048B时再向客户端发送
            chunked_transfer_encoding on;         # 启用分块传输标识
        }
//API接口代理
        location /api/ {
            proxy_connect_timeout   18000;
            proxy_send_timeout      18000;
            proxy_read_timeout      18000;
            root    html;
            index   index.html index.htm;
            proxy_pass http://backServer;
            add_header Cache-Control no-cache;
            add_header Pragma no-cache;
        }
        
    }
}

移动端配置要

**location:**配置url路径匹配关系,这里配置 /mobile 就是定义了一个标识,在有多个vue服务时,可以做区分
**alias:**指定静态文件目录的根路径
**index:**指令用于指定在请求的URL中未指定文件名时要使用的默认文件名
**try_files:**意思是优先根据浏览器输入的文件路径进行查找,如果找不到重定向到index.html文件

针对副项目 vue打包时要加一个 base: env.VITE_MODE === 'production' ? '/mobile' : '/',

javascript 复制代码
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, __dirname)
  return {
    plugins: [vue()],
    base: env.VITE_MODE === 'production' ? '/mobile' : '/',
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
      }
    },
    css: {
      // 全局样式配置
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/assets/base.scss";`,
        },
        less: {
          additionalData: `@import "@/assets/base.less";`,
        }
      }
    },
    build: {
      sourcemap: false, // 不生成 source map 
      terserOptions: { 
        compress: { // 打包时清除 console 和 debug 相关代码
          drop_console: true,
          drop_debugger: true,
        },
      },
    },
    server: {
      host: 'localhost',
      port: '8080',
      open: true, 
      proxy: {
        '/api': {
          target: env.VITE_URL, 
          changeOrigin: true, 
          ws: true, // 支持 websocket
          rewrite: (path) => path.replace(/^\/api/, '') // 路径重写
        }
      }
    }
  }
})
相关推荐
分布式存储与RustFS13 小时前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天13 小时前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star13 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-13 小时前
Linux Day33——定时任务+lvm
linux·运维
润滑卫士14 小时前
液压系统工作粘度窗口等级选型:泵允许粘度范围与油温-粘度匹配计算
运维
Csvn14 小时前
Nginx 配置语法与上下文:一次搞懂继承、变量与用 map 替掉 if
后端·nginx
每月一号准时摆烂17 小时前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记
时间售卖铺18 小时前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
微订校园外卖系统18 小时前
校园代取快递系统选型:现成系统与定制开发的技术核对项
大数据·运维·人工智能·外卖系统·本地生活·微订
QXWZ_IA18 小时前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化