set $_request_uri $request_uri; if ($request_uri ~ ^(.*)#(.*)$) { set $_request_uri $1; } fastcgi_param REQUEST_URI $_request_uri;
set $_request_uri $request_uri; if ($request_uri ~ ^(.*)#(.*)$) { set $_request_uri $1; } fastcgi_param REQUEST_URI $_request_uri;
fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=0 // php-fpm.conf
sleep(10);
浏览器 8 秒后返回 504 Gateway Time-out
nginx-error.log
upstream timed out (110: Connection timed out) while reading response header from upstream
fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=5 // php-fpm.conf
sleep(10);
浏览器 5 秒后返回 502 Bad Gateway
nginx-error.log
recv() failed (104: Connection reset by peer) while reading response header from upstream
fpm-error.log
[pool www] child 5378, script ‘/usr/share/nginx/html/sleep.php’ (request: “GET /sleep.php”) execution timed out (5.793874 sec), terminating
fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=5 // php-fpm.conf
set_time_limit(1); while(true){}
浏览器返回 500 Internal Server Error
php-error.log
[08-Apr-2017 23:39:44 Asia/Shanghai] PHP Fatal error: Maximum execution time of 1 second exceeded in /usr/share/nginx/html/while_true.php on line 3
昨晚在 wosign 申请了个2年的 ssl 证书,很快就部署好了。
今天配置了下,让访问 http 的 url 自动跳转到 https。
相关配置如下即可:
listen 80; listen 443 ssl; ssl_certificate /PATH_TO_CRT; ssl_certificate_key /PATH_TO_KEY; server_name upliu.net; if ($scheme != https) { rewrite ^/(.*) https://$server_name/$1 permanent; }
同时监听 80 和 443 端口,并且给 443 端口加上 ssl 支持。当访问不是通过 https 过来的,则重定向到 https 的路径。
很多框架默认路由都是 PATH_INFO 模式,比如默认在 Apache 并且没有 rewrite 时,CodeIgniter 一般可以这样访问 /index.php/controller/action ,那么 nginx 和 php-fpm 如何设置支持 PATH_INFO 模式呢?
php.ini 中一个与 PATH_INFO 有关的设置是 cgi.fix_path 默认为 1,我们将其设置为 0。
php.ini 设置:
cgi.fix_path = 0
接下来是 nginx 配置:
location ~ \.php($|/) { # 下面这一行设置 $fastcgi_script_name 和 $fastcgi_path_info 的值,具体请看 nginx 文档 fastcgi_split_path_info ^(.+\.php)(/.+)$; # 下面这行也可以为 fastcgi_pass unix:/var/run/php-fpm.sock 看你的 fpm 设置了 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; # 下面这行不能少默认 fastcgi_params 里面并没有 SCRIPT_FILENAME fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
看官如有疑问,请在下面留言,希望对您有帮助。
相关链接:
前两天将博客放在 SAE 上,速度实在是感觉太慢了。昨晚准备写文一篇时,后台编辑文章竟然都加载不出来,于是购买了一年的 vps,199 元每年,256M 内存,感觉速度还不错。
选择系统的时候安装的是 centos5.5,源里自带的 php mysql,我觉得版本太低,于是,下载源码编译安装,折腾了 2 个小时,最终还是没搞定。编译安装 nginx 倒是很简单。第一次编译 php 时,默认 ./configure 没带任何参数,成功编译安装完成,后想到,需要 enable-fpm 选项啊,于是重新编译。再一次编译的时候 enable 其它一些东西,就出现一些库和依赖,搞烦我了。而下载 mysql 也启动不起来。最终换了 ubuntu 12.04 系统。ubuntu 多爽,一条命令装好所有需要的东西:
sudo apt-get install mysql-server nginx php5 php5-fpm php5-cli php5-gd php5-mcrypt php5-curl
接下来就是配置 nginx 了。先将博客所有文件复制过来,数据库导入,为了方便,网站根目录我放在了 /root/vhosts/upiu.net 下,访问,提示没权限。将 upliu.net 文件夹所有者改为 www-data 问题依旧。再将 upliu.net 权限改为 777 ,还是提示没权限。G 上搜索了一会,后来终于找到问题所在,upliu.net 文件夹权限设置没有问题,但是 www-data 用户没有访问上一层文件夹的权限,/root 和 /root/vhosts 这两个文件夹所有者为 root,www-data 当然无法读取了。
您觉得新主机速度怎么样?
update:2013-11-08 15:27:24 >>>>>>>>>>>
发现如果多刷新几下博客,就会响应很慢很慢,甚至出现 504 gateway time out 错误,php5-fpm 占用内存过大,导致系统反应慢,就连 ssh 都几乎没有响应。将 php5-fpm service 重启一下就好了。暂时解决办法:加了个定时任务,每隔一小时重启一下 php5-fpm 服务。
今天我想让 phps 后缀的文件显示其源代码。网上搜索之,按照这里的修改:
location ~ \.phps$ { fastcgi_pass backend; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SCRIPT_NAME $uri; fastcgi_param SCRIPT_FILENAME /path/to/hightlight_source.php; }
结果访问 phps 文件出现 Access denied.
查看错误日志,发现是 security.limit_extensions 配置的问题。
修改 /etc/php5/fpm/pool.d/www.conf ,修改配置为以下即可:
security.limit_extensions = .php .phps
同理,如果你想让 php5-fpm 处理后缀文件,在该行配置下添加相应后缀名即可。
感悟:看错误日志对于排错帮助很大,找到错误之处后再在网上找相应内容一般都能解决问题。