3月
21
缘由:
接手的新项目, 使用 Laravel 框架 ,有一个接口请求控制器使用的是 Guzzle HTTP客户端请求组件,开始用的时候,发现一直处于卡死, 直到 nginx 返回 504 Time Out ,并且请求的本地 api 服务器, 也没有请求日志,api 是可以确保在正常运行的。同时,线上的 api 地址就可以正常请求。所以,可以判断出代码是正常的,同时请求没有发出。
一开始以为是 这个组件的问题导致请求没有发出, 还去 gayhub 提 Issues , 结果被告知不是 Guzzle 的问题, 就被 close 掉了。 后来,隔了几天作者给我分析了一波,已下是原话。 第一次,没看明白这个功能也不是特别急,也就闲置了。
The returned response indicates that your server responded, this the request itself is successful。 The response code indicates that something went wrong on server side (most probably your nginx server couldn’t connect to php-fpm)。 The fact that it works locally is irrelevant in this case as the problem is on the server side。
现在,又要解决这个问题的时候, 想着把情况具体在说明一下,请教一下有么有办法解决,但是,这个时候我又看到他括号里的话 (most probably your nginx server couldn’t connect to php-fpm) 。所以,我就怀疑是不是 nginx的配置问题。
由于,本人对 nginx 也不是特别熟悉。随即, 去 Google 了一下 nginx 和 php 的组合配置, 发现 Windows 环境下 nginx + php ,不支持并发。也就是,当本地配置了多个域名,并且同时指向你本地服务请求的时候,就不支持了。
于是一个解决办法就是 修改 fastcgi_pass=127.0.0.1:9000 的配置, 这个配置 表示 nginx 会通过 fastcgi_pass 将请求的资源发给 127.0.0.1:9000 进行解析。
我这里有两个服务,所以分别配置成不同的端口号如,然后保存重启 nginx。
fastcgi_pass = 127.0.0.1:9000
fastcgi_pass = 127.0.0.1:9001
在同时,在 cmd 下开启多个 php-cgi 指向 php.ini 进行监听。
你的php目录/php-cgi.exe -b 127.0.0.1:9000 -c 你的php目录/php.ini
你的php目录/php-cgi.exe -b 127.0.0.1:9001 -c 你的php目录/php.ini
然后, 就能完美的解决问题了。
这种问题也是因为,自身对 nginx 和 php 的配置不够熟悉。。
在以后还是要多多学习!
2月
28
今天刚刚入手了一台腾讯云的服务器,想着。正好做两个视频/音乐站。于是就有了下面的内容。
1.环境,为了方便直接使用lnmp 一键安装包安装成 http://lnmp.org/install.html
安装完成后Nginx 配置在 /usr/local/nginx/conf/nginx.conf 在 /usr/local/nginx/conf 文件夹下 有一个 vhost 文件
之所以提到这个文件是因为配置中有一行 include vhost/*.conf; 表示他会引入所有 vhost 下 .conf 后缀的文件 nginx 路由可以通过这种引用进行设置.
2.在/usr/local/nginx/conf/vhost 下可以新建两个或者一个 domain.conf 我喜欢一个域名一个文件,看着舒服所以我就新建了两个。
music.conf 和 video.conf 里面分别写
server
{
listen 80; //端口号
server_name music.ishwy.me; //你的域名
index index.php index.htm index.html; //默认访问文件类型
root /home/wwwroot/default/music; //网站目录路径
include enable-php.conf; //解析php文件的作用
}
server
{
listen 80; //端口号
server_name video.ishwy.me; //你的域名
index index.php index.htm index.html; //默认访问文件类型
root /home/wwwroot/default/video; //网站目录路径
include enable-php.conf; //解析php文件的作用
}
如果想就放在一个文件里,就只要把上面两段话复制到一个文件就行啦。看个人习惯
然后访问
music.ishwy.me 的时候就会访问到 ../music的目录下
video.ishwy.me 的时候就会访问到 ../video的目录下
配置好后还要重启一下nginx,命令如下。重启如果没有什么报错,就说明重启成功了。然后就能愉快的访问了,跟Apache一样滴简单。【滑稽】
cd /usr/local/nginx/sbin
./nginx -s reload
2月
25
最近做项目中,因为要取到$_SERVER[‘SERVER_NAME’].$_SERVER[‘REQUEST_URI’]获取域名及请求的URL的问题。
结果在当两个域名都指向了同一个服务器的时候,就出现了问题,就是我通过B域名访问,打印$_SERVER[“SERVER_NAME”] 出来的确是A域名的地址。这点就让我很奇怪,导致了支付的回调也无法走下去。
后来我打印了$_SERVER查询了一下之后,发现还有一个$_SERVER[‘HTTP_HOST’]。发现那个正是我的想要的结果。
所以我推测 $_SERVER[‘SERVER_NAME’] 是取到的conf文件中的 配置。因为的 server_name 配置了两个,a.com b.com,就近原则,先读取了a.com
下面通过自己的操作和资料得出如下结论。
相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范
不同点:
1. 通常情况:
$_SERVER[“HTTP_HOST”] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
$_SERVER[“SERVER_NAME”] 默认情况下直接输出web服务器的的配置文件中的ServerName值。
2. 当服务器为非80端口时:
$_SERVER[“HTTP_HOST”] 会输出端口号,例如:mimiz.cn:8080
$_SERVER[“SERVER_NAME”] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT
3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:
ServerName mimiz.cn
ServerAlias www.mimiz.cn
客户端访问域名www.mimiz.cn
_SERVER[“HTTP_HOST”] 输出 www.mimiz.cn
_SERVER[“SERVER_NAME”] 输出 mimiz.cn
所以,在实际程序中,应尽量使用_SERVER[“HTTP_HOST”] ,比较保险和可靠。