此方式的 vue router 模式是 mode: ‘history’

    1. server {
    2. listen 80;
    3. listen [::]:80;
    4. server_name localhost;
    5. # 启动预压缩功能,对所有类型的文件都有效,优先找到 xx.gz 的文件
    6. gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    7. # 启动预压缩功能,对所有类型的文件都有效,优先找到xx.gz 的文件
    8. gzip_static on;
    9. # 找不到预压缩文件,进行动态压缩
    10. gzip on;
    11. location / {
    12. # 一些跨域的配置,按自己情况删减与保留
    13. add_header Access-Control-Allow-Methods *;
    14. add_header Access-Control-Max-Age 3600;
    15. add_header Access-Control-Allow-Credentials true;
    16. add_header Access-Control-Allow-Origin $http_origin;
    17. add_header Access-Control-Allow-Headers $http_access_control_request_headers;
    18. try_files $uri $uri/ /index.html;
    19. root /usr/share/nginx/html;
    20. index index.html index.htm;
    21. # html 页面不缓存,达到的效果是:直接按 F5 刷新页面,就可以拉取到最新的 js(否则只有强刷才能拉取到更新后的项目)
    22. if ($request_filename ~* .*\.(?:htm|html)$) {
    23. add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
    24. }
    25. }
    26. # 拦截 /api 开头的地址,并且将 /api 去掉再转发
    27. location ^~ /api/ {
    28. rewrite /api/(.*) /$1 break;
    29. proxy_pass http://host-api;
    30. client_max_body_size 500M;
    31. # 如果需要在后端项目中获取到客户端的真实 IP,可以如下配置
    32. # 详细看这个地址:https://www.yuque.com/mrcode.cn/note-combat/bqlmxw
    33. proxy_set_header Host $host;
    34. proxy_set_header REMOTE-HOST $http_x_forwarded_for;
    35. proxy_set_header X-Real-IP $remote_addr:$remote_port;
    36. proxy_set_header X-Forwarded-Host $http_host;
    37. proxy_set_header X-Forwarded-Proto $scheme;
    38. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    39. }
    40. }

    关于 nginx location 的规则解析请看 这篇文章

    而关于 vue-cli 中启用 gzip 预压缩的配置如下,在 vue.config.js 配置如下

    1. const CompressionPlugin = require('compression-webpack-plugin')
    2. // 在根目录下创建 .env.local 文件,增加一行 VUE_APP_DEV_SERVER_PROXY_TARGET = http://localhost:9504
    3. // 目标地址填写你要连接的后端服务地址即可
    4. const VUE_APP_DEV_SERVER_PROXY_TARGET = process.env.VUE_APP_DEV_SERVER_PROXY_TARGET
    5. module.exports = {
    6. productionSourceMap: process.env.NODE_ENV === 'development',
    7. devServer: {
    8. port: 9531,
    9. proxy: {
    10. '/api': {
    11. target: VUE_APP_DEV_SERVER_PROXY_TARGET,
    12. changeOrigin: true,
    13. pathRewrite: {
    14. '^/api': '/'
    15. }
    16. }
    17. }
    18. },
    19. /**
    20. * <pre>
    21. * 参考:https://www.jianshu.com/p/1738f9f092ee
    22. * yarn add -D compression-webpack-plugin
    23. * 核心配置:
    24. * gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    25. * # 启动预压缩功能,对所有类型的文件都有效,优先找到xx.gz 的文件
    26. * gzip_static on;
    27. * # 找不到预压缩文件,进行动态压缩
    28. * gzip on;
    29. * </pre>
    30. * @param config
    31. * @return {{plugins: *[]}}
    32. */
    33. configureWebpack: config => {
    34. if (process.env.NODE_ENV === 'production') {
    35. return {
    36. plugins: [
    37. // 开启 gzip 压缩
    38. new CompressionPlugin({
    39. test: /\.jpg$|\.png$|\.js$|\.html$|.\css$/, // 匹配文件名
    40. threshold: 2120, // 对超过 2k 的数据压缩
    41. deleteOriginalAssets: false // 不删除源文件
    42. })
    43. ]
    44. }
    45. }
    46. }
    47. }