1.1. 概述

Ubuntu 16.04 安装 WordPress 主要分三步:安装 Nginx 并解析域名 ,安装 PHP ,安装 MySQL。在此基础上本文还扩充了添加SSL证书、www跳转到主域名、域名的DNS解析等内容。

1.2. 安装 Nginx 并解析域名

1.2.1. 首先,更新依赖包:

切换到root账户,否则更新包会有如下错误

ubuntu@VM-ubuntu:~$ apt-get update
Reading package lists... Done
W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)

切换到 root 账户

sudo su

更新依赖包:

apt-get install update

等待更新完毕!安装 Nginx

apt-get install nginx

安装过程中如果提示(Y/N)的时候,一律输入y

此时,在浏览器中输入IP地址,如果安装成功,则可以看到默认的 Nginx 页面:

1.2.2. 然后,设置域名的DNS解析

解析成功后,在浏览器输入域名可以看到刚才的 Nginx 默认页。

1.2.3. 最后,修改 Nginx 配置文件

配置文件路径:/etc/nginx/sites-available/default

......

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files uri uri/ =404;
        }

......


修改36行的 root /var/www/html;root /var/www/myblog;

1.3. 添加SSL证书

1.3.1. 申请免费SSL证书:

地址:https://freessl.org/

1.3.1.1. 申请步骤:

输入要申请证书的域名:

按照要求,验证域名所有权:

验证完成,下载证书文件。

1.3.1.2. 证书文件

证书文件包含两个:

这两个文件的含义是:

| 文件名 | 内容 | | cert.pem | 服务端证书 | | chain.pem | 浏览器需要的所有证书但不包括服务端证书,比如根证书和中间证书 | | full_chain.pem | 包括了cert.pem和chain.pem的内容 | | private.key | 证书的私钥 |

一般情况下full_chain.pemprivate.key就够用了。

1.3.2. Nginx 安装SSL 证书

创建ssl证书目录:

cd /etc/nginx
mkdir ssl

在此路径下添加两个文件:

root@VM-ubuntu:/etc/nginx/ssl# vim mydomain.crt
root@VM-ubuntu:/etc/nginx/ssl# vim mydomain.key

  • mydomain.crt 对应文件full_chain.pem 中的内容。
  • mydomain.key对应文件private.key 中的内容。

1.3.2.1. 修改站点配置文件,启用SSL证书

编辑站点配置文件:

root@VM-ubuntu:/etc/nginx/sites-available# vim default 

服务器部分,注释掉80端口监听,开启443端口监听并指定SSL证书路径:

server {
    #listen 80 default_server;
    #listen [::]:80 default_server;

    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl on;
    ssl_certificate /etc/nginx/ssl/mydomain.crt;
    ssl_certificate_key /etc/nginx/ssl/mydomain.key;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
........

修改完成后,检查配置文件语法并重启服务器:

root@VM-ubuntu:/etc/nginx/sites-available# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@VM-ubuntu:/etc/nginx/sites-available# service nginx restart

刷新浏览器后,可以查看证书信息:

1.3.3. 网站安全性检查

检查网站安全性等级:https://www.ssllabs.com

Test your server:

1.3.3.1. SSL A+配置

生成一个 DH group。

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

再来就是针对 SSL 做一些自定义的设置:(添加 Security enhancements 中的内容)

 # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl on;
    ssl_certificate /etc/nginx/ssl/rqc.im.crt;
    ssl_certificate_key /etc/nginx/ssl/rqc.im.key;

 #####  Security enhancements begin

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 114.114.114.114 valid=300s;
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

 #####  Security enhancements end

修改完成后,检查配置文件语法并重启服务器:

root@VM-ubuntu:/etc/nginx/sites-available# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@VM-ubuntu:/etc/nginx/sites-available# service nginx restart

重新测试网站SSL等级:

1.3.4. http 跳转到 https

默认安装完成之后,如果用户打开 http://mydomain 页面会显示错误,不会自动跳转到https。

解决方式是:多曾加一个 server block,监听 80 端口,返回 301 重定向。

server {

    listen 80 default_server;
    listen [::]:80 default_server;
    server_name mydomain.com www.mydomain.com;
    return 301 https://server_namerequest_uri;

}

设置完成之后,同样检查语法,重启Nginx:

root@VM-ubuntu:/etc/nginx/sites-available# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@VM-ubuntu:/etc/nginx/sites-available# service nginx restart

1.4. 安装 PHP 7.2

首先添加 PPA

sudo apt-get update

sudo apt-get install software-properties-common
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

sudo apt-get update

然后,安装 PHP7.2

sudo apt-get -y install php7.2-fpm php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-gd php7.2-xml php7.2-mysql php7.2-cli php7.2-zip php7.2-curl

安装完毕之后配置 php-fpm :

vim /etc/php/7.2/fpm/php.ini

//;cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=0

1.5. 安装 MySQL 5.7

输入安装命令:

sudo apt-get install mysql-server

期间需要设置mysql密码查看安装的版本:

mysql --version

检查MySQL的运行状态:

sudo systemctl status mysql

登录Mysql

$ mysql -u root -p
Enter Password:

在 mysql 执行:

CREATE DATABASE myblog DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE USER 'blogname' IDENTIFIED BY 'blogpwd';

GRANT ALL PRIVILEGES ON myblog.* TO 'blogname';

FLUSH PRIVILEGES;
EXIT;

1.5.1. MySQL 常用命令(了解)

停止MySQL服务:

sudo systemctl stop mysql

MySQL的启动命令:

sudo systemctl start mysql

MySQL重启命令:

sudo systemctl restart mysql

1.5.2. 设置MySQl安全服务(了解)

命令行环境执行:

mysql_secure_installation

设置步骤:

  1. 第一步是启用密码验证插件 Y
  2. 验证级别:2
  3. 用户当前的密码强度是50,可以选择修改密码,此处可以选择忽略。
  4. 移除匿名用户:y
  5. root账户只允许本地登录:y
  6. 移除默认的test数据库:y
  7. 重新加载权限表

1.5.3. 重新配置 Nginx

vim /etc/nginx/sites-available/default

打开配置文件,配置:

server {
    listen 80;
    listen [::]:80;
    root /var/www/wordpress;

    index index.php index.html index.htm index.nginx-debian.html;
    # 注意我们添加了 index.php
    server_name  example.com www.example.com;

    client_max_body_size 100M;

    location / {
        try_files uri uri/ /index.php?args;             }      location ~ \.php {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name;
         include fastcgi_params;
    }
}

1.6. 安装 WordPress

下载 WordPress 安装包解压后上传到网站目录(此处可参考我的另一篇文章《腾讯云主机 Ubuntu 系统使用 sftp 上传文件》)。

可以在浏览器中一步步按照指示安装。

也可以复制 wp-config-sample.php 修改名称为 wp-config.php

打开wp-config.php文件:

配置数据库连接字符串:

// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', '数据库名称');

/** MySQL数据库用户名 */
define('DB_USER', '登录用户');

/** MySQL数据库密码 */
define('DB_PASSWORD', '登录密码');

/** MySQL主机 */
define('DB_HOST', 'localhost');

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

另外添加如下配置:

/* 配置 WordPress 文件上传 */
define('FS_METHOD', 'direct');
define('FS_CHMOD_DIR', 0777);
define('FS_CHMOD_FILE', 0777);

设置完成,打开浏览器。


本文为原创文章,转载请注明出处!欢迎关注任前程博客 https://renqiancheng.com/,第一时间看后续精彩文章。