ubuntu14.04 LNMP环境搭建笔记

295 阅读3分钟

近期学习小程序,需要搭建一个小型测试服务器,准备用LNMP,在此记录下搭建过程。

1.启用密钥登录

云服务器默认使用用户名密码登录ubuntu系统。

为了以后ssh连接方便,需要在云服务器控制台创建登录密钥对(控制台--》云服务器ECS--》菜单栏--》网络与安全),并下载秘钥文件到本地,进行无密码ssh登录,命令如下:

ssh -i xxx.pem root@xxx.xxx.xxx.xxx。

2.安装MySQL数据库

sudo apt-get update
sudo apt-get install mysql-server mysql-client
//登录mysql 进行验证
mysql –u root –p"xxxxx"

修改MySQL配置文件/etc/mysql/my.cnf ,使MySQL支持中文:

//修改之前先备份
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.back
sudo vi /etc/mysql/my.cnf 

在配置文件的节点[client]下,加入

 default-character-set = utf8

在[mysqld]下,加入

default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci

然后重新加载文件,并重启MySQL服务:

sudo service mysql reload
sudo service mysql restart

登录MySQL,查看系统字符集,看到字符集是utf-8:

mysql -u root -p"xxx"
show variables like '%character%'
/* 查询结果如下:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
*/

3.安装nginx

sudo apt-get install nginx
sudo service nginx start

安装完成后再浏览器中使用ip地址测试:xxx.xxx.xxx.xxx

4.安装php

sudo apt-get install php5-fpm

5.配置nginx

配置nginx.conf,将keepalive_timeout设置为2。(减小服务器压力?)

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.back(备份)
sudo vi /etc/nginx/nginx.conf

配置/etc/nginx/sites-available/default:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.back
sudo vi /etc/nginx/sites-available/default
http访问nginx配置:
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root  /root/xxxx;   #存放php文件的路径;使用root目录,需要将root的目录的权限修改为551
        index index.html index.htm index.php;  #这行后面添加 index.php作为访问首页
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root  /root/xxxxxx;
        }
        location ~ \.php$ {     #是php配置的信息
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
        location ~ /\.ht {
                deny all;
        }
}

https访问nginx配置:

配置https之前,需要先申请ssl证书。目前可以https://common-buy.aliyun.com/?commodityCode=cas#/buy申请免费的ssl证书,并下载证书文件,上传至自己的服务器。

server {
        listen 443;
        server_name _;
        root  /root/xxxxxx;
        index index.html index.htm index.php;
        ssl on;
        ssl_certificate /root/xxxxx/ssl/213969032760959.pem; #ssl_certificate和ssl_certificate_key为证书路径信息
        ssl_certificate_key /root/xxxx/ssl/213969032760959.key;
        ssl_session_timeout 5m;

        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
        ssl_prefer_server_ciphers on;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root  /root/xxxxx;
        }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
        location / {
                try_files $uri $uri/ =404;
        }
}

6.配置php

在php.ini中设置cgi.fix_pathinfo=0,并反注释该行。

sudo cp /etc/php5/fpm/php.ini  /etc/php5/fpm/php.ini.back
sudo vi /etc/php5/fpm/php.ini  
//修改文件后重新加载
sudo service php5-fpm reload
sudo service php5-fpm restart

配置PHP支持MySQL:

sudo apt-get install php5-mysql php5-curl

7.验证

配置完成后,进行验证:http:// xxx.xxx.xxx.xxx/xxxx.php

vi /usr/share/nginx/html/info.php  //修改为你配置的路径
/*文件内容
<?php
phpinfo();
?>
*/
vi /usr/share/nginx/html/mysqltest.php
/*文件内容
<?php

//连接mysql

$con = mysql_connect( "localhost",  "root",  "xxxx");

if (  ! $con  ) {

    echo 'Could not connect: '  .  mysql_error();

    die();

}

//创建一个数据库test

if( mysql_query( 'create database test' , $con )  )  {

    echo 'Database created! ';

}   else   {

    echo 'Database created error : '   .  mysql_error();

}

mysql_close( $con );
?>
*/

8.一些小问题记录

1、sudo service php5-fpm reload,如果这个命令不起作用,采用如下方式修复:
curl -L https://raw.githubusercontent.com/AbhishekGhosh/Nginx-PHP5-FPM-Restart-Fix-on-Ubuntu/master/php5-fpm > /etc/init.d/php5-fpm
​chmod +x /etc/init.d/php5-fpm
sudo /etc/init.d/php5-fpm reload/restart/start/stop //命令
2、ubuntu设置开机启动:

在/etc/rc.local中exit 0 前面添加启动命令,如果测试发现没运行则将其默认的Shell更改为Bash:

//方法1   选择no
 sudo dpkg-reconfigure dash 
//方法2 重新进行软链接
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
3、php里localhost访问MySQL失败:
mysqld --verbose --help | grep socket
//输出结果一般为/var/run/mysqld/mysqld.sock
sudo vi /etc/php5/fpm/php.ini
//修改mysql.default_socket = /var/run/mysqld/mysqld.sock
//然后 reload php配置文件,重启php服务
4、设置php允许上传文件
sudo vi /etc/php5/fpm/php.ini
//修改下列行:
upload_tmp_dir = /home/ubuntu/xdfserver/tempData    临时文件路径
file_uploads = On     允许上传文件
upload_max_filesize = 15M    最大上传文件大小
post_max_size = 20M     最大post数据大小
max_execution_time = 300  每个php页面运行时间
max_input_time = 300     每个php页面解析数据时间
memory_limit = 128M   默认128,内存大小
//需要保持 memory_limit > post_max_size > upload_max_filesize
5、php 运行加密解密算法报错
//方法1
sudo php5enmod mcrypt 
//方法2
sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/cli/conf.d/mcrypt.ini
6、snmp-mibs-downloader 安装失败的修改方法:
//错误:Package ‘snmp-mibs-downloader’ has no installation candidate 
sudo vim /etc/apt/sources.list
/*加入:
# ref. http://packages.ubuntu.com/precise/all/snmp-mibs-downloader/download
deb http://fr.archive.ubuntu.com/ubuntu precise main multiverse
*/
sudo apt-get update && sudo apt-get install snmp-mibs-downloader
7.远程访问数据库:
netstat  -an|grep 3306    //127.0.0.1:3306,表示的是本地
sudo vim /etc/mysql/my.cnf  //将bind-address = 127.0.0.1注销
//重启ubuntu
netstat  -an|grep 3306  //显示 0.0.0.0:3306
mysql -uroot -p"xxxx"
GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的数据库密码' WITH GRANT OPTION;
flush privileges;   //更新权限