nginx线上环境获取不到header头token登录信息

线上项目上线后,用户登录时遇到登录失效的问题,经排查发现是nginx在代理转发时丢失了header中的access_token。原因是header变量名含有下划线,而nginx默认会忽略这类变量。解决方法是在nginx配置中启用underscores_in_headers选项,或者避免在header变量名中使用下划线。此问题的根源在于HTTP标准和CGI历史遗留问题,下划线可能导致变量映射的歧义。

nginx线上环境获取不到header头token登录信息

背景

一次项目上线后,输入正确信息登录后,却提示"登录失效,请重新登录",测试环境和预生产环境都没问题,排除应该不是代码问题。查看日志定位到代码,应该是线上没有获取到header头中的access_token(之前的名字是login-token,本次改成了access_token)导致的。然后为了验证,在服务器上通过curl 直接访问 后端的服务ip:port 的方式返回了正确的信息,大概定位到是 nginx代理转发到应用服务器时,header头信息丢失问题。

解决

初步定位问题后,就百度搜索了下 “nginx header 丢失”
在这里插入图片描述
发现 header的头的 变量 name 中包含 “_” 下划线导致的。

为什么测试环境、预生产环境可以呢? 经过对比nginx配置文件发现,测试和预生产环境配了underscores_in_headers on;

header中自定义变量名时不要用下划线

个人比较推荐这种方式。常见的header变量都是遵循这种方式,例如:Content-Type,Content-Length,Accept-Ranges等。

但是本次是上线过程中发现的问题,就采用了方案二

在nginx里的nginx.conf配置文件中的http部分中添加如下配置:
nginx默认request的header的那么中包含_时,会自动忽略掉。

解决方法是:在nginx里的nginx.conf配置文件中的ht

<think>好的,用户的问题是关于在将Vue项目部署到FTP服务器时如何强制清除浏览器缓存。我需要根据之前提供的引用信息来寻找解决方法。首先,用户提到Vue打包后的文件带有哈希值,但可能index.html被缓存导致找不到新文件,出现白屏。引用[2]也提到过这个问题,所以需要处理index.html的缓存。 接下来,用户想强制清除缓存。通常的方法包括文件哈希、修改文件名、HTTP设置,或者Service Worker。但用户使用的是FTP服务器,可能无法设置服务端配置,比如HTTP。这时候可能需要依赖前端自身的缓存策略。 首先,Vue默认生成的js和css文件已经有哈希,所以这些文件不会被缓存,但index.html可能被缓存。所以解决方法应该集中在如何防止index.html被缓存。如果FTP服务器支持的话,可以设置index.html的缓存控制为no-cache或max-age=0,但用户可能没有权限修改服务器配置,所以可能需要其他方法。 另一种方法是在index.html中引用资源时添加版本号或时间戳参数,比如<script src="app.js?v=1.0.1">。这样每次部署时改变版本号,浏览器会重新请求。但Vue的打包已经处理了文件名哈希,所以可能不需要这个,但index.html本身需要避免被缓存。这时候可能需要配置服务器让index.html不被缓存,或者让用户手动清除缓存,但这不够可靠。 另外,Service Worker可以控制缓存,如引用[1]提到的,但需要HTTPS,而FTP可能不支持。所以可能不太适用。 所以总结可能的解决方案:确保index.html不被缓存,可以通过服务器设置响应,或者在文件名中添加版本号。如果无法修改服务器配置,可能需要使用meta标签,但meta标签可能不被浏览器完全遵守。或者,在FTP部署时,将index.html的文件名也加上哈希,但这样访问URL需要改变,不太现实。 或许更好的办法是,在构建过程中,给index.html引用的资源添加查询参数,但Vue CLI默认已经处理了这一点。可能用户需要检查Vue配置是否正确生成哈希文件名,并确保index.html不被缓存。如果FTP服务器无法设置,可能需要联系服务器管理员,或者使用其他方法如HTML的meta标签,但效果有限。 因此,最终的步骤可能包括:配置Vue项目生成哈希文件名,确保index.html不被缓存,或者通过版本化index.html的URL,例如添加查询参数。如果服务器无法配置,可能需要用户教育,比如在部署后通知用户强制刷新(Ctrl+F5)。</think>在Vue项目部署到FTP服务器时,强制清除浏览器缓存可通过以下方法实现: ### 一、基础缓存控制方案 1. **文件名哈希策略** - 配置Vue CLI生成带哈希值的文件名 - 修改`vue.config.js`配置: ```javascript module.exports = { filenameHashing: true, // 默认开启 configureWebpack: { output: { filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].js' } } } ``` - 每次构建会生成如`app.3a8b9c7d.js`的新文件名,自动规避旧缓存 2. **HTML文件缓存控制** - 通过`.htaccess`文件设置缓存策略(需服务器支持): ```apache <FilesMatch "\.(html)$"> FileETag None Header unset ETag Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0 </FilesMatch> ``` ### 二、进阶部署方案 1. **部署后路径更新** - 使用时间戳参数强制刷新资源路径: ```html <script src="/js/app.js?v=20230818"></script> ``` - 通过环境变量动态生成版本号 2. **FTP部署自动化** - 在部署脚本中添加缓存清除指令: ```bash # 上传前删除旧版本 lftp -c "open -u user,pass ftp.example.com; rm -rf /public_html/css/*; rm -rf /public_html/js/*" ``` ### 三、客户端缓存清除 1. **Service Worker方案** - 注册更新监听(需HTTPS支持): ```javascript if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(reg => { reg.addEventListener('updatefound', () => { const newWorker = reg.installing; newWorker.addEventListener('statechange', () => { if (newWorker.state === 'activated') { window.location.reload() } }) }) }) } ``` 2. **强制刷新指令** - 在部署后通过页面提示引导用户执行: ```javascript localStorage.setItem('lastUpdate', Date.now()) window.addEventListener('load', () => { if (parseInt(localStorage.getItem('lastUpdate')) > 180000) { window.location.reload(true) } }) ``` ### 四、服务端缓存控制 虽然FTP协议本身不支持HTTP设置,但可通过以下方式间接实现: 1. **CDN联动** - 部署到FTP后触发CDN缓存刷新API ```bash curl -X POST "https://api.cdnprovider.com/purge" -H "Authorization: Bearer token" ``` 2. **动态代理层** ```nginx location / { proxy_pass ftp://your-ftp-server; add_header Cache-Control "no-cache, no-store"; expires 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IccBoY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值