发现fastcgi配置

自从去年6月份毕业以后,从前端转到了后端,也就很久没有写文章记录了。

原文地址:掘金

前情提要:

测试服务器被新人误操作直接删除了根目录,奈何只能重装服务。结果导致微信扫码支付时二维码显示不出来。

已知情况:

测试环境访问地址为:http://www.excample.com:8067

部署环境:Nginx + PHP

服务器做过路由端口映射处理,询问运维人员,得知是将外网的8067映射到内网的80端口

跟踪调试步骤:

1、通过谷歌开发工具查看,获取的 SERVER_PORT 不正确,正确为8067

谷歌开发工具

2、既然得知是端口获取的问题,而且代码没有改动,是服务器重新部署的缘故导致的,所以想来也是配置的问题。

一开始怀疑是nginx的配置

'nginx配置'

把监听的80端口改成8067,结果不能访问。

那是当然,毕竟路由端口是映射到了内网的80而不是8067。

3、排除了上一步,接下去这最关键的想法折腾了我好久。我想怎么让 server_post 拿到的是外网端口8067而不是内网端口80。

接下去就是各种百度,这过程中让我学习到了一个知识点:php中的 server 全局变量是怎么获取的?

nginx的核心模块中有些内置变量,如下图这些:

nginx内置变量

而且是以fastcgi模式运行PHP,所以nginx会将这些变量传递给fastcgi,而fastcgi又会将这些作为PHP的全局变量

image

到这里,我才发现还有fastcgi的配置之说。那就仔细去看看fastcgi的配置。

image

这下可好,那我把 $SERVER_PORT 直接改成8067,获取到的确实为8067了,二维码图片也出来了。可是再想想,这样改动不合理,假如端口映射规则修改了,岂不是还要改配置。所以这个方法不可行,另寻他法。

4、开始怀疑服务器重新部署后路由映射规则也被改动了

既然nginx内置变量$server_port只能拿到nginx配置中的的监听端口。那么server段中的监听怎么着也得改成8067,要做的就是将路由映射修改为:外网的8067映射到内网的8067。

至此,问题解决了。一直以为路由映射规则没有改动,就一直死磕在了nginx和fstcgi的配置上了,耗费了太多时间。不过也好,深入了解了 php 中 server 等一些全局变量的来源。

不积跬步无以至千里

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,058评论 19 139
  • CGI 通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接...
    没我找不到电子书阅读 6,073评论 1 4
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 6,328评论 0 9
  • 这篇是Nginx安装配置PHP(FastCGI)环境的教程。Nginx不支持对外部程序的直接调用或者解析,所有的外...
    SkTj阅读 8,310评论 2 20
  • 下雪啦!下雪啦,来和我们一起看看吧...... 昨天早上,突然下起了小雪,我的心里很高兴,因为下...
    五星红旗飘扬阅读 4,278评论 0 1

友情链接更多精彩内容