WAMP转移至LNMP平台遇到的几个问题及解决方法

公司一台WEB服务器,是windows2008操作系统,安装apache+php+mysql,因性能问题,尝试转移到Linux平台,使用nginx+php-fpm+mysql运行。在转移后,果然性能大幅提升,用AB测试PV,由原来的平均15PV/S,提升至400PV/S,让我自己都大吃一惊。不过在转移过程中遇到三个问题,现分享出来。

一、php文件如果有加密代码,在FTP传输时需要用binary模式上传,否则会运行出错,ascii模式上传时会替换其中的部分字符为linux对应的字符,例如回车+换行替换成换行。

二、mysql数据库服务器如果不能访问dns服务器的情况下,my.cnf配置文件中要加上skip-name-resolve选项,跳过主机名解析。否则会出现php连接mysql超时和报错,我遇到的情况是连接超时,导致web server和mysql server的网络连接出现N多tcp半连接,最开始是报mysql连接过多的错,加大mysql的最大连接限制数量后,还是报错,后来搜索到别人说的设置跳过名称解析选项后,报着试试的想法,增加后果然有效。折腾了几天,原来是域名解析的问题,因为我们的环境是托管在电信机房,但mysql server和web server之间却是单独一个局域网交换机,出于安全考虑没有把mysql server放在公网上,导致它不能访问dns服务器,而mysql默认配置是要缓存client机器的主机名的,结果导致它一直在连接dns服务器,最后因超时造成tcp半连接。

三、文件名大小写带来的问题:原来在windows下运行,不区分大小写,美工上传图片时,文件名大小写混用,也能正确访问。但在linux下,文件名是区分大小写的,导致一些图片不能正确显示。解决办法是写段shell脚本cdir.sh,自动修改所有图片文件名为小写,然后在nginx配置增加url重写,当要访问的文件不存在时重定向至image.php,由php去重定向至小写文件名的url,再失败才返回http 404错误。

nginx.conf

        location / {
            root   /var/www/img;
            index  index.html index.htm;
            if (!-e $request_filename) {
                rewrite ^(.*)/(.+\.(?:jpg|jpeg|png|gif|bmp|JPG|JPEG|PNG|GIF|BMP))$ /image.php?path=$1&file=$2 last;
            }
        }


image.php

<?
header('Pragma: no-cache');
$url = "";
if (!empty($_GET["path"])) {
	$url = $url . strtolower($_GET["path"]);
}
if (!empty($_GET["file"])) {
	$url = $url . "/" . strtolower($_GET["file"]);
}
if (strlen($url) > 0) {
	if (file_exists($_SERVER{'DOCUMENT_ROOT'} . $url)){
		header('Location: ' . $url);
		#echo $url;
	}
	else {
		header("HTTP/1.1 404 Not Found");
	}
}
?>

 

cdir.sh

#!/bin/sh 
 
############################################################ 
# this script will change file name recursively with option 
# -u: locase to upcase 
# -l: upcase to locase 
############################################################ 
 
hint () { 
echo " Usage: $0 [-l|-u] DIR1 [DIR2 DIR3...] 
-l to lowcase 
-u to upcase" 
exit 1 
} 
 
if test $# -lt 2; then 
echo "Too few arguments." 
hint 
fi 
 
while [ "$1" ]; do 
case $1 in 
-l) ACTION="lo" 
shift 1 
;; 
-u) ACTION="up" 
shift 1 
;; 
*) if test -d $1; then 
DIR="$DIR $1" 
else 
echo "no such directory --- $1" 
hint 
fi 
shift 
;; 
esac 
done 
 
# echo $ACTION 
# echo $DIR 
 

FOUND=`find $DIR | sort -r` 
 
for i in $FOUND; do 
DN=`dirname $i` 
BS=`basename $i` 
loBS=`echo $BS | tr '[A-Z]' '[a-z]'` 
upBS=`echo $BS | tr '[a-z]' '[A-Z]'` 
 
NAME1=$DN/$BS 
 
if [ "$ACTION" = "lo" ]; then 
NAME2=$DN/$loBS 
elif [ "$ACTION" = "up" ]; then 
NAME2=$DN/$upBS 
fi 
 
if [ "$NAME1" = "$NAME2" ]; then 
echo "****: $NAME1 ---x--- $NAME2 identical!" 
else 
echo "- renaming $NAME1 --> $NAME2" 
mv $NAME1 $NAME2 
fi 
done


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值