buntu 官方源上 nginx 和 php 更新速度很慢,很多人不得不自己编译 nginx 和 php ,非常麻烦。这里推荐来自捷克的 Ondřej Surý 大神的 PPA 源,可以方便的安装、升级最新版本的 nginx 和 php 。注意,以下操作是在 root 账号下进行的,非 root 账号需提升到 root 权限。
安装最新版 nginx
添加 nginx 源
首先安装依赖:
apt install software-properties-common -y
终端中输入以下命令添加 nginx 源:
add-apt-repository ppa:ondrej/nginx #stable (稳定)版本
或
add-apt-repository ppa:ondrej/nginx-mainline #mainline (主线)版本
以上两个版本二选一,这里选择稳定版。
安装 nginx
apt update && apt install nginx-extras -y
配置 nginx
设置 nginx log_format 格式:
vim /etc/nginx/conf.d/main-log-format.conf
复制以下内容粘贴并保存:
log_format main '"$http_x_forwarded_for" - $remote_addr - [$time_local] "$request" '
'$status $upstream_response_time $request_time "$http_referer"'
'"$http_user_agent" $body_bytes_sent ';
注意,设定的 log 格式需要在单独的 server 配置中声明,例如如下定义 log 的方式:
access_log /var/log/nginx/www.timelate.com_access.log main;
按照官方建议,删除 /etc/nginx/sites-enabled 下的 default 配置文件:
rm /etc/nginx/sites-enabled/default
创建 default_server ,禁止 IP 及非配置域名 http 访问:
cat >> /etc/nginx/sites-available/default_server << EOF
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 500;
}
#server {
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; #替换为任一可用ssl证书
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; #替换为任一可用ssl证书私钥
# server_name _;
# return 500;
#}
EOF
如果服务器启用了 https ,需要将 https server 段的注释去掉,防止 ip 及非配置域名 https 访问。注意修改 ssl 证书的路径,替换为任一可用 ssl 证书及证书私钥即可。
启用 default_server 并重启 nginx
ln -s /etc/nginx/sites-available/default_server /etc/nginx/sites-enabled/default_server && systemctl restart nginx
安装 php7.1
添加 php 源
终端中输入以下命令添加 php 源:
add-apt-repository ppa:ondrej/php
安装 php7.1
终端中输入以下命令安装 php7.1 及常用扩展:
apt update && apt install php7.1-fpm php7.1-mysql php7.1-curl php7.1-gd php7.1-mbstring php7.1-mcrypt php7.1-xml php7.1-xmlrpc php7.1-zip php7.1-opcache php7.1-ldap -y
安装完成后,修改 /etc/php/7.1/fpm/php.ini ,防止跨站攻击。
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.1/fpm/php.ini
重启 php7.1-fpm :
systemctl restart php7.1-fpm.service
安装 ionCube Loader 10
下载源码:
wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.zip && unzip ioncube_loaders_lin_x86-64.zip
ioncube_loader 需与自己的 php 版本相对应,这里选择 php7.1 版本的 ioncube_loader ;php7.1 的扩展的目录在 /usr/lib/php/20160303 :
cp ioncube/ioncube_loader_lin_7.1.so /usr/lib/php/20160303
增加 ioncube_loader 模块配置文件:
cat >> /etc/php/7.1/mods-available/ioncube.ini << EOF
zend_extension = ioncube_loader_lin_7.1.so
EOF
将 ioncube_loader 模块接入 php-fpm 和 php-cli
ln -s /etc/php/7.1/mods-available/ioncube.ini /etc/php/7.1/fpm/conf.d/01-ioncube.ini
ln -s /etc/php/7.1/mods-available/ioncube.ini /etc/php/7.1/cli/conf.d/01-ioncube.ini
重启 php7.1-fpm 生效:
systemctl restart php7.1-fpm.service
检查一下 ioncube_loader 模块是否生效:
root@timelate:~# php -v
PHP 7.1.23-2+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 15 2018 11:37:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.5, Copyright (c) 2002-2018, by ionCube Ltd.
with Zend OPcache v7.1.23-2+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
看到 with the ionCube PHP Loader (enabled) 字样即说明 ionCube 模块已生效。
删除临时文件:
rm -rf ioncube ioncube_loaders_lin_x86-64.zip
安装 MySQL
通过以下命令安装最新版 MySQL :
apt install mysql-server -y
mysql_secure_installation #初始化 MySQL ,设置密码,按提示操作即可
注意,通过以上步骤虽然为 MySQL 的 root 用户设置了密码,但在运行 mysql -uroot -p
命令后回车却能直接进入控制台,设置的密码并未生效,解决方法如下:
mysql -uroot -p #使用空密码进入控制台
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; # your_password 修改为自己的密码
修改完成后退出控制台,再次运行 mysql -uroot -p
,发现设置的密码已生效,空密码或错误密码已不能登录。
更新 LNMP
通过以上步骤便可在 Ubuntu 18.04 上安装最新版(稳定版)的 nginx 、 php 及 MySQL 。后续如果有相应版本更新,直接通过以下命令更新即可:
apt update && apt upgrade -y
至此, LNMP 环境搭建完毕,本文结束。