如何修改Elastic Beanstalk部署服务的响应Server头信息
解决Elastic Beanstalk上Nginx覆盖Flask Server头的问题
哈哈,这个问题我太熟了!我之前在EB上部署Flask服务的时候也踩过同样的坑——你在Flask里设置的Server头为啥没生效?其实是因为Elastic Beanstalk的Amazon Linux 2017.03环境中,你的Flask服务前面还套着一层Nginx反向代理呢!客户端的请求先到Nginx,再转发给你的Docker容器,所以最终返回给用户的响应头是Nginx生成的,直接把Flask那边设置的头给覆盖了。
下面给你两种靠谱的解决方案,选一个适合你的就行:
方案一:直接自定义Nginx的Server头
这种方式不需要依赖Flask的设置,直接让Nginx返回你想要的Server值,还能隐藏Nginx的版本信息:
- 在你的项目根目录下新建一个
.ebextensions文件夹(如果还没有的话) - 在这个文件夹里创建一个名为
nginx_custom_header.config的文件,内容如下:
files: "/etc/nginx/conf.d/custom_server_header.conf": mode: "000644" owner: root group: root content: | more_set_headers "Server: SomeNonFingerprintValue"; server_tokens off;
- 把这个文件夹和你的项目代码一起打包,重新部署到EB就行。EB会自动识别这个扩展配置,修改Nginx的设置。
方案二:让Nginx转发Flask的Server头
如果你更希望用Flask里设置的Server值,那可以配置Nginx不要覆盖这个头:
- 同样在
.ebextensions文件夹里创建nginx_proxy_config.config文件,内容如下:
files: "/etc/nginx/conf.d/proxy_custom.conf": mode: "000644" owner: root group: root content: | proxy_pass_header Server; server_tokens off;
- 打包部署后,Nginx就会把Flask返回的Server头直接传递给客户端,同时也会隐藏自身的版本信息。
验证效果
部署完成后,你可以用curl -I https://your-eb-domain.com命令查看响应头,或者在浏览器开发者工具的网络面板里检查,这时候就能看到你设置的Server值,而不是nginx/1.10.3啦!
内容的提问来源于stack exchange,提问作者MTZ4
相关产品推荐
相关产品推荐

