Warning: count(): Parameter must be an array or an object that implements Countable in /www/wwwroot/mdaeo.org/usr/plugins/AMP/Action.php on line 388
关于lnmp一键安装包的一些问题

关于lnmp一键安装包的一些问题

2011-05-19T16:01:18

好像目前nginx特别流行,我的几位友情链接都在使用nginx,所以,小荷塘最近也开始体验nginx了。而且对于nginx的内存占用效果,小荷塘感到特别震精(装好以后内存占用不到80M!!!)。

对于大部分新手来说,都是使用centOS+Licess的lnmp一键安装包的吧(其实lnmp意思就是Linux+nginx+mysql+php)。本文中的方法也是基于该环境来实现的。在折腾lnmp的过程中,我也遇到了一系列的问题,下面对这些问题作一个归总。

1,nginx下WordPress的伪静态设置
因为nginx还不完全兼容Apache,所以造成一些不便,比如不支持.htaccess(即不能伪静态),那么如何解决这个问题呢?
编辑/usr/local/nginx/conf/nginx.conf文件,在server容器中添加下面这几行:

   location / {
        index index.html index.php;
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
    }

修改完成以后,执行如下命令重启lnmp即可:

/root/lnmp restart

2,关于将多个域名绑定到同一目录
比如我想将www.zhukun.net和zhukun.net绑定到同一目录,要怎么实现呢?虽然在大部分美国虚拟主机上这两个域名是默认绑在同一目录的,但是在nginx下,它们是各自分离的。

最简单的方法就是在执行./vhost.sh命令添加虚拟主机的时候,同时把这两个域名加进去。当你执行./vhost.sh的时候,会提示你输入要绑定的域名,输入zhukun.net并回车,此时它会问你要不要添加更多的域名,输入Y并回车,再输入www.zhukun.net即可。

万一在添加虚拟主机的时候忘了怎么办?那就只能修改该虚拟主机的配置文件了。

在安装Licess的lnmp一键安装包时,会要求你先输入一个域名,此域名将直接绑定根目录,我们暂且称这个域名为主域名,主域名的配置文件在/usr/local/nginx/conf/nginx.conf下;而通过执行./vhost.sh命令添加的虚拟主机,其配置文件在/usr/local/nginx/conf/vhost/域名.conf之下。

打开相应的配置文件,在server容器中找到下面这一行:

server_name zhukun.net;
将其修改为如下内容即可:

server_name zhukun.net www.zhukun.net;

修改完之后,还要执行如下命令重启一下lnmp:

/root/lnmp restart
 
3,关于pureFTPd添加的FTP用户登陆时出现530错误
首先一点是,FTP登陆时客户端会出现乱码,这个很好解决,把FTP客户端的编码设置成gb2312就可以了。重点是登陆时出现530错误怎么办。

个人建议在通过http://domain/ftp/install.php安装完pureFTPd以后,立即登陆SSH执行/root/pureftpd restart重启一下pureFTPd,一般就会OK,但有时还会出现此问题。

编辑:/usr/local/pureftpd/pure-ftpd.conf
找到 MinUID 100
将MinUID的数值改为一个更小的数值(比如2),然后执行/root/pureftpd restart重启pureftpd,就可以解决530问题。
FTP登陆成功后可以将MinUID重新改回100,再次重启pureftpd,仍然可以正常登陆。

4,WordPress后台更新主题或插件时,提示需要填写FTP信息
其实出现这个的问题就是Nginx的执行身份非文件属主身份。解决方法:

假设你的wordpress安装目录为/home/wwwroot/zhukun.net
执行:chown -R www /home/wwwroot/zhukun.net
执行上面的命令就可以将/home/wwwroot/zhukun下所有文件的属主改为www,这样就可以解决自动更新必须填FTP的问题。
注意:1,必须是把wordpress程序文件上传到空间以后再执行该命令,顺序不能颠倒;2,添加完虚拟主机以后,也必须把wordpress程序文件上传到空间以后,再执行该命令才有效!

访问时出现 502 Bad Gateway 的解决办法
Nginx 502 Bad Gateway的含义是请求的php-cgi已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致php-cgi进程终止。一般并发数太高的网站都容易出现此错误。出现502 Bad Gateway的原因有很多(更多原因见这里),但是大部分人修改下面的参数即可解决。
打开 /usr/local/php/etc/php-fpm.conf 文件,修改如下几个参数:

1
2
3
 <value name="max_children">5</value>
<value name="request_terminate_timeout">0s</value>
<value name="process_control_timeout">5s</value>

max_children表示php-cgi的处理进程。如果max_children设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out错误。设置max_children也需要根据服务器的性能进行设定,增大进程数,内存占用也会相应增大,正常情况下每个php-cgi所耗费的内存在20M左右,这里我设置的是80。

request_terminate_timeout指的是fast-cgi的执行脚本时间,它默认是0s。0s的含义是让php-cgi一直执行下去而没有时间限制。如果你在此设成0s,那么当出现502 Bad Gateway的时候,这个502的状态将一直持续下去不会改变。但是如果你设置成5s,那么当php-cgi假死5s以后会自动恢复。这个值可以根据你服务器的性能进行设定,这里我设置的是20s。

2,强制开启SSL(强制http转向https)
编辑 /usr/local/nginx/conf/nginx.conf 文件,修改如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 server
{
listen       80;
server_name  域名;
rewrite ^/(.*) https://域名/$1 permanent;
}
 
server
{
listen       443;
server_name  域名;
index index.html index.htm index.php;
root  /home/wwwroot;
 
ssl    on;
                ssl_certificate    /home/wwwroot/xxx.crt;
                ssl_certificate_key     /home/wwwroot/xxx.key;
                ssl_session_timeout 5m;
 
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;
 
location ~ .*\.(php|php5)?$
{
fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
fastcgi_param  HTTPS on;
}

3,同时使http和https都能正常访问
这个问题浪费了我巨大的
精力,其实新建两个server就能解决,但是我在试验的过程中,发现有两个问题需要注意:

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »
因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合MIP标准。