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
四、测试
- 新建一个项目目录 /usr/share/nginx/mwServer/web
- cd /usr/share/nginx/mwServer/web
创建一个 index.php 加入
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