在Debian 7上配置Nginx + php-FPM + apc + MariaDB(翻译)

  • 来源:
  • 更新日期:2018-05-08

摘要:摘要: 安装一个功能完善的php 服务器环境,你需要安装一整套的配套软件,包括一个网页服务器,一个数据库。在本篇文章中,我们将安装配置nginx, php, php-fpm, apc 和 MariaDB。

配置 Debian 是作为Linux Web服务器,是一个非常不错的选择,她是当前仅次于Centos的最受欢迎的服务器操作系统。我非常喜爱在系统上使用apt/dpkg/gedbi命令去安装和更新软件包,这非常方便。

002UASMrzy7605pjKJv15&690.jpg

安装一个功能完善的php 服务器环境,你需要安装一整套的配套软件,包括一个网页服务器,一个数据库。在本篇文章中,我们将安装配置nginx, php, php-fpm, apc 和 MariaDB。

Nginx是一个新潮的网页服务器,它被设计成为能承受巨大网络流量而且使用最少的内存和CPU占用量。在Nginx出现之前,独步武林的网页服务器是Apache。然而,随着互联网的越来越流行,就需要一个更快速,效率更高的网页服务器。

Nginx vs Apache

Apache 的设计是模块化的,具拥有很多的功能,但是大部的功能在常规的网站中都是用不上的,它的设计可能是为了迎合所有人的需求,但是最后的结果是制造了一个重量级的且包含大部分不常用功能的网页服务器。 Nginx 在另一方面是非常时髦和极速的网页服务器,主要集中在速度、扩展性及性能上。关于它的强大的技术已经超出了本文的范围。我们可能在后面作一些介绍。能告诉你的信息是,这个网站就是运行在Nginx上。 现在,抛开那些更深的讨论,让我们开始吧!

在Debian下安装Nginx

Debian的官方包中已经有了Nginx包,所以你不需要再去其他地方找了,使用apt-get来安装它。

apt-get install nginx

现在运行Nginx

service nginx start

这时在浏览器中打开以下网址来访问Nginx服务器

你将看到欢迎信息

Welcome to nginx!

重要提示

为了更好的管理的Nginx服务器,这有几样东西需要你记住。Nginx的配置文件能在以下目录找到

/etc/nginx root@localhost:/etc/nginx# ls conf.d koi-win naxsi.rules scgi_params uwsgi_params fastcgi_params mime.types nginx.conf sites-available win-utf koi-utf naxsi_core.rules proxy_params sites-enabled

我建议你不要修改 nginx.conf 。我们的替代方案是给每一个虚拟主机/网站创建单独的配置文件保存在以下目录

/etc/nginx/sites-available /etc/nginx/sites-enabled

这里和Apache相似,sites-enabled 包含的配置文件将会被启用,这些文件都是指向sites-available 文件夹下配置文件的符号链接。

配置一个虚拟主机

现在,我们已经安装好了Nginx,是时候配置一个虚拟主机了。这就是在真实的网站服务器配置你的网站。 在 /etc/nginx/sites-available 文件夹里能看到一个名为default的文件,它是一个创建我们自己的配置文件的模板文件。我们只要拷贝它并命名为你的网站。

cp default binarytides.com root@localhost:/etc/nginx/sites-available# ls binarytides.com default

我们选择网站的名称作为配置文件的名称,这样我们就能很容易的记住和维护。

现在打开binarytides.com这个配置文件,并根据你的需求进行修改。 你能看到一个server节点,如下

server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost;

第一个要配置的就是server_name,这个就是你的网站网址,比如

server_name binarytides.com

或者

server_name binarytides.com www.binarytides.com

当有人在浏览器中打开binarytides.com,Nginx会根据HTTP header中包含的hostname去选择和搜索匹配的server节点,当找到匹配的server节点,将会使用这部分的配置。 网站另一个要配置的东西是网站的根目录。默认的目录是/usr/share/nginx/www ,你可能希望将它改为其他目录。

通常的做法是给每个虚拟主机分别建立一个目录他,如下

/usr/share/nginx/www/binarytides.com/ /usr/share/nginx/www/google.com/

所以创建一个合适的目录并且将根目录设置指向到这个目录,如

... root /usr/share/nginx/www/binarytides.com; ...

在完成以上修改后,保存配置文件,并且创建一个符号链接到 /etc/nginx/sites-enabled 目录。

root@localhost:/etc/nginx/sites-available# ls binarytides.com default root@localhost:/etc/nginx/sites-available# cd .. root@localhost:/etc/nginx# cd sites-enabled/ root@localhost:/etc/nginx/sites-enabled# ln -s ../sites-available/binarytides.com root@localhost:/etc/nginx/sites-enabled# ls binarytides.com default root@localhost:/etc/nginx/sites-enabled#

现在测试一下你的配置文件

nginx -t nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

最后一行的输出内容必须为successful ,否则有错误会显示。可能会有一些警告,我们可以在后面修正。

最后,为了让新配置生效,我们需要重启Nginx。

service nginx restart Restarting nginx: nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored nginx. root@localhost:/etc/nginx/sites-enabled#

这样,新的配置就生效了。现在创建一个新的index.html文件到相应的虚拟主机根目录,从浏览器打开它,你就能看到了。

安装php和php-fpm

