LNMP 安装手册

centos6.8下 LNMP (nginx1.10.2 + php7.1.27 + mysql5.6.42) - 安装手册

一、nginx安装

1.yum -y install nginx

安装完成之后会显示 Complete!,可以通过如下命令检查 Nginx 是否安装成功:
nginx -v
显示
nginx version: nginx/1.10.2

2.配置服务

在 /etc/nginx/conf.d 目录,可以创建多个不同服务的配置

配置一个web服务:新建一个 mw.conf 文件
下面是我的《唐诗宋词元曲鉴赏》微信小程序的服务器nginx配置实例

server {
    listen      443;
    server_name mw.hupeng.cn;
    index  index.php index.html index.htm;  
    root /usr/share/nginx/mwServer/web;
    ssl on;
 
    ssl_certificate           /data/release/nginx/2010350_mw.hupeng.cn.pem;
    ssl_certificate_key       /data/release/nginx/2010350_mw.hupeng.cn.key;
    ssl_session_timeout       5m;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache         shared:SSL:50m;
    ssl_prefer_server_ciphers on;
 
    location ~ \.php$ {
        root   /usr/share/nginx/mwServer/web;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

配置既提供http请求的web服务又支持tcp请求的服务:新建一个 pk24.conf 文件
此时客户端发起tcp请求不需要知道tcp服务器的监听端口了,因为在该配置中已经配置好了,外部只需要从443端口到进来,nginx会根据配置转到相应的监听端口上。
下面是我的《约战24点》微信小游戏的服务器nginx配置实例

upstream websocket {
    server localhost:6661; #本地websocket反向代理地址
}

upstream webhttp {
    server localhost:6662; #本地web http反向代理地址
}

server {
    listen      443;
    server_name www.hupeng.cn;
 
    ssl on;
    ssl_certificate           /data/release/nginx/cert-1541664018962_www.hupeng.cn.crt;
    ssl_certificate_key       /data/release/nginx/cert-1541664018962_www.hupeng.cn.key;
    ssl_session_timeout       5m;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache         shared:SSL:50m;
    ssl_prefer_server_ciphers on;
 
    #小程序http访问:https://www.hupeng.cn/hs
    location /hs {
        proxy_pass http://webhttp;
        proxy_http_version 1.1;
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header Host $http_host;
    }

    #小程序websocket访问:wss://www.hupeng.cn/ws
    location /ws {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
3.nginx常用命令

nginx -t #测试配置是否有语法错误
nginx -s reload #重新加载配置
nginx -s reopen #重启
nginx -s stop #停止
nginx -s quit #退出

可以使用 netstat -ntpl 查看下 nginx的https监听是否启动(443端口)

二、mysql安装

1.查看已安装的软件

rpm -qa|grep mysql

2.停止MySQL服务

service mysqld stop

3 卸载旧版MySQL

yum remove mysql mysql-*
看看是否有残余的mysql,输入命令:
yum list installed | grep mysql

4.下载安装最新的rpm文件

rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

5. 安装MySQL,输入命令(过程中问询是否yes,一路y下去):

yum install mysql-community-server

6.解决root 密码问题

mysqladmin -u root password 'root'

7.MySQL的相关操作

修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -proot password 123456
重启mysql服务
service mysqld restart
查看MySQL状态
service mysqld status
netstat -na | grep 3306,如果看到有监听说明服务启动了
登录 mysql -u root -p

显示有哪些数据库 show databases;
创建名称为rewin的数据库 CREATE DATABASE rewin;
删除名称为rewin的数据库 DROP DATABASE rewin;
选择rewin数据库 USE rewin;

8.使用时遇到的问题及解决方法

远程用navicat 工具连接拒绝
mysql -u root -p
mysql>use mysql;
mysql>update user set host ='%' where user ='root';
mysql>flush privileges;
可能会报错 ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 退出MySQL重启就好了

可能会导致Linux上面无法登录了
解决:
1.修改/etc/my.cnf 文件 加入 skip-grant-tables
2.重启 MySQL
service mysqld restart
3.进入:mysql -u root -p就可以不用密码登录了
mysql> use mysql;
4.给root用户设置新密码
mysql> update user set password=password("新密码root") where user="root";
5.刷新数据库
mysql> flush privileges;
6.退出mysql
mysql> quit;
7.改好之后,再修改一下/etc/my.cnf这个文件,把我们刚才加入的 "skip-grant-tables"这行删除,保存退出再重启mysql就可以了。

远程登录的时候出错,提示:Host 'xxx' is not allowed to connect to this MySQL server
是mysql未开启mysql远程访问权限导致
1.登录到mysql
mysql -uroot -ppwd
2.查看user表
mysql> use mysql
Database changed
mysql> select host,user,password from user;

+------+------+-------------------------------------------+
| host | user | password |
+------+------+-------------------------------------------+
| localhost    | root | *826960FA9CC8A87953B3156951F3634A80BF9853 |
+------+------+-------------------------------------------+
1 row in set (0.00 sec)

表中host、user字段标识了可以访问数据库的主机和用户。例如上面的数据就表示只能本地主机通过root用户访问。原来如此,难怪远程连接死活连不上。
为了让数据库支持远程主机访问
修改host字段的值,将localhost修改成需要远程连接数据库的ip地址。或者直接修改成%。
修改成%表示,所有主机都可以通过root用户访问数据库。为了方便,直接修改成%。
命令:mysql> update user set host = '%' where user = 'root' and password != '';
再次查看user表

+------+------+-------------------------------------------+
| host | user | password |
+------+------+-------------------------------------------+
| % | root | *826960FA9CC8A87953B3156951F3634A80BF9853 |
+------+------+-------------------------------------------+
1 row in set (0.00 sec)

修改成功,输入命令mysql> flush privileges;
回车使刚才的修改生效,再次远程连接数据库成功。

三、php安装

使用源码安装php

1.安装依赖包
yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel

如果有报错:No package libmcrypt available.

解决方法:yum install epel-release //扩展包更新包

2.php官网下载 https://www.php.net/releases/

php-7.1.27.tar.gz

3.解压

tar -zxvf php-7.1.27.tar.gz

4.编译
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/etc \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mcrypt \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-libmbfl \
--with-onig \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-opcache

编译安装:make && make install

在编译的时候可能会报下面的错误:

undefined reference to `libiconv'

两种解决方法:

  • 舍弃libiconv,使用 –without-iconv
  • 修改下 Makefile ,找到 EXTRA_LIBS 项在其末尾添加 -liconv
5.配置环境变量

vi /etc/profile
在末尾追加
PATH=$PATH:/usr/local/php/bin
export PATH
执行命令使得改动立即生效
source /etc/profile

6.查看是否安装成功

php -v
显示版本
PHP 7.1.27 (cli) (built: Apr 4 2019 16:55:03) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
查看安装目录
whereis php
显示 php: /usr/local/php

7.php和php-fpm相关配置文件

cp php安装包解压目录/php.ini-production /etc/php.ini #php的配置文件拷贝到/etc下面
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
配置php
vim /etc/php.ini
expose_php = Off #禁止显示php版本的信息
配置php-fpm
vim /usr/local/php/etc/php-fpm.d/www.conf
user = nginx
group = nginx

8.启动php-fpm

cp php安装包解压目录/sapi/fpm/php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm

四、测试

  1. 新建一个项目目录 /usr/share/nginx/mwServer/web
  2. cd /usr/share/nginx/mwServer/web
    创建一个 index.php 加入
<?php
   phpinfo();
?>

3.在浏览器里面输入 https://mw.hupeng.cn/
如果显示php的信息了,表示php和nginx安装以及配置成功(nginx使用的上文中的mw.conf配置)

如果显示 502 Bad Gateway 错误
解决:用 netstat -ntpl 命令查看发现 php-fpm 没有启动
service php-fpm start
出错后看nginx错误日志 /var/log/nignx/error.log

五、备注

nginx 默认配置文件 :/etc/nginx/conf.d/default.conf
nginx 默认站点目录是:/usr/share/nginx/html/
权限设置:chown nginx.nginx /usr/share/nginx/html/ -R

MySQL数据库目录是:/var/lib/mysql
权限设置:chown mysql.mysql -R /var/lib/mysql

php 默认按照路径:/usr/local/php
php 配置文件路径:/etc/php.ini (修改后的)
php-fpm 配置文件:/usr/local/php/etc/php-fpm.d/www.conf

一个干净的Linux环境上安装 LNMP 经常会碰到一些坑,这里总结和整理下自己在阿里云服务器上的安装全部过程。
如果不想这么麻烦的安装环境,推荐大家可以试试 宝塔
宝塔linux面板命令大全 http://www.bt.cn/btcode.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容