首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

发现fastcgi配置

前情提要:

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

已知情况:

部署环境:Nginx + PHP

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

跟踪调试步骤:

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

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

一开始怀疑是nginx的配置

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

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

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

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

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

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

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

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

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

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

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

----------不积跬步无以至千里

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180524G194JQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券