260×260

科学搜查官yuchanns

理想的生活是纯粹地热爱技术
  • Shenzhen, China
  • 后端开发工程师
Posted 3 years ago

搭建LNMP环境

准备工作

注:本文使用xshell连接虚拟机中的ubuntu进行环境部署

  • 安装ubuntu 16.04
  • 如果是在虚拟机中安装,则给系统安装ssh:
sudo apt-get install openssh-server
  • 开放部分端口:
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT # 用于通过xshell和系统远程通信 sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 用于外部访问Webserver sudo iptables-save # 保存设置使防火墙规则生效
  • 如果是在虚拟机中安装,查看本机IP地址:
ifconfig

安装环境

  • 首先切换成管理员身份便于后续安装:
sudo -i
  • 添加并更新源:
apt-get install python-software-properties # 安装apt源管理工具 add-apt-repository ppa:nginx/stable # 添加nginx稳定版安装源 add-apt-repository ppa:ondrej/php # 添加php安装源 apt-get install update # 更新软件源 apt-get install vim tree # 顺便安装一下vim编辑器和tree
  • 安装mysql:
apt-get install mysql-server

安装过程中会要求设置mysql root账号的密码。

  • 安装php:
apt-get install php5.6 php5.6-fpm php5.6-mysql php5.6-curl php5.6-memcache # 这里我选择了php5.6版本
  • 设置/etc/php/5.6/fpm/php.ini使其支持pathinfo模式(主要是为了兼容Thinkphp框架)
# /etc/php/5.6/fpm/php.ini # 搜索到;cgi.fix_pathinfo=1,去掉前面的分号并把值改为0 cgi.fix_pathinfo=0
  • 安装nginx:
apt-get install nginx

配置环境

  • 设置网站根目录:
mkdir /www # 根据自身需求选择网站根目录,我习惯设置在/www里面 chmod -R 755 /www # 所有者拥有读写执行权限,其他人拥有读执行权限

查阅/etc/nginx/nginx.confhttp{}模块,我们可以得知nginx的日志位于/var/log/nginx,包括access.log和error.log,前者是nginx的工作日志,后者是启动失败记录的日志——如果nginx出错可以到此来查阅原因。此时,我们注意到http{}模块尾部有这样一段代码:

# /etc/nginx/nginx.conf include /etc/nginx/sites-enabled/*;

这段代码表示引入网站子配置文件。子配置文件的好处在于每个网站的配置独立,方便管理。 进入/etc/nginx/sites-enabled/,创建一个default文件,作为默认网站配置:

# /etc/nginx/sites-enabled/default server { listen 80; # 监听80端口 listen [::]:80 default_server; root /www; # 默认网站根目录 index index.php; # 默认寻找文件 server_name _; location / { if (!-e $request_filename){ # 配置重写规则 rewrite ^/(.*)$ /index.php?s=/$1 last; # 为网址重写添加index.php # 这样网址可以省略index.php } try_files $uri $uri/ =404; } location ~ \.php$ { # 接收经过重写的请求 try_files $uri $uri/ =404; # 规定重定向URI变成死循环时跳转到404报错 fastcgi_split_path_info ^(.+\.php)(.*)$; # 正则匹配请求网址的pathinfo内容 fastcgi_param PATH_INFO$fastcgi_path_info; # 将取得的pathinfo赋值给PATH_INFO变量 # 这样php就可以通过$_SERVER['PATH_INFO']获取pathinfo的信息 fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; # fastcgi交由php5.6-fpm进行管理 fastcgi_index index.php; # 将index.php作为默认首页文件 include fastcgi_params; # 引入/etc/nginx/fastcgi_params文件的全部fastcgi_param } }

编辑/etc/nginx/fastcgi_params文件,在最后一行添加新的参数:

# /etc/nginx/fastcgi_params # 在最后一行添加 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 表示nginx传给fpm的完整路径为根目录/文件相对路径,例如: # /www/test/index.php

输入:

service nginx reload

重启nginx。如果重启失败,说明配置文件的语法存在错误。可以查询error.log日志检查错误的地方,进行修改。

  • 配置项目网站 复制一份/etc/nginx/sites-enabled/default到同目录下,建议命名与项目名称相同,便于管理:
cd /etc/nginx/sites-enabled cp default mysite

对项目网站配置文件做一点修改:

server { # ...省略不变配置 root /www/mysite/public; # 修改为你的项目入口文件所在路径 server_name mysite.com; # 修改为你的域名 # ...省略不变配置 }

重启php-fpm和nginx:

service php5.6-fpm reload service nginx reload
  • 如果是在虚拟机中部署,需要在Windows的hosts文件中添加以下内容才能访问到服务器的项目:
# 虚拟机IP 网站域名 192.168.199.134 mysite.com
  • 创建项目入口文件index.php
# /www/mysite/public/index.php <?php echo phpinfo();

访问 mysite.com 即可看到phpinfo()输出的信息。到此,LNMP环境基础搭建完毕。