在 OpenSuse Linux 中配置安装 Nginx + MySQL + PHP(PHP-FPM)
删除了运行了100多天之后滴 Ubuntu 服务器之后,Linode里面还有40美金的余额没用完(这个是9月份的时候那个Linode的活动送的,没法儿取出来,也不能转移到其它的Linode帐户里面去,只能消费完),这段时间就尝试着玩玩各种各样的Linux发行版吧,基本上都是Linode提供的,最开始就选择OpenSUSE是因为昨天看到腾讯的开放平台提供的服务器基本上都是OpenSUSE的。
OpenSUSE还只是在北京的时候看公司里面一同事玩过,后来也就只是在自己的虚拟机里面装过一两回,不过从来没有深入的去研究过,我玩Linux基本上的作用都是做网站的服务器之用,所以,最开始我就会去了解如何在某一个Linux发行版上面更好的配置安装LEMP环境。
在本文中,我使用 opensuse.antusoft.com 作为服务器的域名,IP地址还是旧服务器的 50.115.16.100,这可能与你的情况有些不一样,不过也不影响整个安装。
安装 MySQL 5
首先,我们像下面这样的安装 MySQL 5:
yast2 -i mysql mysql-client mysql-community-server接着我们为 MySQL 创建系统启动链接(这样一来,MySQL 就会随着系统启动而启动),再启动 MySQL 服务器:
chkconfig -f --add mysql
/etc/init.d/mysql start我们可以像下面这样的来确定是否已经运行成功:
netstat -tap | grep mysql这可能会输出像下面这样的内容:
cox: ~ # netstat - tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 8924/mysqld
cox: ~ #如果没有出现类似上面这样的信息,你可能需要打开 /etc/my.cnf 然后注释掉 skip-networking 选项:
[...]
#skip-networking
[...]修改配置之后,重起你的 MySQL 服务器
/etc/init.d/mysql restart(如果你遇到*You do not have a valid vim binary package installed. Please install either “vim”, “vim-enhanced” or “gvim.”*,请运行下面这行命令来安装 VIM 之后再尝试修改。
yast2 -i vim运行下面这行命令来设置 MySQL 服务器的 root 帐户密码:
mysql_secure_installation否则的话,任何人都可以访问你的 MySQL 数据库。进行安装设置时,脚本会询问你一些问题,你只需要回答是(Y)或者否(n),下面是我的选择:
- Enter current password for root ( enter for none): –> 直接回车
- Set root password? [Y/n] –> Y
- Remove anonymouse users? [Y/n] –> Y
- Disallow root login remotely? [Y/n] –> Y
- Remove test database and access to it? [Y/n] –> Y
- Reload privilege tables now? [Y/n] –> Y
安装 Nginx
我先使用 search 或者 se 搜索最新的 Nginx 软件包:
cox:~ # zypper se nginx现在得到的最新的Nginx版本是 Nginx-1.0,我也就安装这个版本的了,像下面这样安装它:
yast2 -i nginx-1.0与 MySQL 一样创建 Nginx 的启动链接,然后启动 Nginx
chkconfig -f --add nginx
/etc/init.d/nginx start启动之后,我们就可以访问 http://50.116.15.100 访问,Nginx 会返回一个 403 Forbidden 错误,这证明Nginx已经安装成功,这是因为在 OpenSUSE 12中,Nginx 的默认文档根目录是: /src/www/htdocs,而这个目录下面默认又是没有索引页的。

安装 PHP5
我们可以让 PHP5通过 PHP-FPM 在Nginx下工作(PHP-FPM:FastCGI Process Manager)是一个添加了一些特别功能的PHP的FastCGI实现,像下面这样安装:
yast2 -i php5-fpm在运行 PHP-FPM 之前,我们将 /etc/php5/fpm/php-fpm.conf.default 修改为 */etc/php5/fpm/php-fpm.conf*:
mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf然后打开 /etc/php5/fpm/php-fpm.conf :
vi /etc/php5/fpm/php-fpm.conf然后 error_log 为 /var/log/php-fpm.log 同时去掉 pm.min_spare_servers 与 pm.max_spare_servers 两个选项前的注释并修改为下面这样的值:
[...]
error_log = /var/log/php-fpm.log
[...]
pm.min_spare_servers = 5
[...]
pm.max_spare_servers = 35
[....]保存刚才所作的修改,然后创建系统启动链接,并系统 PHP-FPM:
chkconfig -f --add php-fpm
/etc/init.d/php-fpm startPHP-FPM 是一个由 /etc/init.d/php-fpm 创建的守护进程,它运行一个 FastCGI 服务器并监听 9000 端口,你可以看到下面这样的信息:
cox:~ # netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9473/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3407/sshd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9912/php-fpm.conf)
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8924/mysqld
tcp 0 0 50.116.15.100:22 113.240.81.181:16158 ESTABLISHED 8184/0
tcp 0 300 50.116.15.100:22 113.240.81.181:18023 ESTABLISHED 9937/1
tcp 0 0 :::22 :::* LISTEN 3407/sshd配置 Nginx
Nginx的配置都由 /etc/nginx/nginx.conf 文件定义,我们现在打开它:
vi /etc/nginx/nginx.confNginx的文档是十分简单的,你可以Google一下如何对Nginx进行配置,在我的这个网站里面,我的配置是下面这样的:
首先,我提高了 worker_processes 到5,同时让 keepalive_timeout 为 2
[...]
worker_processes 5;
[...]
keepalive_timeout 2;
[...]在Nginx中,虚拟主机是在 server {} 容器中定义的,我修改了默认的虚拟主机为下面这样的:
[...]
server {
listen 80;
server_name _;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /srv/www/htdocs/;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /srv/www/htdocs/;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /srv/www/htdocs;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/htdocs$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
deny all;
}
}
[...]- server_name _; 让服务器监听任何没有在其它虚拟主机中定义了的域名(当然你还可以指定为某一个特定的域名,比如: *opensuse.antusoft.com*)。
- 在 location / 部分,我给 index 添加了一个 index.php ,这让Nginx知道最先以 index.php 为索引页,同时 root /srv/www/htdocs 表示该虚拟主机的根目录是 */srv/www/htdocs*。
- 最重要的部分就是 location ~ .php$ {} 部分,修改 root 为虚拟主机的根目录,还需要确定fastcgi_param 那一行已经修改成为了 *fastcgi_param SCRIPT_FILENAME /srv/www/htdocs$fastcgi_script_name;*,否则有可能 Nginx 找不到脚本文件
保存所做的修改,然后重新启动 Nginx
/etc/init.d/nginx restart接着我们创建一个 info.php 文件,并保存到 /srv/www/htdocs 目录中:
vi /srv/www/htdocs/info.php它的内容是:
<?php
phpinfo();
?>现在我们打开 http://50.116.15.100/info.php 即可看到下面这样的画面了:

安装 PHP5 的MySQL 支持
要让PHP支持MySQL,我们只需要安装 php5-mysql 包即可,我在这里还安装了一些其它的模块,这些都是很有可能在我的应用里面会用到的,像下面这样:
yast2 -i php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm安装完成之后我们需要重新启动 PHP-FPM:
/etc/init.d/php-fpm restart重新启动之后再去查看 http://50.116.15.100/info.php,向下滚动网页直到 Modules 章节,你应该就可以看到现在PHP所支持的模块了,当然,包括了MySQL。
测试环境是否满足我的需要
我一般使用 phpMyAdmin 来管理数据库,同时使用 WordPress, Drupal, TextPattern 等 基于PHP 语言的CMS程序,我这里就安装了 phpMyAdmin:

一些链接
- nginx: http://nginx.net/
- nginx Wiki: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- OpenSUSE: http://www.opensuse.org/
- Drupal: http://drupal.org/
- WordPress: http://wordpress.org/
- TextPattern: http://textpattern.com/
- phpMyAdmin: http://phpmyadmin.net/
评论已关闭