发现fastcgi配置

前情提要:

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

已知状况:

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

部署环境:Nginx + PHP服务器

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

跟踪调试步骤:

一、经过谷歌开发工具查看,获取的 SERVER_PORT 不正确,正确为8067运维

谷歌开发工具

二、既然得知是端口获取的问题,并且代码没有改动,是服务器从新部署的缘故致使的,因此想来也是配置的问题。工具

一开始怀疑是nginx的配置post

'nginx配置'

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

那是固然,毕竟路由端口是映射到了内网的80而不是8067。开发工具

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

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

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

nginx内置变量

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

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

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

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

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

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

相关文章
相关标签/搜索