最近闲的折腾,打算搞搞私有云。于是打算从自己的小站开始折腾,正好最近也有JavaWeb课程的课程设计。所以也就一并折腾了。但是这篇文章是在三级项目结题之后完成的。
首先说明一下我的平台:Archlinux 4.11.3-1-Arch,算是比较新的。
搭建网页服务器的总体构想是,利用nginx(可以读作engine x)作为网关,然后转发到php-fpm上,实现php网站服务器。下面是Nginx的介绍:
Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。
在php端,用php-fpm来完成。关于php-fpm的简介如下:
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
它的功能包括:
支持平滑停止/启动的高级进程管理功能;
可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
stdout 和 stderr 日志记录;
在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
文件上传优化支持;
“慢日志” – 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
fastcgi_finish_request() – 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
动态/静态子进程产生;
基本 SAPI 运行状态信息(类似Apache的 mod_status);
基于 php.ini 的配置文件。
在Archlinux上面安装以上两个软件是很简单的
$ sudo pacman -S nginx fcgi php-fpm
安装完毕之后就可以对他们两个进行配置了。首先配置nginx,默认的配置文件位于/etc/nginx目录下,名为“nginx.conf“。打开之,首先找到 user html,取消注释,并将html改为http
user http;
实际上上面这一步并不是必须的,然而处于强迫症和优雅综合征,我还是改了。然后可以设置一下worker_process和worker_cpu_affinity,这两个都设置为auto即可。如果你想方便debug,可以开启日志,然后选择你的日志地点即可。
最重要的一步是配置我们的服务器以及网页的根目录,我们找到http字段,确保这个字段中有如下内容:
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
至于log和keepalive_timeout两个选项,如果有需要,请自行打开即可。
然后是这里面的server字段,listen表示侦听端口,默认的话我们使用80端口,然后是servername,这个我们使用localhost,注意在这里我们需要加入root字段,也就是我们网页的根目录假设我们的目录为/srv/http,那么我们需要在server字段中添加
root /srv/http/;
由于我们需要建立php服务器,所以我们在下面找到
location ~ \.php$ {
这个字段表示php配置,由于我们已经配置了root,在同一个server中,里面所有的location都会
继承我们配置的root,所以这里就不要在配置root,将其注释掉即可。但是我们需要添加fastcgi_pass字段:
fastcgi_pass unix:/run/php-fpm/php-fpm/sock;
fastcgi_index <你的index文件>
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include fastcgi.conf;
保存退出即可。
解释一下上面的内容,首先我们在nginx.conf中配置了nginx的基本工作方式,worker以及log等,然后在http字段中配置了我们的服务器(如果有多个Server字段,也就意味着多个服务器,用这种方式我们可以实现虚拟主机,在tomcat中的host的作用和这里的Server差不多),在服务器字段中我们配置了我们的根目录,也可以在这里配置错误页面。然后最后我们在这里面配置了我们的php信息,添加了fastcgi的配置,使fastcgi能够找到php-fpm,并利用其完成php页面的解析。
然后说说php的配置,php的默认配置文件在/etc/php目录中,配置文件为php.ini
我们需要做的仅仅是找到open_basedir,然后在后面添加上我们的网站根目录即可。
最后保存退出,为了能够验证效果,我们可以在我们的根目录创建一个index.php的测试页面,这个页面中我们输出phpinfo
<?php phpinfo(); ?>
然后先后启动php-fpm和nginx
sudo systemctl enable php-fpm nginx
sudo systemctl start php-fpm nginx
然后通过浏览器进入我们刚刚产生的那个页面,就可以看到效果了