接下来的事情要安装的是PHP解释器和PHP-FPM。 PHP-FPM是PHP专用的来管理处理PHP请求的FastCGI进程管理器,它兼容的大部分WEB服务器。

Nginx <== 通信 ==> Php-FPM <== 管理 ==> php child process

首先安装必要的包。

apt-get install php5 php5-fpm

它会自动安装相关依赖包,如果你需要用命令行运行脚本,你可以安装 \'php5-cli\' 包

Php-fpm 以单独的服务器运行,并且使用套接字(socket)与nginx通信。因此,php的执行是完全与nginx隔离的,此外由于fpm保持php进程持续,所以它完全支持APC。

现在,我们看一下php-fpm配置文件,文件在

/etc/php5/fpm/

进程池(Pool)是一组具有相同的用户/组运行PHP进程。所以如果你想每个网站的脚本以独立的用户权限运行,你需要创建独立的fpm进程池。为了简单起见,我们在这只演示单个进程池。 The pool configuration files are inside the pool.d directory. Navigate in 进程池的配置文件在pool.d目录。如下

root@localhost:/etc/php5/fpm/pool.d# ls www.conf

www.conf也是供你创建独立进程池的模板,它的内容差不多是这样子的

; Start a new pool named \'www\'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name (\'www\' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - \'slowlog\' ; - \'listen\' (unixsocket) ; - \'chroot\' ; - \'chdir\' ; - \'php_values\' ; - \'php_admin_values\' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user\'s group ; will be used. user = www-data group = www-data ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; \'ip.add.re.ss:port\' - to listen on a TCP socket to a specific address on ; a specific port; ; \'port\' - to listen on a TCP socket to all addresses on a ; specific port; ; \'/path/to/unix/socket\' - to listen on a unix socket. ; Note: This value is mandatory. listen = /var/run/php5-fpm.sock ; Set listen(2) backlog. ; Default Value: 128 (-1 on FreeBSD and OpenBSD) ;listen.backlog = 128 The above thing consists of comments mostly and the most important 4 lines are [www] 是进程名 2.user = www-data 是指定脚本的运行用户权限 3. group = www-data 是指定用户组 4. listen = /var/run/php5-fpm.sock 是改池的套接字通信地址。该套接字必须给nginx读写权限,让nginx与fpm通信。

我们在这里不准备修改太多。只用记住套接字通信地址,将它放到nginx的配置文件里。打开nginx的配置文件

里面包含一个类似下面的配置

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ .php$ { # fastcgi_split_path_info ^(.+.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; # include fastcgi_params; #}

去掉注释,修改成

location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }

测试PHP

现在在网站根目录下面放一个有phpinfo函数的文件

<?php phpinfo();

然后在浏览器中打开这个文件,你将看到的是php的信息,意味着php配置成功且运行正常。

另外一点,你可以将index.php加入你索引列表,这样当访问目录时,将默认调用index.php。

root /usr/share/nginx/www/binarytides.com; index index.html index.htm index.php;

安装apc - Alternative PHP Cache

APC是一个提高PHP脚本的执行速度的好方法。 APC编译PHP代码,并保存操作码在内存中,这样就不需要从文件中重新编译相同的php代码。这大大加快执行速度。除了操作码缓存,APC还提供了一个用户缓存来在内存中存储PHP应用程序原始数据。 PHP5.5版本中引入了一个名为OPcache的新功能,它实现与apc一样的操作码缓存,从而降低了apc的地位。 设置apc是非常简单和快捷的,只用为php安装apc包。

apt-get install php-apc

然后重启php-fpm

service php5-fpm restart

现在,刷新的phpinfo页面,它有关APC的信息了。apc的配置文件在

/etc/php5/fpm/conf.d/20-apc.ini

这个文件可以根据的性能优化作相应的调整。以下是我使用的配置

extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=3600 apc.user_ttl=7200 apc.gc_ttl=3600 apc.max_file_size=1M

查找apc参数的,以获取更多的信息。

在Debian上安装MariaDB

想在我们来到了LEMP安装的最后一步了,我们要安装的是MariaDB而不是Mysql。我们知道Mysql现在在oracle手上,可能在不久将会商业化。所以大部分的公司开始转向MariaDB。好消息是MariaDB兼容mysql并增加了很多的功能,所以如果你的php应用使用的是mysql,你可无缝转换到MariaDB。

MariaDB 现在不再debian包仓库中,可以从以下地址添加源

https://downloads.mariadb.org/mariadb/repositories/

根据页面上的提示选择相应的版本,获取源地址。

下面就是我获取到的命令

sudo apt-get install python-software-properties sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db sudo add-apt-repository \'deb http://mirrors.fe.up.pt/pub/mariadb/repo/10.0/debian wheezy main\'

现在我们来更新apt的缓存并安装mariadb包

sudo apt-get update sudo apt-get install mariadb-server mariadb-client

安装时mariadb会要求输入root的密码。输入密码,并确定你不会忘记。

安装完成后,检查mariadb的版本

# mysql -V mysql Ver 15.1 Distrib 10.0.3-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1

要注意的是这里的命令和mysql的一样,但是版本信息中显示的是mariadb 。

网站服务器已准备就绪

现在LEMP网站服务器已经可以使用了,你可以安装一些比如phpmyadmin去更好的管理数据库,Phpmyadmin 已经存在debian的仓库中,你可以直接从那安装。