发现fastcgi配置

原文链接:https://www.jianshu.com/p/a28b6ecd41a8

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

[原文地址:掘金](https://juejin.im/post/5af9276b5188254287734196)

### 前情提要:

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

### 已知情况:

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

部署环境:Nginx +  PHP

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

### 跟踪调试步骤:

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

![谷歌开发工具](http://upload-images.jianshu.io/upload_images/2376873-edb6856007c4a7ef?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

一开始怀疑是nginx的配置

!['nginx配置'](http://upload-images.jianshu.io/upload_images/2376873-7bd40d3a9e4db9d4?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

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

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

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

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


![nginx内置变量](http://upload-images.jianshu.io/upload_images/2376873-f2b46c0f5634c24e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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


![image](http://upload-images.jianshu.io/upload_images/2376873-509f92c00dacdda7?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

![image](http://upload-images.jianshu.io/upload_images/2376873-3ab1a4929e92739b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

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

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

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

>不积跬步无以至千里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值