Debian安装Nginx+php-fpm+mysql+phpmyadmin备忘

之前有一台服务器使用的是LAMP架构,网站多了,访问量大的时候会出现无法响应的情况,都说nginx的性能更好一些,所以第二台服务器打算使用nginx来配置网站,在这里做个备忘,同时也可以帮助一些跟我一样的菜鸟吧。

如果是debian的话,首先建议安装fish和vim这两个软件,fish是一款比较好用的shell,一般系统自带的shell都是bash,但是在自动补全,命令提示的智能化方面跟fish差太远了,同时fish在界面上也比较舒服,命令一般都是绿色,参数白色,错误的命令会显示红色,一目了然。安装方式很简单,直接

apt-get install fish

不需要多余配置就可以直接使用了,这个力荐。稍微截个图看下

2012-11-20 14-14-26

debian一般都自带安装了vim,但是安装的包不是很完整,所以还是推荐各位重新安装一下比较好

apt-get install vim

安装好之后,我个人一般稍稍改下配置就够用了。

vim /etc/vim/vimrc

找到下面两行,分别将前面的;去掉让配置生效。

syntax on     #这个主要是可以实现部分代码高亮 
set background=dark      #我们一般操作的时候都是通过ssh直接登录服务器,打开这个选项会让终端里的显示更加醒目。

同时在配置的最后添加一行

set nu   #显示行号

当然这些只是最基本的配置,对我来说已经够用了,更多高阶使用可以自己去研究下。

开始安装LNMP了

首先编辑源文件。因为debian默认的软件仓库里nginx版本很旧,所以我们先添加一个源。这里的nginx以及php库都是比较新的。

vim  /etc/apt/sources.list

添加以下两行:

deb http://packages.dotdeb.org stable all 
deb-src http://packages.dotdeb.org stable all

更新key

wget http://www.dotdeb.org/dotdeb.gpg 
cat dotdeb.gpg | sudo apt-key add -

更新源

apt-get update 
apt-get upgrade

然后分别安装nginx,php-fpm,mysql这个过程就不赘述了,很简单。默认配置,安装mysql的时候应该会提示你输入root的密码。

apt-get install nginx php5-fpm mysql-server-5.1

安装php,可以根据需要安装

apt-get install php5-cgi php5-cli php5-common php5-curl php5-dev php5-fpm php5-gd php5-idn php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-suhosin php5-tidy php5-xcache php5-xmlrpc php5-xsl php-pear php-soap

不出意外的话,这个时候已经是可以了,在nginx默认目录

/usr/share/nginx/html/添加一个info.php的文件,文件里添加

<?php phpinfo(); ?>

然后访问http://xx.xx.xx.xx/info.php 看看是否能显示就知道有没有问题了。

配置虚拟主机

nginx的主配置文件/etc/nginx/nginx.conf暂时默认就好了,不用过多设置,我也一般就是根据服务器的CPU核心数把worker_processes 的数目修改了下,我的服务器是8核,所以我的数字是8,默认好像是1吧。

user  nginx;
worker_processes  8;

添加网站配置文件,nginx配置文件的目录在/etc/nginx/conf.d/这里,我们为域名abc.com添加一个配置文件

 vim /etc/nginx/conf.d/abc.com.conf

需要注意的是,所有的网站配置文件都必须以conf结尾,否则配置文件不会生效或者出错。

在配置文件abc.com.conf里输入以下内容

server {
             listen   80;
             server_name  abc.com;
             rewrite ^/(.*) http://www.abc.com/$1 permanent;
#此处是将所有abc.com的访问都变成www.abc.com
            }

 server {
             listen   80 default;
             access_log  /srv/www/abc.com/logs/access.log;
             error_log      /srv/www/abc.com/logs/error.log info;
             server_name     www.abc.com;
             root /srv/www/abc.com/public_html;

 location / {
 index index.php;
 # if the requested file exists, return it immediately
 if (-f $request_filename) {
         break;
 }

         location /nginx-status {
             stub_status on;
             access_log  off;
         }

 # all other requests go to WordPress
 if (!-e $request_filename) {
         rewrite . /index.php last;
 }
 }

 ## Images and static content is treated different
     location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
       access_log        off;
       expires           30d;
       root /srv/www/abc.com/public_html;
     }

 ## Parse all .php file in the /srv/www directory
     location ~ ^.+\.php {
         fastcgi_split_path_info ^(.+\.php)(.*)$;
         fastcgi_pass   backend;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  /srv/www/abc.com/public_html$fastcgi_script_name;
         include fastcgi_params;
         fastcgi_param  QUERY_STRING     $query_string;
         fastcgi_param  REQUEST_METHOD   $request_method;
         fastcgi_param  CONTENT_TYPE     $content_type;
         fastcgi_param  CONTENT_LENGTH   $content_length;
         fastcgi_intercept_errors        on;
		 fastcgi_ignore_client_abort     on;
        fastcgi_read_timeout 180;

     }
     ## Disable viewing .htaccess & .htpassword
     location ~ /\.ht {
         deny  all;
     }
}
upstream backend {
        server 127.0.0.1:9000;
}

为abc.com配置根目录

mkdir -p /srv/www/abc.com/public_html
mkdir -p /srv/www/abc.com/logs

这个时候你可以在/srv/www/abc.com/public_html里再放入一个info.php文件,然后给把这个目录赋予nginx权限

chown www-data:www-data /srv/www/ -R

重启nginx和php-fpm

/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart

然后试着访问abc.com/info.php是否显示正常。

安装phpmyadmin

nginx不像apache,安装好以后可以直接通过abc.com/phpmyadmin访问,我们需要为phpmyadmin也做一个网站配置,比如可以使用mysql.abc.com访问。

安装phpmyadmin

apt-get install phpmyadmin

按提示输入mysql的账号密码就可以了,可能会提示你选择apache还是lighttpd(记不清楚了,现在没法截图)都不用选择,直接确认,还有一个貌似提示要不要创建示例数据库吧,yes or no也直接选no就可以了。

为phpmyadmin添加配置文件

vim /etc/nginx/con.f/mysql.abc.com.conf

输入以下内容

server {

        listen   80;
        server_name mysql.abc.com;

        access_log /var/log/nginx/phpmyadmin.log;

        root   /usr/share/phpmyadmin;
        index  index.php;

        location / {
        try_files $uri $uri/ @phpmyadmin;
        }

        location @phpmyadmin {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin/index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_NAME /index.php;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/phpmyadmin$fastcgi_script_name;
        include        fastcgi_params;
        }
}

重启nginx

service nginx restart

注意这里我使用是另外一个命令,跟前面的/etc/init.d/nginx restart命令效果一样。

现在应该可以通过mysql.abc.com访问phpmyadmin了。

接下来你可以自己试着安装一个wordpress了,关于wordpress的nginx配置文件,可以直接到http://wiki.nginx.org/Configuration 查看。

再上两台采用不同配置服务器的资源cpu和内存的占用情况,上图是apache,下图是nginx,基本都是默认配置,apache还优化过,nginx基本没做什么优化,两台服务器硬件完全一样,放的网站程序和数量也差不多。

apache和nginx CPU占用情况apache和nginx 内存占用情况

有问题可以留言哈,文章写的仓促,可能会有小错误。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code